sklearn调包侠之决策树算法

决策树原理

之前我们详细讲解过决策树的原理,详细内容可以参考该链接(https://www.jianshu.com/p/0dd283516cbe)。

改进算法

但使用信息增益作为特征选择指标(ID3算法)容易造成过拟合。举一个简单例子,每个类别如果都有一个唯一ID,通过ID这个特征就可以简单分类,但这并不是有效的。为了解决这个问题,有了C4.5和CART算法,其区别如下所示:

ID3 是信息增益划分

C4.5 是信息增益率划分

CART 做分类工作时,采用 GINI 值作为节点分裂的依据

实战——泰坦尼克号生还预测

数据导入与预处理

该数据可在kaggle网站下载,这里我们先通过pandas读入数据。

首先,对于一些不重要的信息进行删除(例如Name);我们都知道,机器学习是没法对字符串进行计算的,这里需要把Sex、Embarked转换为整数类型。

然后,Embarked有缺失值,我们通过seaborn进行可视化,发现S值最多,所以通过S值进行缺失值填充。

年龄字段也有缺失值,我们通过绘制直方图,发现基本呈正态分布,于是使用平均值来填充缺失值。

处理完成后的数据如下:

切分数据集

模型训练与评估

决策树算法使用sklearn.tree模块中的DecisionTreeClassifier方法。该方法有一系列参数来控制决策树生成过程,从而解决过拟合问题(具体可看sklearn的官方文档)。常用的参数如下:

criterion:算法选择。一种是信息熵(entropy),一种是基尼系数(gini),默认为gini。

max_depth:指定数的最大深度。

minsamplessplit:默认为2,指定能创建分支的数据集大小。

minimpuritydecrease:指定信息增益的阈值。

首先,我们不对参数进行调整。

我们用交叉验证查看模型的准确度,发现模型的精度并不是很高。

模型调优

我们可以设置不同的参数,对模型进行调优,这里以max_depth为例,定义函数,求出最好的参数。

网格搜索

但这种方法存在这两个问题:

结果不稳定。当划分不同的数据集时,可能结果都一样。

不能选择多参数。当需要多参数进行调优时,代码量会变的很多(多次嵌套循环)。

为了解决这些问题,sklearn提供GridSearchCV方法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180701G09FWI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券