sklearn实践——决策树(分类树)
1.1 基本概念
决策树是一种非参数的监督学习,可以从一系列带有特征和标签的数据中寻找规律,并用树形结构描述这些规律。
1.2 在sklearn中的基本框架
from sklearn.model_selection import train_test_split
from sklearn import tree
dtcf = tree.DecisionTreeClassifier()
dtcf = dtcf.fit(x_train, y_train)
score = dtcf.score(x_test, y_test)
1.3 class DecisionTreeClassifier()的常用参数与属性
1.3.1 参数
criterion
在决策树划分分支时所采用的方法
”entropy“ 代表使用信息熵
“gini” 代表使用基尼系数 (默认参数)
在实际使用过程中,二者的差异并不是很大,但因为信息熵的计算涉及对数,会慢于基尼系数。
random_state
用来设置分支过程中的随机参数,主要用来固定结果,默认为“none”。
在不设置时,多次运行,可能会导致结果不一致,输入任意整数,可将结果稳定下来
splitter
类似于random_state,用来控制决策树的分支选项
“best” 代表优先选择更重要的特征进行分支
“random” 代表分支时更为随机,决策树可能会受一些噪声的影响加大加深
max_depth
用来限制树的最大深度,会将超过设定深度的分支全部剪除,是一种典型的防止决策树过拟合的方法。
在实际计算中,可多次调整该参数看其拟合效果。
min_samples_leaf
用来限定该节点分支后的子节点中必须含有大于等于min_samples_leaf个训练样本。否则该分支不会产生。
该参数会使决策树变得较为平滑,但数值设置太小会引起决策树的过拟合,设置的太大会引起欠拟合,需要多次调参确定。
min_samples_split
用来限定节点中必须含有大于等于min_samples_split个训练样本,该节点才能参与后续分支。
其效果类同于min_samples_leaf
max_features
用来限制分支中的特征数,当特征数大于max_features时会被舍弃,较为暴力。
适用于高维数据的降维,但在各特征的重要性未知的情况下设定,可能会使结果较差。一般来说,通过降维来防止过拟合不会采用这个方法,推荐选择PCA等降维算法。
1.3.2 属性
feature_importances_
用于查看各个特征对模型的重要程度
1.4 使用sklearn中的红酒数据集的实例
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn import tree
import pandas as pd
wine = load_wine()
x_train, x_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.3, random_state=30)
dtcf = tree.DecisionTreeClassifier(criterion="entropy"
, random_state=30
, splitter="random"
, max_depth=3
)
dtcf = dtcf.fit(x_train, y_train)
score = dtcf.score(x_test, y_test)
print(score)
print(dtcf.feature_importances_)
|