本节来介绍如何用决策树解决实际问题。
决策树是常用的机器学习算法之一,决策树模型的决策过程非常类似人类做判断的过程,比较好理解。
决策树可用于很多场景,比如金融风险评估,房屋价格评估,医疗辅助诊断等。
要使用决策树算法,我们先来介绍一下 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_iris
iris = 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&#