说明
在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