wap网站价格,安徽省建设厅网站怎么进不去,wordpress 插件有后门,wordpress 搜索记录前言
课上的实验
由于不想被抄袭#xff0c;所以暂时不放完整代码
Adult数据集可以在Azure官网上找到
Azure 开放数据集中的数据集 - Azure Open Datasets | Microsoft Learn
数据集预处理
删除难以处理的权重属性fnlwgt与意义重复属性educationNum去除重复行与空行删除…前言
课上的实验
由于不想被抄袭所以暂时不放完整代码
Adult数据集可以在Azure官网上找到
Azure 开放数据集中的数据集 - Azure Open Datasets | Microsoft Learn
数据集预处理
删除难以处理的权重属性fnlwgt与意义重复属性educationNum去除重复行与空行删除包含异常值的数据
处理连续值属性
年龄数据分箱使得各个年龄段中高收入人群占比的差异尽量大资本收益数据分箱资本支出数据分箱某周工作时长数据分箱
处理离散值属性
workclass工作部门可以把相同的工作部门归为一类避免决策树分叉过多education学历可以把学历相近的分为一块以减少决策树分叉maritalStatus婚姻状况将离异、丧偶、分居等归为一类未婚归为一类已婚与配偶暂时不在归为一类再婚归为一类分四类。occupation职业由于不同职业的薪水状况不同所以只能每个职业都单独作为一类relationship家庭关系每种单独分为一类race种族每种单独归类sex性别分两类nativeCountry国籍由于美国人居多所以分为美国与其他国家两类income收入这是我们需要预测的结果分为 50K 和 50K由于测试集中的标签多了一个‘.’所以需要单独处理一下
C4.5决策树
其实决策树并没什么太难的地方主要是使用的pythonpandas库在划分数据集时如果使用单行遍历会很慢此时需要找到符合功能需求的批处理函数
决策树主要分为以下几个模块
1、计算信息熵D表示数据集|D|表示数据集大小Di表示分类结果为i的数据集
信息熵 条件信息熵按照属性A划分之后的信息熵加权平均数D(j)表示属性A为j的数据集 2、获取数据集中的众数。作为叶节点的信息
3、将数据集按照某个关键字划分。这里很坑如果单行遍历划分回巨慢无比但是pandas有专门的批处理函数groupby用于划分划分时间直接从30s优化到0.0s但是如果当前值不存在会发生报错所以要单独加入一个占位的DataFrame 4、决策树划分策略
按照C4.5决策树的划分规则需要计算信息增益比
信息增益 信息增益比 所以在寻找最优划分策略的时候需要枚举每一个未划分的属性计算划分后的数据集的信息增益比选择信息增益比最高的属性进行划分即可 5、决策树构建
由于决策树很容易过拟合所以这里使用了两种剪枝方法首先设置节点纯度阈值当递归时节点纯度高于阈值时可以直接选用当前数据集的众数作为节点值停止递归。然后设置深度阈值当超过该深度时就取当前数据集的众数作为节点值停止递归。 构建过程
由于是进行的递归构建相当于在对最优决策树做一个先根遍历首先对于当前节点在决策树存储矩阵上添加一行存储当前节点的决策信息然后将每个儿子返回的矩阵依次append到这个矩阵下方利用当前的矩阵行数计算儿子行标相对于当前节点行标的增量。完成构建之后为了后续方便查询对每个节点的用当前的行数加上儿子节点的增量就可以算出儿子节点对应的行数。 6、决策树分类过程
对于每个数据组从决策树根节点开始选择决策树节点划分的属性将当前节点id跳转到数据该属性对应值的儿子节点即可直到跳转到叶子节点停止 运行结果
训练集分类结果准确率0.833 测试集分类结果准确率0.836 效果还是不错堪比神经网络
反思总结
这次实验花费了很长时间在数据集的分析和处理上
包括年龄和资本收支的分箱、离散值归并并且发现了测试集数据中income标签与训练集不同的问题。
决策树构建过程中花费了许多时间去查询pandas的批处理函数如果之前有pandas库调用的基础会好很多。
决策树存储结构选用numpy是不太合适的因为每一个节点的结构儿子个数是不定的如果按照最多分支数来设置矩阵的列数会有很多空间是浪费的。使用listdict保存每个节点的数据用json文件存储读取应该会方便一些。