决策树

分类树

八个重要参数

  • criterion: 决定不纯度的计算方法: 1)”entropy“,使用信息熵(Entropy) 2)”gini“,使用基尼系数(Gini Impurity)

    • 信息熵对不纯度更加敏感,对不纯度的惩罚最强,计算更复杂
  • splitter:输入“best”优先选择更重要的分支进行分类;输入“random”更加随机防止过拟合

  • 剪枝策略参数:

    • max_depth:一般为3
    • min_samples_leaf:一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发。类别不多选1,一般为5
    • min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生。
    • max_features :限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃
    • min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。

可视化方法

  • import graphviz dot_data = tree.export_graphviz(clf #训练好的模型 ,out_file = None ,feature_names= feature_name ,class_names=[“琴酒”,“雪莉”,“贝尔摩德”] ,filled=True #进行颜色填充 ,rounded=True #树节点的形状控制 ) graph = graphviz.Source(dot_data) graph

一个属性四个接口

  • 属性:feature_importances_,能够查看各个特征对模型的重要性

  • fit()predict()apply()score()

  • apply中输入测试集返回每个测试样本所在的叶子节点的索引

基本流程

from sklearn import tree #导入需要的模块
clf = tree.DecisionTreeClassifier() #实例化模型对象
clf = clf.fit(X_train,y_train) #用训练集数据训练模型
result = clf.score(X_test,y_test) 
  • 计算全部特征的不纯度指标->选择不纯度指标最优的特征来分支->在第一个特征下计算不纯度->选取不纯度指标继续分支(直到没有更多特征可用或者整体不纯度达到最优)

  • 所有接口中要求输入X_train和X_test的部分,输入的特征矩阵必须至少是一个二维矩阵。如果你的数据的确只有一个特征,那必须用reshape(-1,1)来给矩阵增维;如果你的数据只有一个特征和一个样本,使用reshape(1,-1)来给你的数据增维。

回归树

重要参数,属性和接口

  • criterion:mse,friedman_mse,mae
  • 属性接口如上。接口score返回的是R平方,并不是MSE
if xgboost is not None:  # not shown in the book`
     xgb_reg.fit(X_train, y_train,
                 eval_set=[(X_val, y_val)], early_stopping_rounds=2)
     y_pred = xgb_reg.predict(X_val)
     val_error = mean_squared_error(y_val, y_pred)  
     print("Validation MSE:", val_error)