scikit-learn笔记之决策树

说明

  在scikit-learn中提供了两类决策树,一个DecisionTreeClassifier类来实现k近邻法分类模型,一个DecisionTreeRegressor类来实k近邻法回归模型。

DecisionTreeClassifier分类

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='deprecated', ccp_alpha=0.0)

参数
criterion:一个字符串,指定特征切分准则基尼系数gini和熵entropy,默认为gini。

  • ‘gini’:基尼系数
  • ‘entropy’:信息增益比

splitter:一字符串,指定切分原则。

  • ‘best’:表示选择最优的切分。
  • ‘random’:表示选择随机的切分。

max_depth:整数,树的最大深度,默认为None。

  • 如果为None:表示树的深度不限(直到每一个叶子结点中所有样本都属于同一个类,或者叶子结点包含小于min_samples_split个样本点)。
  • 如果max_leaf_nodes非None:忽略此选项

min_samples_split:整数或者浮点型,指定每个内部结点(非叶结点)包含的最少样本数,默认为2。

  • 如果为int:保持原值。
  • 如果为float:使用ceil(min_samples_split * n_samples)函数求取最小样本数,若小于2取最小样本数为2。

min_samples_leaf:整数或者浮点型,指定每个叶结点包含的最少样本数,默认为1。

  • 如果为int:保持原值。
  • 如果为float:使用ceil(min_samples_split * n_samples)函数求取最小样本数。

min_weight_fraction_leaf:浮点型,叶结点中样本的最小权重系数,默认为0.0。

max_features:可以为整数、浮点、字符串或者None,默认为None。

  • 如果是整数:每次切分只考虑max_features个特征。
  • 如果是浮点数:则每次切分只考虑int(max_features * n_features)个特征。
  • 如果是’auto’或者’sqrt’:max_features 等于sqrt(n_features)。
  • 如果是’log2’:max_features 等于log2(n_features)。
  • 如果是None:max_features 等于n_features。

random_state:一个帧数或者一个RandomState实例或者为None,默认为None。

  • 如果是整数:它指定了随机数生成器的种子。
  • 如果是RandomState:指定了一个随机数生成器。
  • 如果是None:使用默认的随机数生成器。

max_leaf_nodes:为整数或者None,指定叶结点的最大数量。

  • 如果是None:叶子结点数量不限。
  • 如果是非None:max_depth被忽略。

min_impurity_decrease:浮点,默认为0.0。如果结点分割杂质的减少大于或者等于这个值,结点会被分割。

min_impurity_split:浮点,默认为0。分割阈值,如果结点分割杂质大于分割阈值将会被分割。

class_weight:为一个字典、字典列表、字符串‘balanced’,或者None,它指定了分类的权重。权重的形式{class_label: weight}。

  • 如果是None:每个分类的权重都为1。
  • 字符串‘balanced’:分类的权重是样本中 个分类出现的频率的反比。

presort:弃用

ccp_alpha:非负浮点数,默认0.0。用于剪枝,默认不剪枝。

属性
classes_:分类的标签值。
feature_importances_:给出特征的重要程度,该值越高,特征越重要。
max_features_:max_features的值。
n_classes_:分类的数量。
n_features_:执行fit之后特征的数量。
n_outputs_:执行fit之后输出的数量。
tree_:一个Tree对象。

实例方法
fit(X,y):训练模型。
get_params([deep]):获取模型参数信息。
apply(X[, check_input]):返回每个样本预测为叶结点的索引。
predict_log_proba(X):返回一个数组,数组的元素一次是X预测为各个类别的概率的对数值。
predict_proba(X):返回一个数组,数组的元素一次是X预测为各个类别的概率值。
predict(X):用模型进行预测,返回预测值。
score(X, y[, sample_weight]):返回模型的预测性能得分。
set_params(**params):设置模型参数。

示例

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.tree import export_graphviz

iris = datasets.load_iris()
train = iris.data
target = iris.target

dtclf = DecisionTreeClassifier()
dtclf.fit(X_train,y_train)
print('Training Score:%f'%dtclf.score(X_train,y_train))
print('Testing Score:%f'%dtclf.score(X_test,y_test))
#画出决策树
dot_data = \
    export_graphviz(
        dtclf,
        out_file = None,
        feature_names = iris.feature_names,
        filled = True,
        impurity = False,
        rounded = True
    )
