头歌 机器学习 第1关:sklearn中的决策树
任务描述 本关任务:使用sklearn完成鸢尾花分类任务 相关知识 为了完成本关任务,你需要掌握如何使用 sklearn 提供的 DecisionTreeClassifier 数据简介 鸢尾花数据集是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于( Setosa , Versicolour , Virginica )三个种类中的哪一类。 sklearn中已经提供了鸢尾花数据集的相关接口,想要使用该数据集可以使用如下代码: 1. from sklearn import datasets 2. 3. #加载鸢尾花数据集 4. iris = datasets.load_iris() 5. 6. #X表示特征,y表示标签 7. X = iris.data 8. y = iris.target 数据集中部分数据与标签如下图所示:
DecisionTreeClassifier DecisionTreeClassifier 的构造函数中有两个常用的参数可以设置: • criterion :划分节点时用到的指标。有 gini (基尼系数), entropy (信息增益)。若不设置,默认为 gini • max_depth :决策树的最大深度,如果发现模型已经出现过拟合,可以尝试将该参数调小。若不设置,默认为 None PS:关于基尼系数
分类问题中,假设有n个类别,则其基尼指数 Gini 定义如下,其中 表示样本属于第i个类别的概率: 假设现在有一枚两面都是字的硬币,很明显不管怎么扔硬币都是字朝上,所以根据基尼系数的公式计算后结果为 0 。如果现在有一枚正常的硬币,那在扔硬币时字朝上和花朝上的概率都是 0.5 。所以根据基尼系数的公式计算后结果为 0.5 。可以看出事件越确定基尼系数越低,越模棱两可基尼系数就越高。所以基尼系数与信息熵类似,不确定性越高,基尼系数越高。 和sklearn中其他分类器一样, DecisionTreeClassifier 类中的 fit 函数用于训练模型, fit 函数有两个向量输入: • X :大小为 [样本数量,特征数量] 的 ndarray ,存放训练样本 • Y :值为整型,大小为 [样本数量] 的 ndarray ,存放训练样本的分类标签 DecisionTreeClassifier 类中的 predict 函数用于预测,返回预测标签, predict 函数有一个向量输入: • X :大小为 [样本数量,特征数量] 的 ndarray ,存放预测样本 DecisionTreeClassifier 的使用代码如下: 1. clf = tree.DecisionTreeClassifier() 2. clf.fit(X_train, Y_train) 3. result = clf.predict(X_test) 编程要求 填写 iris_predict(train_sample, train_label, test_sample) 函数完成鸢尾花分类任务,其中: • train_sample :训练样本 • train_label :训练标签 • test_sample :测试样本 测试说明 只需返回预测结果即可,程序内部会检测您的代码,预测正确率高于 95% 视为过关。 开始你的任务吧,祝你成功!
from sklearn.tree import DecisionTreeClassifier
def iris_predict(train_sample, train_label, test_sample):
'''
实现功能:1.训练模型 2.预测
:param train_sample: 包含多条训练样本的样本集,类型为ndarray
:param train_label: 包含多条训练样本标签的标签集,类型为ndarray
:param test_sample: 包含多条测试样本的测试集,类型为ndarry
:return: test_sample对应的预测标签
'''
# ************* Begin ************#
# 1. 初始化决策树分类器:用信息增益划分,固定随机种子,限制树深度防过拟合
clf = DecisionTreeClassifier(
criterion='entropy',
max_depth=3,
random_state=0
)
# 2. 训练模型
clf.fit(train_sample, train_label)
# 3. 预测并返回结果
return clf.predict(test_sample)
# ************* End **************#
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)