鸢尾花——决策树

现有鸢尾花数据集iris.data。Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width),4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

现需要进行如下实验:

1、使用pandas库读取数据集,得到相应矩阵,并进项相应的数据预处理:包括数据标准化与鸢尾花类别编码等。

2、采用决策树分类模型(DecisionTreeClassifier)训练鸢尾花数据集,测试集取30%,训练集取70%。

3、特征选择标准criterion请分别选择"gini"与“entropy”,在控制台分别打印出其测试集正确率。请问在iris.data数据及上,选择不同的特征选择标准,结果有无区别?

4、为了提升模型的泛化能力,请分别使用十折交叉验证,确定第三小问中两个决策树模型的参数max_depth(树的最大深度,该特征为最有效的预剪枝参数)与max_features(划分时考虑的最大特征数)的最优取值。max_depth取值范围为1-5,max_features的取值范围为1-4。请在控制台输出这两个参数的最优取值。

5、分别使用最优取值替换模型的参数设置。

6、为了更好的反应模型的预测能力,请在所有数据上使用sklearn的cross_val_score进行十折交叉验证,输出两个模型采用最优参数设置后的平均预测准确率,并在控制

### 使用决策树鸢尾花数据集进行分类 #### 加载所需库与准备数据 为了使用决策树算法处理鸢尾花数据集,需先导入必要的Python库并加载数据。通常会用到`pandas`用于数据分析,以及`sklearn.datasets`来获取内置的数据集。 ```python import pandas as pd from sklearn import datasets iris = datasets.load_iris() X = iris.data # 特征变量 y = iris.target # 目标标签 ``` #### 数据划分训练集和测试集 为了让模型能够评估自身的性能,在构建之前应该把原始数据划分为两个部分——一部分用来训练模型,另一部分则保留下来作为独立样本检验模型的效果。这里可以借助于`train_test_split()`函数完成这一步骤[^1]。 ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` #### 创建并训练决策树模型 有了分割好的数据之后就可以着手建立决策树模型了。通过调用`DecisionTreeClassifier`类实例化一个新的分类器对象,并传入合适的参数配置该模型的行为模式;接着再利用`.fit()`方法让其基于给定的输入输出配对关系自我调整内部权重直至找到最优解路径。 ```python from sklearn.tree import DecisionTreeClassifier clf = DecisionTreeClassifier(criterion='entropy', max_depth=None, random_state=42) clf.fit(X_train, y_train) ``` #### 测试模型准确性 当完成了上述准备工作以后便可通过计算预测结果同实际类别之间的吻合程度来衡量所建模的好坏优劣之处。一般情况下我们会采用准确率这一指标来进行量化表示,即正确识别出来的数量占总样本数的比例大小多少。 ```python accuracy = clf.score(X_test, y_test) print(f'Accuracy: {accuracy:.2f}') ``` #### 可视化决策树结构 最后还可以进一步探索生成后的决策逻辑具体是怎么样的形式呈现出来。借助图形化的手段有助于直观感受整个推理过程中的分支走向及其对应的条件判断标准等细节信息。此时可运用`plot_tree()`或者第三方工具如Graphviz来做更美观清晰地展示[^4]。 ```python from matplotlib import pyplot as plt from sklearn import tree plt.figure(figsize=(12,8)) tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names.tolist()) plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值