决策树学习
决策树是一种用来进行分类和回归的无参有监督学习方法,其目的是创建一种模型,从模型特征中学习简单的决策远着呢,从而预测一个目标变量的值。
scikit-learn tree模块提供DecisionTreeClassifier
类和DecisionTreeRegressor
类,分别用于分类和回归问题。
分类问题
DecisionTreeClassifier
类的格式如下:
class sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
- splitter:接收字符串,可选,表示节点分割策略,默认为’best’, 还可以是’random’
- max_depth:接收整数或None,表示决策树的最大深度,默认为None,表示所有叶子节点为纯节点
对数据集构造决策树,首先生成DecisionTreeClassifier类的一个实例(如clf),然后使用该实例调用fit()
方法进行训练。
fit(X, y, sample_weight=None, check_input=True, X_idx_sorted=None)
其中X, y为数组,表示样本输入属性值和目标值。
对训练好的决策树模型,可以使用predict()
方法对新的样本进行预测。predict()
的格式为:
predict(X, check_input=True)
其中X接收与fit()方法中X有相同特征的数组。predict()将返回新样本值的预测类别。
sklearn.tree模块提供了训练的决策树模型的文本描述输出方法export_graphviz()
,如果要查看训练的决策树模型参数,可以使用该方法,其格式为:
sklearn.tree.export_graphviz(decision_tree, out_file=None, max_depth=None, feature_names=None, class_names=None, label=’all’, filled=False, leaves_parallel=False, impurity=True, node_ids=False, proportion=False, rotate=False, rounded=False, special_characters=False, precision=3)
export_graphviz()
返回dot_data参数,表示要输入到GraphViz的决策树模型描述,仅在out_file为None时返回。
#例8-3 构造打篮球的决策树
import numpy as np
import pandas as pd
#读数据文件
PlayBasketball = pd.read_csv('D:/my_python/ch08/data/PlayBasketball2.csv',
sep = ',',encoding = 'ANSI')
#观察playgolf数据集的列名称,即属性名称
print ('PlayBasketball数据集的列名称(属性)为:n',PlayBasketball.columns)
#观察数据集
print ('PlayBasketball数据集为:n',PlayBasketball)
#设置训练用的各属性及值,其中Outlook属性用数值代替:Sunny: 1; Rain:2
train_data=PlayBasketball[['Weather', 'Temperature/℃', 'Courses', 'Partner']][0:]
#观察训练集
print (train_data)
#设置训练用的目标属性及值
train_target=PlayBasketball[['Play']][0:]
#观察目标集
print (train_target)
#导入scikit-learn的tree模块
from sklearn import tree
#调用决策树分类器,添加参数
clf = tree.DecisionTreeClassifier(criterion='entropy',max_depth=2)
#将训练集和目标集进行匹配训练
clf.fit(train_data,train_target)
dot_data=tree.export_graphviz(clf, out_file=None,
feature_names=train_data.columns,
class_names=True,
filled=True, rounded=True)
#观察dot_data决策结果数据文件
print('dot_data决策结果数据文件为:n',dot_data)
#导入graphviz模块,将训练生成的决策树数据文件可视化。要求事先已安装好graphviz模块。
import graphviz
#设置环境变量,将graphviz的bin目录加到PATH
import os
os.environ["PATH"] = os.pathsep 'D:/Program Files/Graphviz2.38/bin/'
#决策树可视化
#中文的办法:#graph = graphviz.Source(dot_data.replace('helvetica','"Microsoft YaHei"'), encoding='utf-8')
graph=graphviz.Source(dot_data)
graph
#使用决策树进行预测,观察对新的数据的决策结果
print('新的数据为[1,30,6,False]时的决策结果为:',clf.predict([[1,30,6,False]]))
print('新的数据为[2,25,2,True]时的决策结果为:',clf.predict([[2,25,2,True]]))
print('新的数据为[1,25,2,True]时的决策结果为:',clf.predict([[1,25,2,True]]))