sklearn—决策树的学习

```from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import graphviz
wine=load_wine()#字典类型的红酒数据集
import pandas as pd
pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)], axis=1)#红酒数据集,标签--连成一个表
#划分训练集,测试集,Y是标签(1,2,0)
Xtrain,Xtest,Ytrain,Ytest=train_test_split(wine.data,wine.target,test_size=0.3)

#1.实例化
clf=tree.DecisionTreeClassifier(criterion="entropy",random_state=30,splitter="random")
#信息熵,设置分支中的随机模式的参数,splitter:虽然决策树分支随机,但是可以设置优先选择重要的特征进行分支。best;或者random
#可以防止过拟合

#2.数据进入训练
clf=clf.fit(Xtrain,Ytrain)
#3.使用接口,导入测试集打分
score=clf.score(Xtest,Ytest)#返回预测的准确度accuracy
# print(score)

#画树

feature_name=['酒精','苹果酸','灰','灰的碱性','镁','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','不知道啥','氨酸','']
dot_data=tree.export_graphviz(clf
                              ,feature_names=feature_name
                              ,class_names=['白酒','啤酒','红酒']
                              ,filled=True#框的颜色
                              ,rounded=True#圆框
                              ,
)
graphy=graphviz.Source(dot_data)
# print(graphy)
# print(clf.feature_importances_)#决策树的权重
print([*zip(feature_name,clf.feature_importances_)])#将标签和对应的权重合起来


#剪枝参数
#max_depth限制树的最大深度,超过设定深度的树枝全部剪掉
#min_sample_leaf限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生
#min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分歧,否则分枝就不会发生。

#超参数曲线
import matplotlib.pyplot as plt

test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(max_depth=i + 1
                                      , criterion="entropy"
                                      , random_state=30
                                      , splitter="random"

                                      )
    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()

#目标权重参数
#class_weight & min_weight_fraction_leaf完成样本标签平衡的参数
#apply 返回每个测试样本所在的叶子结点的索引;predict:返回每个测试样本分类预测结果
print(clf.apply(Xtest))
print(clf.predict(Xtest))

#所有接口中要求输入X_train和X_test的部分,必须至少是一个二维矩阵,因为sklearn不接受任何一维矩阵作为特征矩阵被输入
# 假设你的数据只有一个特征,必须使用reshape(-1,1)来增维
# 假设你的数据只有一个特征和一个样本,必须使用reshape(1,-1)来增维



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值