DecisionTreeClassifier
from sklearn import tree
clf = tree.DecisionClassifier()
clf = tree.fit(x_train,y_train)
result = clf.score(X_test,y_text)
1.分类树的基本参数列表
1.criterion
一些数学公式
信息熵公式 :
基尼系数公式 :
这是一个衡量分类效果的参数叫不纯度,通常来说不纯度越低分类效果越好,可以通过数学方法证明子节点不纯度是低于父节点的,叶子节点的不纯度是最低的,对于这个参数,sklearn提供了两个不同的选择,输入entropy使用信息熵,gini使用基尼指数
当使用信息熵是,sklearn实际上计算的是信息熵的增益,就是从父节点到子节点信息熵的差值,信息熵一定程度上精度更高而速度更慢(也就是取对数计算过程速度慢),而基尼系数适合比较大量的数据
使用示例
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import pandas as pd
import graphviz
wine = load_wine()
# wine包含基本的data和target两个属性
catD = pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)], axis=1)
# 将多个DataFrame进行拼接 axis = 1 表示列拼接 也就是增加列的维度,这样仅仅用于print查看
print(catD)
x_train, x_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.2)
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(x_train, y_train)
score = clf.score(x_test, y_test)
print("accuracy:", score)
dot_data = tree.export_graphviz(clf)
graph = graphviz.Source(dot_data)
print(graph)
2.random_state
随机种子,不多描述
3.spliter
clf = tree.DecisionTreeClassifier(
criterion="entropy",
random_state=30,
splitter="random"
)
使用splitter 有两种参数,random或者best,splitter="best"'以使用最佳特征分割(默认),或者'splitter="random"'以使用随机特征分割
2.决策树剪支
防止过拟合的方式
1.max_depth
限制树的最大深度,超过设定深度剪去
2.min_samples_leaf & min_samples_split
min_samples_leaf 这个参数指定了一个叶子节点(终端节点)最少需要包含多少个样本点才能被创建。如果某节点分割后某个子节点中的样本数少于这个值,则不会继续分割。
min_samples_split它定义了在内部节点进行分割时,该节点所包含的样本数量至少要达到多少才会尝试对其进行分割
3.max_features & min_impurity_decrease
max_features 限制分支个数
min_impurity_decrease 限制信息增益,如果没达到就不分支
3.重要属性和接口
# 返回每个测试点样本所在的叶子节点索引
clf.apply(Xtest)
# predict返回每个测试样本的分类/回归结果
clf.predict(Xtest)
# 返回每个特征的重要性
clf.feature_importances_