任务描述相关知识 如何处理隐形眼镜数据集编程要求测试说明
任务描述
本关任务:编写一个例子讲解决策树如何预测患者需要佩戴的隐形眼镜类型。使用小数据集,我们就可以利用决策树学到很多知识:眼科医生是如何判断患者需要佩戴的镜片类型,一旦理解了决策树的工作原理,我们甚至也可以帮助人们判断需要佩戴的镜片类型。
相关知识
为了完成本关任务,你需要掌握:1.如何处理隐形眼镜数据集,2.如何使用决策树来进行预测
如何处理隐形眼镜数据集
隐形眼镜数据集包含很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型。隐形眼镜类型包括硬材质、软材质以及不适合佩戴隐形眼镜。数据来源于UCI数据库,为了更容易显示数据,我么对数据做了简单的更改。
import pandas as pdif __name__ == '__main__':with open('lenses.txt', 'r') as fr: #加载文件lenses = [inst.strip().split('\t') for inst in fr.readlines()]#处理文件lenses_target = [] #提取每组数据的类别,保存在列表里for each in lenses:lenses_target.append(each[-1])lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate'] #特征标签lenses_list = [] #保存lenses数据的临时列表lenses_dict = {} #保存lenses数据的字典,用于生成pandasfor each_label in lensesLabels: #提取信息,生成字典for each in lenses:lenses_list.append(each[lensesLabels.index(each_label)])lenses_dict[each_label] = lenses_listlenses_list = []print(lenses_dict) #打印字典信息lenses_pd = pd.DataFrame(lenses_dict) #生成pandas.DataFrameprint(lenses_pd)
我们讲原始的数据信息进行处理,将原始数据处理成有序的数据。
编程要求
根据提示,在右侧编辑器补充代码,添加使用决策树预测的代码
测试说明
平台会对你编写的代码进行测试:
开始你的任务吧,祝你成功!
首先来讲如何创建LabelEncoder()对象,用于序列化:
labelcoder作用是为了将n个类别编码为0~n-1之间的整数(包含0和n-1)。
下面举个简单的例子参考来源(2条消息) python:sklearn 标签编码(LabelEncoder)_weixin_39450145的博客-CSDN博客_python标签编码/weixin_39450145/article/details/114156682
data=['小猫','小猫','小狗','小狗','兔子','兔子'] #准备好数据#方法1:enc=preprocessing.LabelEncoder() #获取一个LabelEncoderenc=enc.fit(['小猫','小狗','兔子']) #训练LabelEncoderdata=enc.transform(data) #使用训练好的LabelEncoder对原数据进行编码#方法2:#enc=preprocessing.LabelEncoder() #获取一个LabelEncoder#data=enc.fit_transform(data)
这里的输出结果[2 2 1 1 0 0]
根据结果可以看到,LabelEncoder将:小猫编码成2,小狗编码成2,兔子编码成0
扩展:这是是把文本标签转化为int数值类型,如果想要转化回来,用方法inverse_transform
2.创建DecisionTreeClassifier()类
下面列举了几个DecisionTreeClassifier()类中参数的具体含义,可参考(2条消息) 决策树调参说明(DecisionTreeClassifier)_碧空之戈的博客-CSDN博客_decisiontreeclassifier调参/qq_38923076/article/details/82931340
#!/usr/bin/env python# -*- coding: utf-8 -*-import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.preprocessing import LabelEncoder, OneHotEncoderfrom sklearn.externals.six import StringIOfrom sklearn import treeif __name__ == '__main__':with open('./src/step3/lenses.txt', 'r') as fr: #加载文件lenses = [inst.strip().split('\t') for inst in fr.readlines()]#处理文件lenses_target = [] #提取每组数据的类别,保存在列表里for each in lenses:lenses_target.append(each[-1])print(lenses_target)lensesLabels = ['age', 'prescript', 'astigmatic', 'tearRate']#特征标签lenses_list = []#保存lenses数据的临时列表lenses_dict = {}#保存lenses数据的字典,用于生成pandasfor each_label in lensesLabels:#提取信息,生成字典for each in lenses:lenses_list.append(each[lensesLabels.index(each_label)])lenses_dict[each_label] = lenses_listlenses_list = []#print(lenses_dict)#打印字典信息# print(lenses_dict)#打印字典信息###########lenses_pd=pd.DataFrame(lenses_dict,columns= lensesLabels)#生成pandas.DataFrameprint(lenses_pd) #打印pandas.DataFramele=LabelEncoder()#创建LabelEncoder()对象,用于序列化(labelcoder的结果是随机的吗?)for i in lenses_pd.columns: #为每一列序列化lenses_pd[i] = le.fit_transform(lenses_pd[i])#序列化(对每一列进行序列化)print(lenses_pd) #打印编码信息DTC = tree.DecisionTreeClassifier(max_depth = 4)#(限制了深度,防止过拟合)创建DecisionTreeClassifier()类DTC= DTC.fit(lenses_pd.values.tolist(), lenses_target)#(转化为列表值)使用数据,构建决策树##########################