最近,我计划系统地学习机器学习的基本算法,以免变得优劣。我决定实施所有常用的基本机器学习算法,以加深我的印象。本文是该系列博客中的第一篇,有关决策树(Decision Tree,Decision Tree)的算法实现。在本文中,我将总结决策树种类所涉及的算法,并附上我自己的相关实现代码。相应模型的所有算法代码和训练数据将放置在GitHub上。在本文中,我将通过MLiA隐形眼镜处方集逐步构建决策树,并使用Graphviz可视化决策树。决策树学习决策树学习是基于数据属性在树结构中建立的决策模型。该模型可用于解决分类和回归问题。常见的算法包括CART,ID3,C4.5等。我们经常基于数据集构建决策树。他的重要任务之一是为数据中包含的知识信息提取一系列规则。这些规则是创建树结构的过程和机器学习的过程。决策树的结构以以下用于计算机预测的简单决策树为例。树中的内部节点代表某个属性,从节点派生的分支代表该属性的所有可能值,叶节点代表最终判断。结果就是类型。借助诸如Graphviz,matplotlib的注释等可视化工具,我们创建的决策树模型可以被可视化并被人们直接理解。这是贝叶斯神经网络之类的算法所没有的功能。决策树算法决策树算法主要是指在决策树创建过程中拆分树(划分数据集)时选择最佳特征的算法。其主要目的是选择一种功能,以使分离的数据集尽可能规则。那应该是尽可能纯净的。最大的原则是:使无序数据更加有序。以下是三种常用方法:1.信息增益2.增益比3.基尼杂质信息增益这涉及信息论中的一些概念:事件的信息量,信息熵,信息增益等,有关事件的信息从关于知乎的某个事件的答案的信息量中可以看到一种流行的解释:在该事件上,该事件的概率的负对数信息熵是从事件发生中获得的平均信息量,即信息量的期望值。序列可以获取序列的信息熵,即对序列进行分类后计算每种类型的概率,然后使用Python使用上面的公式计算得出以下信息:def get_shanno_entropy(self,values): '''根据给定列表中的值计算Shanno熵''' uniq_vals = set(values)val_nums = {key:values.count(key)for key in uniq_vals}概率= [v,val_nums.items()中的k的v / len(值)]熵= sum([[probs中的概率的prob * log2(prob)])返回熵信息增益我们划分一组数据集之后,数据的信息熵将发生变化。我们可以使用信息熵计算公式来计算划分后的子数据集的信息熵,并计算其平均值(期望值)作为划分后的数据集的信息熵。与未分割数据的信息熵相比,新信息熵的减少就是信息增益。在这里,我一开始就弄错了,所以我编写的代码无法创建正确的决策树。假设我们将数据集D划分为kk个部分D1,D2,& hellip;,Dk,则划分后的信息熵为:信息增益是两个信息熵之间的差。在这里,我主要使用信息增益进行属性选择。具体的实现代码如下:def choice_best_split_feature(self,dataset,classes):'''根据信息增益确定划分数据的最佳特征:参数数据集:要划分的数据集:参数类别:与数据集相对应的类型:返回:划分后的数据中增益最大的属性索引& #39;'' base_entropy = self.get_shanno_entropy(classes)feat_num = len(dataset [0])entropy_gains = [] for i in range(feat_num):splited_dict = self.split_dataset(dataset,类,i)new_entropy = sum([len(sub_classes)/ len(classes)* self.get_shanno_entropy(sub_classes)for splitd_dict.items()中的_,(_,sub_classes)])entropy_gains.append(base_entropy-new_e