#pip install pydotplus
import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)
graph.get_nodes()[7].set_fillcolor("#FFF2DD")
from IPython.display import Image
Image(graph.create_png())

在这里插入图片描述

DecisionTreeRegressor回归

DecisionTreeRegressor是回归模型,其原型为:

class sklearn.tree.DecisionTreeRegressor(*, criterion='mse', 
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, 
presort='deprecated', ccp_alpha=0.0)

参数
criterion:一个字符串,指定特征切分准则.默认为’mse’。

  • ‘mse’:均方差。
  • ‘friedman_mse’:使用改进后的均方差。
  • ‘mae’:平均绝对误差

splitter:一字符串,指定切分原则。

  • ‘best’:表示选择最优的切分。
  • ‘random’:表示选择随机的切分。

max_depth:整数,树的最大深度,默认为None。

  • 如果为None:表示树的深度不限(直到每一个叶子结点中所有样本都属于同一个类,或者叶子结点包含小于min_samples_split个样本点)。
  • 如果max_leaf_nodes非None:忽略此选项

min_samples_split:整数或者浮点型,指定每个内部结点(非叶结点)包含的最少样本数,默认为2。

  • 如果为int:保持原值。
  • 如果为float:使用ceil(min_samples_split * n_samples)函数求取最小样本数,若小于2取最小样本数为2。

min_samples_leaf:整数或者浮点型,指定每个叶结点包含的最少样本数,默认为1。

  • 如果为int:保持原值。
  • 如果为float:使用ceil(min_samples_split * n_samples)函数求取最小样本数。

min_weight_fraction_leaf:浮点型,叶结点中样本的最小权重系数,默认为0.0。

max_features:可以为整数、浮点、字符串或者None,默认为None。

  • 如果是整数:每次切分只考虑max_features个特征。
  • 如果是浮点数:则每次切分只考虑int(max_features * n_features)个特征。
  • 如果是’auto’或者’sqrt’:max_features 等于sqrt(n_features)。
  • 如果是’log2’:max_features 等于log2(n_features)。
  • 如果是None:max_features 等于n_features。

random_state:一个帧数或者一个RandomState实例或者为None,默认为None。

  • 如果是整数:它指定了随机数生成器的种子。
  • 如果是RandomState:指定了一个随机数生成器。
  • 如果是None:使用默认的随机数生成器。

max_leaf_nodes:为整数或者None,指定叶结点的最大数量。

  • 如果是None:叶子结点数量不限。
  • 如果是非None:max_depth被忽略。

min_impurity_decrease:浮点,默认为0.0。如果结点分割杂质的减少大于或者等于这个值,结点会被分割。

min_impurity_split:浮点,默认为0。分割阈值,如果结点分割杂质大于分割阈值将会被分割。

class_weight:为一个字典、字典列表、字符串‘balanced’,或者None,它指定了分类的权重。权重的形式{class_label: weight}。

  • 如果是None:每个分类的权重都为1。
  • 字符串‘balanced’:分类的权重是样本中 个分类出现的频率的反比。

presort:弃用

ccp_alpha:非负浮点数,默认0.0。用于剪枝,默认不剪枝。

属性
feature_importances_:给出特征的重要程度,该值越高,特征越重要。
max_features_:max_features的值。
n_features_:执行fit之后特征的数量。
n_outputs_:执行fit之后输出的数量。
tree_:一个Tree对象。

实例方法
fit(X,y):训练模型。
get_params([deep]):获取模型参数信息。
apply(X[, check_input]):返回每个样本预测为叶结点的索引。
predict(X):用模型进行预测,返回预测值。
score(X, y[, sample_weight]):返回模型的预测性能得分。
set_params(**params):设置模型参数。

示例

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor

X, y = load_boston(return_X_y=True)

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)
dtrg = DecisionTreeRegressor()
dtrg .fit(X_train,y_train)
print('Training Score:%f'%dtrg .score(X_train,y_train))
print('Testing Score:%f'%dtrg .score(X_test,y_test))

总结

  决策树的分类和回归算法其参数意义和实例方法几乎完全相同,两者的区别在于回归分析和分类特征拆分准则的不同:
  ❐DecisionTreeClassifier使用的拆分准则基尼指数和信息增益。
  ❐DecisionTreeRegressor使用的拆分准则mse、mae。

python代码

git地址:https://github.com/lingxiaaisuixin/MarchineLearning/tree/master/DecisionTree
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值