ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

sklearn调库实现决策树算法

2022-03-21 10:32:15  阅读:303  来源: 互联网

标签:iris wines clf feature names 调库 import sklearn 决策树


本文不讲原理,直接调库上代码。
个人建议先用jupyter逐步操作,了解每步代码的功能,更易理解。

1.导入相关包

import numpy as np
import pandas as pd
from sklearn.datasets import load_wine#导入红酒数据集
from sklearn import tree#后续决策树可视化
from sklearn.tree import DecisionTreeClassifier#引入决策树分类器
from sklearn.metrics import accuracy_score#引入决策树评分器
from sklearn.model_selection import train_test_split#数据集拆分
import matplotlib.pyplot as plt

2.算法实现

wines = load_wine()#导入数据集
# wines   #可查看该数据集中的所有内容
#后续需要用到的信息
wines_data = wines.data#数据集数据
wines_target = wines.target#数据集标签
wines_feature_names = wines.feature_names#数据集特征名称
wine_target_names = wines.target_names#数据集类别名
#将数据集中的特折与标签匹配,转为DataFrame结构
dataset = pd.DataFrame(wines_data,columns=wines_feature_names)
dataset['class'] = wines_target
dataset.shape
#拆分训练集和测试集,比例为7:3,随机种子为42
X = dataset.iloc[:,:-1]
y = dataset.iloc[:,-1]
Xtrain,Xtest,ytrain,ytest = train_test_split(X,y,random_state=42,test_size=0.3)
#初始化分类器,训练,括号中的为各类超参数,可自行调试
clf = DecisionTreeClassifier(criterion="entropy"#可以不用此参数,默认为基尼系数
                             ,random_state=30
                             ,max_depth = 3
#                              ,min_samples_split = 10
#                              ,min_samples_leaf = 5
                            )
clf.fit(Xtrain,ytrain)
#测试分类器
clf.score(Xtest,ytest)

上一个代码块的补充(超参数调试)

scores = []
for i in range(5):
    clf = DecisionTreeClassifier(criterion="entropy"#可以不用此参数,默认为基尼系数
                             ,random_state=30
                             ,max_depth = i+1
#                              ,min_samples_split = 10
#                              ,min_samples_leaf = 5
                            )
    clf.fit(Xtrain,ytrain)
    #测试分类器
    scores.append(clf.score(Xtest,ytest))
plt.plot(scores,c = "r",label = "max_depth")
plt.legend()
plt.show()
print(scores)
#获取测试集预测指标,方便自己计算性能标准
clf.predict(Xtest)
#决策树绘制
plt.figure(figsize=(16,10))
tree.plot_tree(clf#输入决策树数据
              ,node_ids = True#给节点编号
              ,feature_names = wines_feature_names#设置特征名称
              ,class_names = wine_target_names#设置分类名称
              ,fontsize = 12#设置字体大小
              ,rounded = True
              ,filled = True#填充颜色
              )
# plt.savefig("红酒决策树.png")
plt.show()

#了解各个特征对决策树结果的支持情况
[*zip(wines_feature_names,clf.feature_importances_)]

结果

本文的最终分类得分:0.96296296296296291
该数据集经过合理拆分可以得到98%以上的分类成功率。
最终的决策树如图:
在这里插入图片描述

额外补充

最后来一个完整的代码文件,但是用的是另一个数据集(iris)

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from math import log
from sklearn.tree import DecisionTreeClassifier#导入决策树分类器
from sklearn import tree
# 这里直接引入sklearn里的数据集,iris鸢尾花
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split  # 切分数据集为训练集和测试集
from sklearn.metrics import accuracy_score # 计算分类预测的准确率

iris = load_iris()
#data,target,feature_names
# iris.feature_names
dataset = pd.DataFrame(data=iris.data,columns=iris.feature_names)
dataset['class'] = iris.target
#特征名称
feature_names = iris.feature_names
#数据集类别
target_names = iris.target_names
# dataset
X = dataset.iloc[:,:-1]
y = dataset.iloc[:,-1]
print(type(dataset))

#调用决策树进行训练
clf = DecisionTreeClassifier()
# clf.fit(iris.data,iris.target)
clf.fit(X,y)
# clf.score(iris.data,iris.target)
plt.figure(figsize=(16,8))
tree.plot_tree(clf,node_ids=True,feature_names=feature_names,class_names=target_names,fontsize=12)
plt.savefig("决策树.png")#保存图片
plt.show()

结束啦!!!

标签:iris,wines,clf,feature,names,调库,import,sklearn,决策树
来源: https://blog.csdn.net/moujinzhuo/article/details/123628504

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有