前言
数据集及完整代码:https://download.youkuaiyun.com/download/qq_49101550/20464229
一、对数据集进行训练集和测试集划分
从数据集中无放回地随机抽选80%的样本作为训练集,剩下的20%划分为测试集。将训练集和测试集分别存放到train_data.csv和test_data.csv文件中。
二、ID3算法实现
1.实现ID3决策树算法的首要工作是数据的特征选择,需要在特征集合中挑选出能最大化减小数据样本集不确定程度的特征,将之作为节点。而不确定程度可以用信息增益来表示。根据熵和条件熵的概念,可以得知熵与条件熵的差就是样本集不确定程度的减少量,即信息增益。
这里创建entropy()函数来计算熵:
创建计算条件熵的函数entropy_S_A(),核心代码如下:
创建函数get_root()计算信息增益,并挑选出信息增益最大的特征在特征列表中的下标big_index:
2.creat_tree()函数递归构建决策树,返回树模型myTree。
要先考虑到训练出来的模型应该以什么样的形式来表示,这里使用字典来表示生成的决策树模型。如图:
从特征列表中取出信息增益最大的特征作为节点,将剩余的特征存放到copy_list列表里(作为递归时构建当前节点的另一边树枝时特征列表)。如图:
筛选出训练集中节点特征的为某一特征值的所有样本。如图:
如果筛选后样本数为空,则返回上个分支条件下数据集中占比最大的分类标签。如图:
为了防止模型的过拟合可以设置预先剪枝。如图:
如果特征列表为空,则返回占比最大的分类标签。如图:
如果筛选后所有样本的分类标签是唯一值,则返回该值。如图:
如果筛选后样本的分类标签不唯一,则递归建树。如图:
3.对测试集进行分类预测,计算分类准确率。
构建测试函数test()。如图:
对测试集中的样本进行逐个预测。如图:
计算准确率。如图:
三、随机森林
随机森林是是由多棵相对独立的决策树构成的。在进行分类时,要保证每一棵树都尽可能完整地生长(不剪枝),每棵树都产生一个分类结果,最终的分类结果是由每棵决策树投票产生的(哪一个分类结果占比最大)。
1.训练集的选取
将一个样本容量为N的样本,有放回的抽取N次,每次抽取1个,最终形成N个样本,此样本作为随机森林中一棵树的训练集。如图:
当每个样本有M个属性时,随机从这M个属性中选取出 个属性作为随机森林每棵决策树的属性列表,如图:
生成森林,如图:
投票选择最终的分类标签,如图:
代码及数据集:https://download.youkuaiyun.com/download/qq_49101550/20464229
python实现朴素贝叶斯:
https://download.youkuaiyun.com/download/qq_49101550/20464382
python实现KNN:
https://download.youkuaiyun.com/download/qq_49101550/20464377
python实现PageRank:
https://download.youkuaiyun.com/download/qq_49101550/20464361
python实现KMeans:
https://download.youkuaiyun.com/download/qq_49101550/20464286