机器学习——sklearn实现决策树(隐形眼镜预测和鸢尾花分类)
发布日期:2021-06-22 22:48:23 浏览次数:3 分类:技术文章

本文共 5112 字,大约阅读时间需要 17 分钟。

文章目录

sklearn中利用决策树实现隐形眼镜类型的预测

一、准备数据集

  1. 数据集的介绍
    隐形眼镜数据集是非常著名的数据集,它包含很多眼部状态的观察条件以及医生推荐的隐形眼镜类型。隐形眼镜类型包括硬材质(hard)、软材质(soft)以及不适合佩戴隐形眼镜(no lenses)。整个数据集一共有24组数据,数据的Labels依次是age、prescript、astigmatic、tearRate、class,也就是第一列是年龄,第二列是症状,第三列是是否散光,第四列是眼泪数量,第五列是最终的分类标签。
    在这里插入图片描述
  2. 数据集的下载
    下载地址:

二、环境的准备

  1. 安装sklearn
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sklearn
  2. 安装pydotplus
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pydotplus
  3. 安装Graphviz
    下载地址:
    安装过程,按照安装向导的指示进行。如果按照过程,没有选择自动添加PATH,需要自行手动添加环境变量。
    添加环境变量过程:
    选择我的电脑->属性->高级->环境变量。在系统变量的Path变量中,添加Graphviz的环境变量,若Graphviz安装在了D盘的根目录,则添加:D:\Graphviz\bin

三、DecisionTreeClassifier构建决策树的部分参数说明

  1. criterion
    特征选择标准,可选参数,默认是gini,可以设置为entropy。gini是基尼系数,使用该参数的时候,是采用的CART算法实现决策树的。entropy是信息增益,也就是采用的ID3算法实现决策树的。
  2. splitter
    特征划分点选择标准,可选参数,默认是best,可以设置为random。best参数是根据算法选择最佳的切分特征,random随机的在部分划分点中找局部最优的划分点。“best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐使用"random”。
  3. max_depth
    决策树最大深度,可选参数,默认是None。当模型样本很多的时候,可以取值10-100。
  4. min_samples_split
    内部节点再划分所需最小样本数,可选参数,默认是2。当min_samples_split为整数,min_samples_split作为划分的最小样本数,若样本已经少于min_samples_split个样本,则停止继续划分。当min_samples_split为浮点数,那么min_samples_split就是一个百分比,ceil(min_samples_split * n_samples),数是向上取整的。如果样本量数量级非常大,则增大这个值。
  5. min_samples_leaf
    叶子节点最少样本数,可选参数,默认是1。如果min_samples_leaf是整数,那么min_samples_leaf作为最小的样本数。如果是浮点数,那么min_samples_leaf就是一个百分比,celi(min_samples_leaf * n_samples),数是向上取整的。如果样本量数量级非常大,则增大这个值。
    更多参数的详细信息内容参考下面链接:

    说明:一般都使用决策树默认的参数设置,若自行设置参数的值,根据实际情况进行设定。

四、利用决策树实现隐形眼镜类型的预测

  1. 读取数据集
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder#from sklearn.externals.six import StringIOfrom six import StringIOfrom sklearn import treeimport pandas as pdimport numpy as npimport pydotplusif __name__ == '__main__':	fr = open('lenses.txt')	lenses = [inst.strip().split('\t') for inst in fr.readlines()]	print(lenses)
    得到的是string在这里插入图片描述
  2. string类型的数据序列化
    lenses_target = []                                                        #提取每组数据的类别,保存在列表里    for each in lenses:        lenses_target.append(each[-1])     lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']            #特征标签           lenses_list = []                                                        #保存lenses数据的临时列表    lenses_dict = {
    } #保存lenses数据的字典,用于生成pandas for each_label in lensesLabels: #提取信息,生成字典 for each in lenses: lenses_list.append(each[lensesLabels.index(each_label)]) lenses_dict[each_label] = lenses_list lenses_list = [] print(lenses_dict) #打印字典信息 lenses_pd = pd.DataFrame(lenses_dict) #生成pandas.DataFrame print(lenses_pd) le = LabelEncoder() #创建LabelEncoder()对象,用于序列化 for col in lenses_pd.columns: #序列化 lenses_pd[col] = le.fit_transform(lenses_pd[col])
    在这里插入图片描述
    序列化
    在这里插入图片描述
  3. 构建决策树
    clf = tree.DecisionTreeClassifier(max_depth = 4)                        #创建DecisionTreeClassifier()类    clf = clf.fit(lenses_pd.values.tolist(), lenses_target)                    #使用数据,构建决策树
  4. 决策树的可视化
    dot_data = StringIO()    tree.export_graphviz(clf, out_file = dot_data,                            #绘制决策树                        feature_names = lenses_pd.keys(),                        class_names = clf.classes_,                        filled=True, rounded=True,                        special_characters=True)    graph = pydotplus.graph_from_dot_data(dot_data.getvalue())    graph.write_pdf("tree.pdf")
    在这里插入图片描述
  5. 预测
    可以根据自己的眼睛情况和年龄等特征,看一看自己适合何种材质的隐形眼镜
    print(clf.predict([[1,1,1,0]]))
    在这里插入图片描述

sklearn中利用决策树实现鸢尾花分类

一、数据集

  1. 数据集获取
    #导入相应的包from sklearn import datasets #导入方法类from sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder#from sklearn.externals.six import StringIOfrom six import StringIOfrom sklearn import treeimport pandas as pdimport numpy as npimport pydotplusfrom sklearn.metrics import accuracy_score# 获取所需数据集iris=datasets.load_iris()#每行的数据,一共四列,每一列映射为feature_names中对应的值X=iris.data#每行数据对应的分类结果值(也就是每行数据的label值),取值为[0,1,2]Y=iris.target#通过Y=iris.target.size,可以得到一共150行数据,三个类别个50条数据,并且数据是按照0,1,2的顺序放的#print(iris)
    在这里插入图片描述
  2. 数据集划分
    #划分训练集和测试集,按照7:3的比例划分X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=42)print(X_train.shape)print(X_test.shape)
    在这里插入图片描述

二、利用决策树实现鸢尾花分类

  1. 构建决策树
    clf = tree.DecisionTreeClassifier()lenses = clf.fit(X_train, Y_train)
  2. 决策树可视化
    dot_data = StringIO()tree.export_graphviz(clf, out_file = dot_data,                            #绘制决策树                        feature_names = iris.feature_names,                        class_names = iris.target_names,                        filled=True, rounded=True,                          special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("treeiris.pdf")
    在这里插入图片描述
  3. 预测准确率
    predict_results = clf.predict(X_test) # 使用模型对测试集进行预测print(accuracy_score(predict_results, Y_test))
    在这里插入图片描述

总结

sklearn实现决策树的过程

  1. 对数据集进行处理
  2. 使用tree.DecisionTreeClassifier()进行构建
  3. 使用clf.fit(X_train, Y_train)进行训练
  4. 将构建的决策树可视化
  5. 给相应的数据进行预测

参考资料

转载地址:https://blog.csdn.net/qq_43279579/article/details/116853918 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:AtCoder Beginner Contest 175 D.Moving Piece
下一篇:牛客挑战赛42 A.小睿睿的数列

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月16日 22时04分04秒