# -*- coding: utf-8 -*-
'''
Created on 2018年1月15日
@author: Jason.F
@summary: Scikit-Learn库决策树算法
'''from sklearn import datasets
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from sklearn.ensemble import RandomForestClassifier
#决策边界函数
def plot_decision_regions(X,y,classifier,test_idx=None,resolution=0.02):# 设置标记点和颜色markers = ('s','x','o','^','v')colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')cmap = ListedColormap(colors[:len(np.unique(y))])# 绘制决策面x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution))Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)Z = Z.reshape(xx1.shape)plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)plt.xlim(xx1.min(), xx1.max())plt.ylim(xx2.min(), xx2.max())#绘制所有样本X_test,y_test=X[test_idx,:],y[test_idx]for idx,cl in enumerate(np.unique(y)):plt.scatter(x=X[y==cl,0],y=X[y==cl,1],alpha=0.8,c=cmap(idx),marker=markers[idx],label=cl)#高亮预测样本if test_idx:X_test,y_test =X[test_idx,:],y[test_idx]plt.scatter(X_test[:,0],X_test[:,1],c='',alpha=1.0,linewidths=1,marker='o',s=55,label='test set')
#数据导入
iris=datasets.load_iris()
X=iris.data[:,[2,3]]
y=iris.target
print (np.unique(y))
#训练集和测试集划分
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0)
#标准化
sc=StandardScaler()
sc.fit(X_train)#计算样本的均值和标准差
X_train_std=sc.transform(X_train)
X_test_std=sc.transform(X_test)
#决策树模型,信息增益和纯度(熵、基尼系统、误分类率)
#深度越大,容易产生过拟合,通过剪枝来解决
tree=DecisionTreeClassifier(criterion='entropy',max_depth=3,random_state=0)
tree.fit(X_train_std,y_train)
#随机森林,集成多个弱学习器成鲁棒性强学习器
#参数:n_jobs处理器内核数量,n_estimators集成的单颗决策树数量
#forest=RandomForestClassifier(criterion='entropy',n_estimators=10,n_jobs=2,random_state=1)
#forest.fit(X_train_std,y_train)
#模型预测
y_pred=tree.predict(X_test_std)
print ('Accuracy:%.2f' %accuracy_score(y_test,y_pred))#准确率
#绘制决策边界
X_combined_std=np.vstack((X_train_std,X_test_std))
y_combined=np.hstack((y_train,y_test))
plot_decision_regions(X=X_combined_std, y=y_combined, classifier=tree, test_idx=range(105,150))
plt.xlabel('petal length[cm]')
plt.ylabel('petal width[cm]')
plt.legend(loc='upper left')
plt.show()
#导出决策树到dot格式
export_graphviz(tree,out_file='tree.dot',feature_names=['petal length','petal width'])
#下载http://www.graphviz.org/download/
#dot转换为png命令:dot -Tpng tree.dot -o tree.png
#windows下安装graphviz参考;http://blog.csdn.net/lanchunhui/article/details/49472949#观察熵、基尼、误分类率对纯度的影响
def gini(p):return p*(1-p)+(1-p)*(1-(1-p))
def entropy(p):return -p*np.log2(p)-(1-p)*np.log2(1-p)
def error(p):return 1-np.max([p,1-p])
x=np.arange(0.0,1.0,0.01)
ent=[entropy(p) if p !=0 else None for p in x]#求熵
sc_ent=[e*0.5 if e else None for e in ent ]#熵缩放
err=[error(i) for i in x]
fig=plt.figure()
ax=plt.subplot(111)
for i,lab,ls,c in zip([ent,sc_ent,gini(x),err],\['Entropy','Entropy(scaled)','Gini Impurity','Misclassification Error'],\['-','-','--','-.'],\['black','lightgray','red','green']):line=ax.plot(x,i,label=lab,linestyle=ls,lw=2,color=c)
ax.legend(loc='upper center',bbox_to_anchor=(0.5,1.15),ncol=3,fancybox=True,shadow=False)
ax.axhline(y=0.5,linewidth=1,color='k',linestyle='--')
ax.axhline(y=1.0,linewidth=1,color='k',linestyle='--')
plt.ylim([0,1.1])
plt.xlabel('p(i=1)')
plt.ylabel('Impurity Index')
plt.show()

决策分类结果:

决策分类GraphViz图:

