机器学习——sklearn实现决策树(隐形眼镜预测和鸢尾花分类)

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

一、准备数据集

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

二、环境的准备

  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
    下载地址:https://www.graphviz.org/download/
    安装过程,按照安装向导的指示进行。如果按照过程,没有选择自动添加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),数是向上取整的。如果样本量数量级非常大,则增大这个值。
    更多参数的详细信息内容参考下面链接:
    https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

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

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

  1. 读取数据集
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    #from sklearn.externals.six import StringIO
    from six import StringIO
    from sklearn import tree
    import pandas as pd
    import numpy as np
    import pydotplus
    if __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_split
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    #from sklearn.externals.six import StringIO
    from six import StringIO
    from sklearn import tree
    import pandas as pd
    import numpy as np
    import pydotplus
    from 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. 给相应的数据进行预测

参考资料

  1. 机器学习实战教程(三):决策树实战篇之为自己配个隐形眼镜
  2. https://scikit-learn.org/stable/modules/tree.html#tree
  3. https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
  • 1
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值