700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化

【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化

时间:2021-12-14 20:15:38

相关推荐

【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。

【阿旭机器学习实战】【36】糖尿病预测—决策树建模及其可视化

目录

【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化1. 导入数据并查看数据2. 训练决策树模型及其可视化2.1 决策树模型2.2 可视化训练好的决策树模型2.2 使用随机森林模型

1. 导入数据并查看数据

关注GZH:阿旭算法与机器学习,回复:“ML36”即可获取本文数据集、源码与项目文档

# 导入数据包import pandas as pdfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_split from sklearn import metrics import matplotlib.pyplot as pltimport matplotlib as matplotimport seaborn as sns%matplotlib inline

col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']df = pd.read_csv("pima-indians-diabetes.csv", header=None, names=col_names)

df.head()

# 相关性矩阵corr = df.iloc[:,:-1].corr()#corr = (corr)sns.heatmap(corr, xticklabels=corr.columns.values,yticklabels=corr.columns.values)corr

2. 训练决策树模型及其可视化

# 选择预测所需的特征feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']X = pima[feature_cols] # 特征y = pima.label # 类别标签

# 将数据分为训练和测试数据X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1) # 70% training and 30% test

2.1 决策树模型

# 创建决策树分类器clf = DecisionTreeClassifier(criterion='entropy')# 训练模型clf = clf.fit(X_train,y_train)# 使用训练好的模型做预测y_pred = clf.predict(X_test)

# 模型的准确性print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

Accuracy: 0.7489177489177489

2.2 可视化训练好的决策树模型

注意: 需要使用如下命令安装额外两个包用于画决策树的图

conda install python-graphviz

conda install pydotplus

from sklearn.tree import export_graphvizfrom six import StringIO from IPython.display import Image import pydotplusfrom sklearn import treedot_data = StringIO()export_graphviz(clf, out_file=dot_data, filled=True, rounded=True,special_characters=True,feature_names = feature_cols,class_names=['0','1'])graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_png('diabetes.png')Image(graph.create_png())

# 创建新的决策树, 限定树的最大深度, 减少过拟合clf = tree.DecisionTreeClassifier(criterion='entropy',max_depth=4, # 定义树的深度, 可以用来防止过拟合min_weight_fraction_leaf=0.01 # 定义叶子节点最少需要包含多少个样本(使用百分比表达), 防止过拟合)# 训练模型clf.fit(X_train,y_train)# 预测y_pred = clf.predict(X_test)# 模型的性能print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

Accuracy: 0.7705627705627706

from six import StringIO from IPython.display import Image from sklearn.tree import export_graphvizimport pydotplusdot_data = StringIO()export_graphviz(clf, out_file=dot_data, filled=True, rounded=True,special_characters=True, feature_names = feature_cols,class_names=['0','1'])graph = pydotplus.graph_from_dot_data(dot_data.getvalue())

graph.write_png('diabetes2.png')Image(graph.create_png())

2.2 使用随机森林模型

from sklearn.ensemble import RandomForestClassifier# 随机森林, 通过调整参数来获取更好的结果rf = RandomForestClassifier(criterion='entropy',n_estimators=1, max_depth=5, # 定义树的深度, 可以用来防止过拟合min_samples_split=10, # 定义至少多少个样本的情况下才继续分叉#min_weight_fraction_leaf=0.02 # 定义叶子节点最少需要包含多少个样本(使用百分比表达), 防止过拟合)# 训练模型rf.fit(X_train, y_train)# 做预测y_pred = rf.predict(X_test)# 模型的准确率print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

Accuracy: 0.7402597402597403

如果文章对你有帮助,感谢点赞+关注!

关注下方GZH:阿旭算法与机器学习,回复:“ML36”即可获取本文数据集、源码与项目文档,欢迎共同学习交流

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。