sklearn入门——分类树

概述

据说这个教程是侧重于应用的,原理的我还没搞太懂,吃瓜也就看了前六章,也是模模糊糊。。。。。
sklearn就是调包,希望能学会。
流程是

  • 实例化,建立评估模型对象;
  • 通过模型接口训练模型;
  • 通过模型接口提取需要的信息。
    对应的代码就是:
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(x_train,y_train)
result = clf.score(x_test,y_test)
重要参数
  • criterion,可以取信息熵基尼系数,分别是entropy和Gini impurity。
  • 随机参数:random_state设置一个随机数种子,随机生成决策树,选取最好的;splitter="random"也是随机处理。
import numpy as np
import pandas as pd
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import graphviz
# pandas拼接数据
df = pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)],axis=1)
# 划分训练集和测试集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)
# 实例化一个分类器
clf = tree.DecisionTreeClassifier(criterion='entropy',random_state=3,splitter="random")
# 训练
clf = clf.fit(Xtrain, Ytrain)
# 评价结果
score = clf.score(Xtest, Ytest)
# 用graphviz画出决策树
dot_data = tree.export_graphviz(clf, feature_names=wine.feature_names, class_names=['0', '1', '2'], filled=True, rounded=True, special_characters=True)
graph = graphviz.Source(dot_data)
graph
剪枝参数调优

决策树如果对训练集分类过于详尽,就可能造成对测试集的过拟合,剪枝就是防止过拟合的有效方法。

  • max_depth
    限制树的最大深度,超过设定深度的树枝全部剪掉。在高维度样本量时非常有效。
    在实际使用时,可以从3开始尝试,看拟合效果再决定是否增加深度。

  • min_samples_leaf , min_samples_split
    min_samples_leaf限定一个节点在分支后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分支就不会发生或者分支会朝着满足每个子节点都包含min_samples_leaf个样本的方向发生。
    一般搭配max_depth使用,在回归树中效果很好,可以让模型变得更加平滑。一般从5开始尝试,同时这个树还可以是小数。这个参数还可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,避免过拟合的叶子节点出现。对于多分类为题,1通常是最佳选择。
    min_samples_split限定一个节点必须至少包含min_samples_split个样本,这个节点才被允许分支,否则分支就不会发生。

  • max_features 和 min_impurity_decrease
    一般与max_depth一起使用,用作树的精修
    max_features限制分支时考虑的特征个数,超过限制个数的特征都会被舍弃,和max_depth异曲同工。
    max_features是用来限制高维度数据的过拟合的剪枝参数,器方法比较暴力,直接限制可以用的特征数量,而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。如果希望通过降维的方式防止过拟合,可以使用PCA,ICA或者特征选择模块中的降维算法。
    min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分支不会发生。

  • class_weight 和 min_weight_fraction_leaf
    完成样本标签平衡的参数。
    就是样本标签有权重,有权重后,剪枝就要基于权重剪枝

  • 确定最优剪枝参数
    使用确定超参数的曲线进行判断。超参数学习曲线是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,用来衡量不同超参数取值下模型的表现的曲线。在红酒数据集中就是训练得到的score。
    例如:

test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(criterion='entropy',random_state=30,
                                      splitter="random",
                                     max_depth=i+1,
                                     )
    clf = clf.fit(Xtrain, Ytrain)
    score = clf.score(Xtest, Ytest)
    test.append(score)

plt.plot(range(1,11), test, color='red', label='max_depth')
plt.legend()
plt.show()

在这里插入图片描述

重要属性和接口

sklearn不接受一维的数据,如果样本数据是一维的,则需要用reshape(1,-1)来增维。

  • apply
    clf.apply(Xtest)
    返回每个测试样本所在的叶子节点的索引
  • predict
    clf.predict(Xtest)
    返回每个测试样本的分类/回归结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

up-to-star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值