sklearn调库实现决策树算法

2022/3/21 12:28:45

本文主要是介绍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()

结束啦!!!



这篇关于sklearn调库实现决策树算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程