网站备案 查询,移动app网站模板,含山县查询建设工程的网站,技术开发包括软件开发吗机器学习——决策树学习一、什么是决策树二、决策树的学习过程特征选择#xff1a;决策树生成#xff1a;剪枝#xff1a;三、决策树的一个具体的实例导入数据python strip() 函数和 split() 函数的详解及实例数据处理提取到训练集中的标签给数据的每一列添加上标签#xf…
机器学习——决策树学习一、什么是决策树二、决策树的学习过程特征选择决策树生成剪枝三、决策树的一个具体的实例导入数据python strip() 函数和 split() 函数的详解及实例数据处理提取到训练集中的标签给数据的每一列添加上标签并且转化为字典来存储每一列需要将数据转化为使用数值来代表的数据(字符串)——序列化调用库函数绘制决策树进行预测决策树在机器学习中决策树是一个预测模型它代表的是对象属性和对象值之间的一种映射关系 决策树的构建步骤 1特征的选择 2决策树的生成 3决策树的修剪
参考文档决策树算法内容讲解
一、什么是决策树
所谓决策树就是一个类似于流程图的树形结构树内部的每一个节点代表的是对一个特征的测试树的分支代表该特征的每一个测试结果而树的每一个叶子节点代表一个类别。树的最高层是就是根节点。下图即为一个决策树的示意描述内部节点用矩形表示叶子节点用椭圆表示。 二、决策树的学习过程
一棵决策树的生成过程主要分为以下3个部分:
特征选择
特征选择是指从训练数据中众多的特征中选择一个特征作为当前节点的分裂标准如何选择特征有着很多不同量化评估标准标准从而衍生出不同的决策树算法。
特征的选择 方法一信息增益 方法二信息熵 方法三基尼指数
决策树生成
根据选择的特征评估标准从上至下递归地生成子节点直到数据集不可分则停止决策树停止生长。 树结构来说递归结构是最容易理解的方式。 2. 决策树的生成(树的构建是个递归的过程)
剪枝
决策树容易过拟合一般来需要剪枝缩小树结构规模、缓解过拟合。剪枝技术有预剪枝和后剪枝两种。 3. 决策树的修剪 方法一预剪枝及时停止树增长 方法二后剪枝
三、决策树的一个具体的实例
所用到的资料(完整的代码和处理文件) 链接https://pan.baidu.com/s/1fIAUdCDTpR7TiqLHZtx1yg 提取码0929
导入数据
python strip() 函数和 split() 函数的详解及实例
一直以来都分不清楚strip和split的功能实际上strip是删除的意思而split则是分割的意思。因此也表示了这两个功能是完全不一样的strip可以删除字符串的某些字符而split则是根据规定的字符将字符串进行分割。 split()函数 split()拆分字符串。通过指定分隔符对字符串进行切片并返回分割后的字符串列表list
#导入数据with open(lenses.txt, r) as fr: #加载文件lenses [inst.strip().split(\t) for inst in fr.readlines()] #处理文件print(输出读取到的数据)print(lenses) inst[]data[]with open(lenses.txt, r) as fr:for inst in fr.readlines():#一行一行的读取print(inst.strip().split(\t))data.append(inst.strip().split(\t))print(输出读取到的全部数据)print(data)数据处理
在使用回归模型和机器学习模型时所有考察数据都是数值更容易得到更好的结果。因为都是基于数学函数方法的所以当数据集中出现类别数据时此时数据是不理想的不能用数学方法处理它们。例如处理性别属性时将男和女两个性别数据用0和1进行代替。
提取到训练集中的标签
data_target[]for each in data:data_target.append(each[-1])#因为在原有数据集中在最后一列print(输出提取到训练集中的标签)print(data_target)给数据的每一列添加上标签并且转化为字典来存储每一列 dataLabels [age, prescript, astigmatic, tearRate] # 特征标签data_list[]#临时存储全部数据data_dict{} #保存data数据的字典用于生成pandasfor each_label in dataLabels:for each_data in data:data_list.append(each_data[dataLabels.index(each_label)])print(输出每一列的数据)print(data_list)data_dict[each_label]data_listdata_list[]print(打印字典信息:)print(data_dict )需要将数据转化为使用数值来代表的数据(字符串)——序列化 在使用回归模型和机器学习模型时所有考察数据都是数值更容易得到更好的结果。因为都是基于数学函数方法的所以当数据集中出现类别数据时此时数据是不理想的不能用数学方法处理它们。例如处理性别属性时将男和女两个性别数据用0和1进行代替。
使用LabelEncoder()将object类型转化为数值
data_pdpd.DataFrame(data_dict)print(转化为pd.DataFrame类型方便序列化)print(data_pd)leLabelEncoder()for col in data_pd.columns:data_pd[col]le.fit_transform(data_pd[col])print(序列化处理)print(data_pd)#数据处理阶段lenses_target [] #提取每组数据的类别保存在列表里for each in lenses:lenses_target.append(each[-1]) #从最后一列提取标签print(提取每组数据的类别标签保存在列表里:)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_list#print(lenses_dict)lenses_list []print(打印字典信息:)print(lenses_dict) #打印字典信息lenses_pd pd.DataFrame(lenses_dict) #生成pandas.DataFrameprint(打印pandas.DataFrame:)print(lenses_pd) #打印pandas.DataFrameprint(数据序列化)le LabelEncoder() #创建LabelEncoder()对象用于序列化for col in lenses_pd.columns: #序列化lenses_pd[col] le.fit_transform(lenses_pd[col])print(打印编码信息)print(lenses_pd)调用库函数 #调用库函数clf tree.DecisionTreeClassifier(max_depth 4) #最多一共四层 #创建DecisionTreeClassifier()类clf clf.fit(lenses_pd.values.tolist(), lenses_target) #使用数据构建决策树绘制决策树 # 绘制决策树dot_data StringIO()tree.export_graphviz(clf, out_filedot_data,feature_nameslenses_pd.keys(),class_namesclf.classes_,filledTrue, roundedTrue,special_charactersTrue)graph pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_jpg(decision_tree预测决策树.jpg)进行预测 #进行预测print(预测:[[presbyopic,myope,yes,normal],[presbyopic,hyper,yes,normal]])print(clf.predict([[1, 1, 1, 0], [1, 0, 1, 0]]))