本节来介绍如何用决策树解决实际问题。
决策树是常用的机器学习算法之一,决策树模型的决策过程非常类似人类做判断的过程,比较好理解。
决策树可用于很多场景,比如金融风险评估,房屋价格评估,医疗辅助诊断等。
要使用决策树算法,我们先来介绍一下 scikit-learn 。
1,scikit-learn
scikit-learn 是基于Python 的一个机器学习库,简称为sklearn,其中实现了很多机器学习算法。我们可以通过sklearn 官方手册 来学习如何使用它。
sklearn 自带数据集
要进行数据挖掘,首先得有数据。sklearn 库的datasets 模块中自带了一些数据集,可以方便我们使用。
sklearn 自带数据集:
- 鸢尾花数据集:load_iris()
- 乳腺癌数据集:load_breast_cancer()
- 手写数字数据集:load_digits()
- 糖尿病数据集:load_diabetes()
- 波士顿房价数据集:load_boston()
- 体能训练数据集:load_linnerud()
- 葡萄酒产地数据集:load_wine()
冒号后边是每个数据集对应的函数,可以使用相应的函数来导入数据。
比如我们用如下代码导入鸢尾花数据集:
from sklearn.datasets import load_irisiris = load_iris()
使用dir(iris) 查看iris 中包含哪些属性:
>>> dir(iris)['DESCR', 'data', 'feature_names', 'filename', 'frame', 'target', 'target_names']
2,sklearn 中的决策树
sklearn 库的tree 模块实现了两种决策树:
- sklearn.tree.DecisionTreeClassifier 类:分类树的实现。
- sklearn.tree.DecisionTreeRegressor 类:回归树的实现。
分类树用于预测离散型数值,回归树用于预测连续性数值。
sklearn 只实现了预剪枝,没有实现后剪枝。
DecisionTreeClassifier 类的构造函数
def __init__(self, *, criterion="gini", splitter="best", max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0., max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0., min_impurity_split=None, class_weight=None, ccp_alpha=0.0):
DecisionTreeClassifier 类的构造函数中的criterion 参数有2 个取值:
- entropy:表示使用 ID3 算法(信息增益)构造决策树。
- gini:表示使用CART 算法(基尼系数)构造决策树,为默认值。
其它参数可使用默认值。
sklearn 库中的决策分类树只实现了ID3 算法和CART 算法。
DecisionTreeRegressor 类的构造函数
def __init__(self, *, criterion="mse", splitter="best", max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0., max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0., min_impurity_split=Non