为了账号安全,请及时绑定邮箱和手机立即绑定

鸢尾花决策树/随机森林实例——sklearn

标签:
人工智能

本次实践主要通过 DecisionTreeClassifier  熵/gini系数决策树模型、以及RandomForestClassifier随机森林模型进行分类;

训练集:测试集=8:2

结果:返回模型评价结果、导出DecisionTreeClassifier  熵/gini系数决策树模型生成的决策树.dot文件并,生成png格式决策树图片。

注意:   相同的数据集,因算法训练过程中有用到随机算法,如果random_state参数不设置,那么每次执行模型将会生成不一样的结果,如果模型投入生产会产生很不好的影响,过程中任何涉及随机算法都需要注意。


#!/usr/bin/evn python# -*-coding:utf8 -*-'''鸢尾花经典数据处理:# 数据获取:# http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.dataimport requestscontent = requests.get('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')file = open('F:\\kettle\\tbsales\\pyhon_seana\\testresult\\liris_data.txt', "ab+")file.write(content.text.encode('utf-8'))# data_ = pd.read_excel(r'F:\kettle\tbsales\pyhon_seana\chapter5\demo\data\sales_data.xls',index_col=u'序号')'''iris_data = []with open('F:\\kettle\\tbsales\\pyhon_seana\\testresult\\liris_data.txt', "r") as filereader:    for line in filereader.readlines()[:150]:
        line = line.replace('\n','')
        iris_data.append(line.split(','))
    filereader.close()import pandas as pd
data = pd.DataFrame(iris_data)
data.columns = ['sepal_length','sepal_width','petal_length','petal_width','iris_type']
data = data.sample(frac=1,random_state=10).reset_index(drop=True) #随机打乱数据顺序提高模型准确性,设置随机参数,否则每次运行结果将会不同。test_weight = 0.8x_train = data.iloc[:int(len(data)*test_weight), 0:4]
y_train = data.iloc[:int(len(data)*test_weight), 4]
X_test = data.iloc[int(len(data)*test_weight):, 0:4]
y_test = data.iloc[int(len(data)*test_weight):, 4]from sklearn.tree import DecisionTreeClassifier as DTCfrom sklearn.ensemble import RandomForestClassifier as RFC

dtc_en = DTC(criterion='entropy',random_state=0)#熵 ,确定随机参数,否则每次运行模型结果不同dtc_gn = DTC(criterion='gini',random_state=0)#gini系数rfc = RFC(n_estimators=1000, random_state=10)
dtc_en.fit(x_train, y_train)
dtc_gn.fit(x_train, y_train)
rfc.fit(x_train, y_train)

dtc_en_pred = dtc_en.predict(X_test)
dtc_gn_pred = dtc_gn.predict(X_test)
rfc_pred = rfc.predict(X_test)from sklearn.metrics import confusion_matrix, classification_report

dtc_en_score = classification_report(y_test, y_pred=dtc_en_pred)
dtc_gn_score = classification_report(y_test, y_pred=dtc_gn_pred)
dtc_rf_score = classification_report(y_test, y_pred=rfc_pred)print('dtc_en_score 模型综合评估矩阵如下:\n',dtc_en_score)print('dtc_gn_score 模型综合评估矩阵如下:\n',dtc_gn_score)print('dtc_rf_score 模型综合评估矩阵如下:\n',dtc_rf_score)from  sklearn.tree import export_graphvizimport numpy as np

data_feature_name = data.columns[:-1]#数据列名data_target_name = np.unique(data[data.columns[-1]])#分类列数据类别名#信息熵/gini系数模型生成dot文件with open("F:\\kettle\\tbsales\\pyhon_seana\\testresult\\dtc_en_iristree.dot", 'w') as f:
    f = export_graphviz(dtc_en, feature_names=data_feature_name,class_names=data_target_name, out_file=f,special_characters=True)with open("F:\\kettle\\tbsales\\pyhon_seana\\testresult\\dtc_gn_iristree.dot", 'w') as f:
    f = export_graphviz(dtc_gn, feature_names=data_feature_name,class_names=data_target_name, out_file=f,special_characters=True)#生成png图片--注意中文会显示框框乱码,代码暂时没找到解决方法,目前含中文分类都用GVEidt打开,外加一句代码(下文)import pydotplus,osfrom IPython.display import Image

os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.37/bin/'dot_tree_en = export_graphviz(dtc_en,out_file=None,feature_names=data_feature_name,class_names=data_target_name,filled=True, rounded=True,special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_tree_en)
img = Image(graph.create_png())
graph.write_png("F:\\kettle\\tbsales\\pyhon_seana\\testresult\\dtc_en.png")#图片中文乱码未解决


运行结果:


dtc_en_score 模型综合评估矩阵如下:
                  precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00         9
Iris-versicolor       1.00      1.00      1.00         9
 Iris-virginica       1.00      1.00      1.00        12
    avg / total       1.00      1.00      1.00        30


dtc_gn_score 模型综合评估矩阵如下:
                  precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00         9
Iris-versicolor       1.00      1.00      1.00         9
 Iris-virginica       1.00      1.00      1.00        12
    avg / total       1.00      1.00      1.00        30


dtc_rf_score 模型综合评估矩阵如下:
                  precision    recall  f1-score   support

    Iris-setosa       1.00      1.00      1.00         9
Iris-versicolor       1.00      0.89      0.94         9
 Iris-virginica       0.92      1.00      0.96        12
    avg / total       0.97      0.97      0.97        30

决策树-此处只生成熵生成的图片,gini系数生成树状相同,只是里面熵值换成了gini值。


dot文件的处理:

1、安装Graphviz----地址:https://graphviz.gitlab.io/_pages/Download/Download_windows.html   graphviz-2.38.msi 

    我是Windows版本,zip包直接解压不需要安装,但我是没有找到GVEdit,安装mis后缀文件就直接所有程序很快找到。


2、打开文件,一般选择打开文件即自动生成决策树,当代码修改后点击小人可以生成决策树。



3、决策树中文乱码的情况---目前个人试过pdf或者是png或者dot文件,含有中文分类标签的乱码成框框,可能经验太少,目前只发现一种解决的办法,就是GVEdit里面打开,加一行代码~~

中文乱码:


添加代码:node[fontname = "PMingLiu"];


png以及pdf文件乱码尚未解决~要是大神路过求指教~~~

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消