决策树使用全流程概述(sklearn)

1. 数据集准备与预处理

1.1 导入数据

首先我们导入sklearn库中内置数据库,并将参数as_frame设置为True。这样jupyter中输出的格式好看点。返回值为字典,我们可以查看一下数据

1.2 查看缺失值情况

紧接着我们要查看数据是否存在缺失值的情况,可以使用pandas中的info函数

用同样的方法查看target,发现同样没有缺失值

1.3 查看数据分布情况

使用pd.value_counts查看数据分布情况,以决定是否需要调整数据权重,或者采用过采样,欠采样等方法进行处理

数据分布均匀,无需调整

1.4 构造额外特征

原始数据的特征只有4个,过少。我们可以构建额外的特征来增加特征数量。在经过初步训练和评估后,我们再对特征进行筛选。

我们决定构造sepal_size=sepal_lengthsepal_width,petal_size=petal_lengthpetal_width两个额外的特征。当然,也有许多其他的特征构造方法,例如:数据分层等等。但是由于这并不是完整的项目,所以只额外构造两个特征进行演示。

随后进行查看,已经成功插入

1.5 数据划分

随后我们对数据进行划分,可以采取pandas中的iloc方法

先查看类型,发现target是series类,所以不提供iloc方法。但是我们可以直接使用字符串切片操作。

2. 训练模型与验证集预测

调用sklearn中的决策树模型,使用fit函数进行训练,使用score函数进行验证集评估。发现正确率为83%。实际上,如果没有构造额外的特征的话,正确率仅有73%,之前尝试过。

同时,我们也可以通过feature_importances_查看特征重要度评估,惊喜的发现我们构建的petal_size特征居然起到了决定性的作用!(实际上,在原始的四个特征中petal的两个特征重要度最大)

3. 模型优化

如何才能使准确率更进一步呢?

3.1 使用集成算法

可以使用决策树的进阶版:随机森林(当然还有很多其他的算法,由于sklearn良好的封装习惯,基本上只要换一下名字就可以切换算法了)

没想到的是,正确率反而下降了。。。不过可以看到集成算法可以对每一个特征都有所关照了。

这也许是好事,说明它考虑的更多。当然也可能是坏事:特征太杂,被污染了。

3.2 筛选特征

上面我们提出了一个猜测“特征太杂,被污染了”。这里我们来试试删除一些特征,看看结果会如何。

根据之前的重要度,我们决定删去所有与sepal有关的特征。

随后开始训练,结果如下

好了,但是和使用决策树效果差不多。。。

我们再拿决策树试试,发现效果更好了一点(合着随机森林比不过决策树是吧)

4. 模型可视化

4.1 调用tree.plot函数

效果如下:

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值