使用sklearn实现决策树(分类&回归单树)

#分类树
from sklearn.tree import DecisionTreeClassifier
model_tree = DecisionTreeClassifier()
#决策树
from sklearn.tree import DecisionTreeRegressor
model_tree = DecisionTreeRegressor()

写在前面:大多数情况下决策树必过拟合,必须调参降低过拟合,先调节深度和叶子数量。

参数

criterion划分叶子节点的标准。分类树可以选择’gini’,‘entropy’,其中’entropy’表示使用信息增益,但是是信息增益还是信息增益比我没有继续研究。回归树可以选择’mse’,‘mae’,‘friedman_mse’.'friedman_mse’是一种改进的mse,具体的再百度吧。
splitter特征的选择方法。‘best’表示遍历所有的特征后选择最佳的特征。‘random’表示首先随机的划分一些特征,然后在这些特征中 选择最佳的特征,可以降低过拟合,同时加快训练速度。如果特征较少则不要选择random,因为特征少训练时间不长,同时也没有过拟合的担忧。
max_features可选’None’,‘log2’,‘sqrt’,‘auto’。表示划分时考虑的最多特征数。特征较多时可以考虑选择参数来降低过拟合。
max_depth 限制了这棵树的最大深度,可以有效地降低过拟合。注:*这个参数对树的影响巨大!*其他文章说常用深度a~b,我信你个鬼啊,数据不同很那确定深度,还有目前没有单树做魔性的,bagging和boosting后这个深度都不能确定。
max_leaf_nodes限制了最大的叶子数量。有效地降低过拟合。注意如果是二叉树,则该参数小于power(2,max_depth)才存在意义。
min_sample_split 节点的样本数量小于该值时,则不会对该节点进行继续划分。预剪枝,降低多拟合。
min_impurty_split 节点划分的最小不纯度。如果某节点的criterion小于该值,则该节点不会继续划分节点,直接成为叶子。预剪枝,减低过拟合。
min_samples_leaf决策树生成之后,如果某个叶子的样本数小于该值,则它会被和星弟节点一起被剪枝。后剪枝,降低过拟合。
min_weight_fraction_leaf 叶子中样本权重的最小值,如果小于该值,就会和兄弟叶子被剪枝。取值范围[0,0.5]。
class_weight’None’,‘balance’,也可以自己写权重,回归树没有。
presort预排序,小决策树设置成True可以加快训练速度,大决策树就不要用了。

属性:

feature_importances_:样本的重要性,数值越大,样本越重要。
tree_:底层的树对象

方法:

fit(train_x,train_y):训练train_x,train_y
score(test_x,test_y):返回预测准确率
predict(test_x):预测
predict_proba(test_x):对test_x进行预测,返回属于各个类别的概率。回归树再见。
predict_log_proba(test_x):对test_x进行预测,返回属于各个类别的对数概率。回归树再见。

猜你喜欢

转载自blog.csdn.net/weixin_44414593/article/details/107386309