决策树可以实现分类或者回归,也是随机森林的基本预测器。
决策树训练和可视化
在鸢尾花数据集上训练一个决策树:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris=load_iris()
x=iris.data[:,2:]
y=iris.target
tree_clf=DecisionTreeClassifier(max_depth=2)
tree_clf.fit(x,y)
特征值选择的是鸢尾花第2列及后面所有列(花瓣长度和宽度)。
可视化:使用export_graphviz库
#可视化决策树
from sklearn.tree import export_graphviz
export_graphviz(
tree_clf,
out_file=image_path('iris_tree.dot'),
feature_names=iris.feature_names[2:],
class_names=iris.target_names,
rounded=True,
filled=True
)
定义image_path方法:
from __future__ import division, print_function, unicode_literals
import numpy as np
import os
# to make this notebook's output stable across runs
np.random.seed(42)
# To plot pretty figures
# %matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rc('axes', labelsize=14)
mpl.rc('xtick', labelsize=12)
mpl.rc('ytick', labelsize=12)
# Where to save the figures
PROJECT_ROOT_DIR = "."
def image_path(fig_id):
return os.path.join(PROJECT_ROOT_DIR, "images", fig_id)
def save_fig(fig_id, tight_layout=True):
print("Saving figure", fig_id)
if tight_layout:
plt.tight_layout()
plt.savefig(image_path(fig_id) + ".png", format='png', dpi=300)
运行以上代码,会在“…\images”文件夹下产生iris_tree.dot文件,打开命令行模式并且工作目录移动到此文件夹下,输入:
dot -Tpng iris_tree.dot -o iris_tree.png
将iris_tree.dot转换为:iris_tree.png
打开iris_tree.png文件:
注:决策树不需要特征缩放或集中(归一化)。
基尼不存度:如果所有实例都是同一个类型的,则是纯的,用来衡量当前数据集的混乱度,类似于信息熵。
G i = 1 − ∑ k = 1 n p i , k 2 G_i=1-\sum_{k=1}^{n}p_{i,k}^2 Gi=1−k=1∑npi