机器学习之决策树学习-ID3算法-原理分析与C语言代码实现
- 格式:pdf
- 大小:610.65 KB
- 文档页数:24


C语言机器学习算法实现决策树和神经网络在机器学习领域中,决策树和神经网络是两个广泛应用的算法。
本文将介绍如何使用C语言实现这两个算法,并讨论它们在决策问题和模式识别中的应用。
一、决策树算法的实现决策树是一种常用的分类算法,它通过树状结构来表示分类的决策过程。
在C语言中,可以使用结构来表示决策树的节点,并使用递归来构建整个树。
1. 数据结构定义首先,我们需要定义一个结构来表示决策树的节点,包含以下几个成员变量:- 分割特征:表示当前节点的特征- 分割阈值:表示当前节点的特征值划分的阈值- 左子树:表示当前节点的左子树- 右子树:表示当前节点的右子树- 叶子节点标签:表示当前节点为叶子节点时的分类标签typedef struct DecisionTreeNode {int feature;float threshold;struct DecisionTreeNode* left;struct DecisionTreeNode* right;int label;} DecisionTreeNode;2. 构建决策树使用递归的方法构建决策树,可以分为以下几个步骤:- 选择最优特征:根据某种特征选择准则,选择最能降低不纯度的特征作为当前节点的分割特征- 按特征值划分数据:根据分割特征和阈值,将数据分为左子树和右子树两部分- 递归构建子树:对左子树和右子树分别进行递归构建,直到满足停止条件(如叶子节点标签纯度达到一定阈值)3. 决策过程构建好决策树后,我们可以使用它进行分类预测。
对于待预测的样本,从根节点开始依次比较当前节点的特征和阈值,根据比较结果选择左子树或右子树,直到到达叶子节点,叶子节点的标签即为预测结果。
二、神经网络算法的实现神经网络是一种模拟人脑神经元网络的算法,它通过多层神经元和连接权值来实现信息处理和模式识别。
在C语言中,可以使用数组和矩阵来表示神经网络的结构和权值,并通过矩阵乘法和激活函数来进行计算。
【机器学习笔记】ID3构建决策树 好多算法之类的,看理论描述,让⼈似懂⾮懂,代码⾛⼀⾛,现象就了然了。
引:from sklearn import treenames = ['size', 'scale', 'fruit', 'butt']labels = [1,1,1,1,1,0,0,0]p1 = [2,1,0,1]p2 = [1,1,0,1]p3 = [1,1,0,0]p4 = [1,1,0,0]n1 = [0,0,0,0]n2 = [1,0,0,0]n3 = [0,0,1,0]n4 = [1,1,0,0]data = [p1, p2, p3, p4, n1, n2, n3, n4]def pred(test):dtre = tree.DecisionTreeClassifier()dtre = dtre.fit(data, labels)print(dtre.predict([test]))with open('treeDemo.dot', 'w') as f:f = tree.export_graphviz(dtre, out_file = f, feature_names = names)pred([1,1,0,1]) 画出的树如下: 关于这个树是怎么来的,如果很粗暴地看列的数据浮动情况: 或者说是⽅差,⽅差最⼩该是第三列,fruit,然后是butt,scale(⽅差3.0),size(⽅差3.2857)。
再⼀看树节点的分叉情况,fruit,butt,size,scale,两相⽐较,好像发现了什么?衡量数据⽆序度: 划分数据集的⼤原则是:将⽆序的数据变得更加有序。
那么如何评价数据有序程度?⽐较直观地,可以直接看数据间的差距,差距越⼤,⽆序度越⾼。
但这显然还不够聪明。
组织⽆序数据的⼀种⽅法是使⽤信息论度量信息。
决策树算法⼩结(⼆)C4.5原理及代码实现上⼀节()讲到的ID3算法存在不⾜,⽤信息增益作为特征选择标准会偏向取值较多的特征,因为特征的取值越多(该特征数据分的更细)即纯度更⾼,不确定性(条件熵越⼩H(D|A))更低,由于H(D)是⼀定的,因此信息增益更⼤,所以偏向取值更多的特征。
使⽤信息增益⽐可以矫正这⼀问题,信息增益⽐就是特征选择的另⼀准则——C4.5。
1 C4.5原理信息增益⽐表达式:g R(D,A)=g(D,A) H A(D)其中D是训练数据集,A是样本特征,H A(D)是特征熵,表达式为:H A(D)=−n∑i=1|D i||D|log2|D i||D|n表⽰特征A的类别个数,D i表⽰样本⼦集,|D i| 表⽰D i样本⼦集的个数。
信息增益⽐本质是在信息增益的基础上乘⼀个惩罚参数。
特征个数较多时,惩罚参数较⼩;特征个数较少时,惩罚参数较⼤。
惩罚参数:数据集D以特征A作为随机变量的熵的倒数,即:将特征A取值相同的样本划分到同⼀个⼦集中。
C4.5算法对ID3算法进⾏了改进,⽤信息增益⽐来选择特征。
决策树C4.5算法输⼊: 训练数据集D,特征集A,阈值ε;输出: 决策树Tstep1 若D中所有实例属于同⼀类C k,则T为单结点树,并将类C k作为该结点的类标记,返回T;step2 若A=Φ,则T为单结点树,并将D中实例数最⼤的类C k作为该结点的类标记,返回T;step3 否则计算特征集A中各特征对D的信息增益⽐,选择信息增益最⼤的特征A g;step4 如果A g的信息增益⼩于阈值ε,则置T为单结点树,并将D中实例数最⼤的类C k作为该结点的类标记,返回T;step5 否则,对A g的每⼀个取值A gi将对应的样本输出D分成不同的类别D i,每个类别产⽣⼀个⼦节点,对应特征值是A gi,返回增加了结点的树;step6 对所有的⼦结点,以D i为训练集,以A−A g为特征集,递归调⽤(1)-(5),得到⼦树T i,返回T i.2 代码实现这⾥只给出信息增益⽐特征选择部分,其他代码与⼀致。