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