决策树
分类树
八个重要参数
-
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)