任务描述
本关任务:编写一个例子讲解决策树如何预测患者需要佩戴的隐形眼镜类型。使用小数据集,我们就可以利用决策树学到很多知识:眼科医生是如何判断患者需要佩戴的镜片类型,一旦理解了决策树的工作原理,我们甚至也可以帮助人们判断需要佩戴的镜片类型。
相关知识
为了完成本关任务,你需要掌握:1.如何处理隐形眼镜数据集,2.如何使用决策树来进行预测
如何处理隐形眼镜数据集
隐形眼镜数据集包含很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型。隐形眼镜类型包括硬材质、软材质以及不适合佩戴隐形眼镜。数据来源于UCI数据库,为了更容易显示数据,我么对数据做了简单的更改。
import pandas as pd
if __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数据的字典,用于生成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)
我们讲原始的数据信息进行处理,将原始数据处理成有序的数据。
编程要求
根据提示,在右侧编辑器补充代码,添加使用决策树预测的代码
测试说明
平台会对你编写的代码进行测试:
开始你的任务吧,祝你成功!
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from io import StringIO
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn import tree
if __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数据的字典,用于生成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) #打印字典信息
# print(lenses_dict) #打印字典信息
###########
# 请在此处添加你的代码
data = pd.DataFrame(lenses_dict) #生成pandas.DataFrame
print(data)
#打印pandas.DataFrame
le = LabelEncoder() #创建LabelEncoder()对象,用于序列化
data['age'] = data['age'].map({'young': 2, 'presbyopic': 1, 'pre': 0}) #序列化
data['prescript'] = data['prescript'].map({'myope': 1, 'hyper': 0})
data['astigmatic'] = data['astigmatic'].map({'no': 0, 'yes': 1})
data['tearRate'] = data['tearRate'].map({'reduced': 1, 'normal': 0})
print(data)
#############