随机森林结果:

信息增益:熵、基尼、误分类率对纯度的影响:

【Python-ML】SKlearn库决策树(DecisionRegression) 使用相关推荐

  1. ID3决策树 Python实现 + sklearn库决策树模型的应用

    本文介绍机器学习中决策树算法的python实现过程 共介绍两类方法: (1)亲手实习Python ID3决策树经典算法 (2)利用sklearn库实现决策树算法 关于决策树的原理,指路:机器学习 第四 ...

  2. Python安装sklearn库时出现异常:ERROR: Could not install packages due to an EnvironmentError: [Errno 2]

    文章目录 一.问题描述 二.问题解决 一.问题描述 今天在学习python机器学习时,需要安装python的sklearn库,在安装的过程中出现了以下错误 上CSDN上找了好多文章,都没办法解决问题 ...

  3. 利用sklearn库决策树模型对iris数据多分类并进行评估

    1.导入所需要的库 from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris 2.加 ...

  4. 用Python的sklearn库进行PCA(主成分分析)

    在python的sklearn的库里面集成很多机器学习算法的库,其中也包括主成分分析的方法. 1.PCA算法的原理: PCA主要是用来数据降维,将高纬度的特征映射到低维度的特征,加快机器学习的速度.比 ...

  5. python中sklearn实现决策树及模型评估_sklearn实现决策树

    sklearn是一个功能非常强大的工具,可以用几行代码实现丰富的机器学习算法. 本文介绍使用sklearn实现决策树 决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策时演变而来.它是一种使 ...

  6. 每天进步一点点《ML - Sklearn库简单学习》

    一:Sklearn介绍 Sklearn是一个强大的机器学习库,基于python的.官方文档(http://scikit-learn.org/stable/ ).如下列举部分的使用场景. 由图中,可以看 ...

  7. python中sklearn实现决策树及模型评估_Python sklearn决策树算法实践

    scikit-learn简称sklearn,支持包括分类.回归.降维和聚类四大机器学习算法.还包含了特征提取.数据处理和模型评估三大模块.sklearn是Scipy科学计算库的扩展,建立在NumPy和 ...

  8. python中sklearn库更新_python库之sklearn

    一.安装sklearn conda install scikit-learn 参考文献 [1]整体介绍sklearn https://blog.csdn.net/u014248127/article/ ...

  9. Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别

    敲<Python机器学习及实践>上的code的时候,对于数据预处理中涉及到的fit_transform()函数和transform()函数之间的区别很模糊,查阅了很多资料,这里整理一下: ...

最新文章

  1. CAFFE(0):Ubuntu 下安装anaconda2和anaconda3
  2. 关于XML文档操作类
  3. Oralce中日期格式
  4. 那些年我用过的开源软件、框架
  5. linux课堂笔记(7)
  6. 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
  7. Devpress.XtraGrid.GridControl.GridView属性
  8. 搜索算法-广度优先和深度优先搜索
  9. python画柱形图把奇数年份也显示出来_python怎么输出数据中的奇数
  10. Atitit 战略之道 attilax著 v4 r88
  11. Rust: 如何与DLL文件进行交互?
  12. Modelica学习笔记
  13. java 评论功能_博客项目实现文章评论功能(重点是评论回复)
  14. 史上最全echarts可视化图表详解
  15. 遇到【java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter】的解决方案
  16. CityEngine -俯视图
  17. lodop指定打印机打印_lodop和c-lodop临时默认打印机同一任务测试
  18. JVM,堆,栈,方法区之间的关系
  19. 农业虫害识别相关论文——调研整理
  20. jre精简详细教程(附精简工具)

热门文章

  1. [PPOPP 15] PoweSwitch: 基于同步异步切换的分布式大规模图处理系统 学习总结
  2. pycharm 运行celery_在 Pycharm 安装使用black的方法详解
  3. linux系统qt中make安装,Linux系统下Qt的基本安装和配置
  4. python 新建文件 hdfs_大数据学习(六):Python操作hdfs(包括追加数据文件到hdfs文件)...
  5. Docker之镜像、容器、仓库概念
  6. 数据结构之排序算法(C语言)
  7. C#基础(七)虚函数
  8. 【MDCC技术大咖秀】Android内存优化之OOM
  9. Linux下安装Tomcat7
  10. 【Beta阶段】第二次Scrum Meeting!