python中sklearn实现决策树及模型评估_Python sklearn决策树算法实践
scikit-learn简称sklearn,支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。sklearn是Scipy科学计算库的扩展,建立在NumPy和matplotlib库的基础上。利用这几大模块的优势,可以大大提高机器学习的效率。
Scikit-learn项目最早由数据科学家 David Cournapeau 在 2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。
在Windows环境中,sklearn 需要在安装 numpy+mkl 和scipy 之后才可以安装,安装过程如下。
首先,下载Python scikit-learn,Windows版下载网站地址为:https://www.lfd.uci.edu/~gohlke/pythonlibs/,链接为scikit_learn‑0.19.1‑cp36‑cp36m‑win_amd64.whl。
安装操作如下:
D:\Python\Python36\Tools>pip install d:\python\scikit_learn-0.19.1-cp36-cp36m-win_amd64.whl
Processing d:\python\scikit_learn-0.19.1-cp36-cp36m-win_amd64.whl
Installing collected packages: scikit-learn
Successfully installed scikit-learn-0.19.1
以抽油机杆断脱工况为例,通过功图标准化数据集与该井理论功图库进行分类对比,确定抽油杆断脱对应特征。功图变窄用实测功图载荷差与理论功图载荷差的比值来表征;最大载荷偏离用(实测最大载荷-理论最小载荷)/理论功图载荷差来表征。
利用历史数据,给出抽油杆断脱的分类标识(断脱为1,非断脱为0),形成训练集。通过对大量抽油杆断脱井及非断脱井的宽窄偏离程度统计对比分析,确定断脱条件为T1(宽窄程度)小于74.5、T2(偏离程度)小于47.1,见下表:
油井
T1
T2
检泵原因
油井1
34.27258806
47.09825638
1
油井2
44.91577335
42.38897397
1
油井3
39.60183767
40.47473201
1
油井4
17.28699552
0
1
油井5
74.50145262
37.39663093
1
油井6
178.089172
131.0509554
0
油井7
177.4840764
129.9681529
0
油井8
182.0063694
133.9171975
0
油井9
178.8535032
133.4713376
0
油井10
180.6369427
135.2866242
0
利用决策树建立抽油杆断脱工况诊断模型。实测示功图经标准化处理提取特征信息,如果为错误功图则直接输出诊断结果,否则到达下一节点,进行断脱属性测试。此处节点分类权值为上一阶段训练集得出结果,如果符合断脱条件则输出诊断结果,不符合则继续进行其他工况诊断。如果准确率达不到期望值,可以重新调整特征信息。决策树部分示例代码如下:
import numpy as np
import scipy as sp
from sklearn import tree
from sklearn.cross_validation import train_test_split
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import classification_report
def main():
data = []
lable= []
with open("decisiontree.txt") as ifile:
for line in ifile:
tmp = line.strip().split(' ')
tmp1=[]
for i in range(0,len(tmp)-1):
tmp1.append(float(tmp[i]))
data.append(tmp1)
lable.append(float(tmp[len(tmp)-1]))
x = np.array(data)
y = np.array(lable)
''''' 拆分训练数据与测试数据 '''
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2)
''''' 使用信息熵作为划分标准,对决策树进行训练 '''
clf = tree.DecisionTreeClassifier(criterion='entropy')
print(clf)
clf.fit(x_train, y_train)
''''' 把决策树结构写入文件 '''
with open("tree.dot", 'w') as f:
f = tree.export_graphviz(clf, out_file=f)
''''' 系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大 '''
print(clf.feature_importances_)
'''''测试结果的打印'''
answer = clf.predict(x_train)
print(x_train)
print(answer)
print(y_train)
print(np.mean( answer == y_train))
'''''准确率与召回率'''
precision, recall, thresholds = precision_recall_curve(y_train, clf.predict(x_train))
answer = clf.predict_proba(x)[:,1]
print(classification_report(y, answer, target_names = ['yes', 'no']))
if __name__ == '__main__':
main()
决策树的结构写入了tree.dot中,决策树结构如下(采用80%为训练数据,8条的结果,与引用文档所描述结果不一致):
digraph Tree {
node [shape=box] ;
0 [label="X[0] <= 125.993\nentropy =0.954\nsamples =8\nvalue =[3, 5]"] ;
1 [label="entropy = 0.0\nsamples =5\nvalue =[0, 5]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="entropy = 0.0\nsamples =3\nvalue =[3, 0]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
}
转化为决策树图形为:
运行程序结果如下,供参考:
DecisionTreeClassifier(class_weight=None, criterion='entropy', max_depth=None,
max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort=False, random_state=None,
splitter='best')
[1. 0.]
[[ 74.50145262 37.39663093] [178.8535032 133.4713376 ] [ 17.28699552 0. ] [182.0063694 133.9171975 ] [ 34.27258806 47.09825638] [ 44.91577335 42.38897397] [ 39.60183767 40.47473201] [177.4840764 129.9681529 ]]
[1. 0. 1. 0. 1. 1. 1. 0.]
[1. 0. 1. 0. 1. 1. 1. 0.]
1.0
precision recall f1-score support
yes 1.00 1.00 1.00 5
no 1.00 1.00 1.00 5
avg / total 1.00 1.00 1.00 10
由于本人水平有限,欢迎读者反馈。
参考:
1. 薛良玉,付国庆,蔡俊,等․ 油井生产工况诊断及智能预警. 2018年中国石油石化企业信息技术论文集 156-161
2. 用Python开始机器学习(2:决策树分类算法) CSDN博客 lsldd的专栏 2014年11月
3. Python科学计算初探——余弦相似度 CSDN博客 肖永威 2018年4月
python中sklearn实现决策树及模型评估_Python sklearn决策树算法实践相关推荐
- python中sklearn实现决策树及模型评估_sklearn实现决策树
sklearn是一个功能非常强大的工具,可以用几行代码实现丰富的机器学习算法. 本文介绍使用sklearn实现决策树 决策树是经典的机器学习算法,很多复杂的机器学习算法都是由决策时演变而来.它是一种使 ...
- 分类决策树考虑了经验风险吗_数据挖掘导论 第4章 分类:基本概念、决策树与模型评估...
第4章 分类:基本概念.决策树与模型评估 分类(classification):分类任务就是通过学习得到一个目标函数(target function)f,把每个属性集x映射到一个余弦定义的类标号y.目 ...
- python+sklearn训练决策树分类模型(绘制学习曲线和验证曲线)
本文所用文件的链接 链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ 提取码:p57s 关于决策树的初级应用,可以看我之前的文章: https:// ...
- 机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)
一.机器学习算法分类: 机器学习算法可分为两大类,即分类与回归.其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级:而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等 ...
- 代码chaid_R或Python中的CHAID决策树
我用SPSS生成了一个CHAID树,它对连续变量进行了自动分类,返回了R的汇总函数中没有的卡方值和自由度,下面是部分样本输出.Node 0 1 Total PC Parent Variable Sig ...
- python中的多态和鸭子模型
多态性 是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent:=Child: 多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执 ...
- python决策树原理_Python机器学习决策树算法 | kTWO-个人博客
ps:这篇文章主要来介绍决策树算法的基本原理和概念.具体的Python应用将在下一篇文章中介绍. 1.什么是决策树? 决策树(decision tree)也叫做判定树,类似于流程图的结构,每个内部的结 ...
- python中协程与函数的区别_python 协程与go协程的区别
进程.线程和协程 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定义: 操作系统能够进行运算调度的最小单位.它被包含在进 ...
- python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用
正文共:30429 字 预计阅读时间:76分钟 原文链接:https://realpython.com/python-type-checking/ 作者:Geir Arne Hjelle 译者:陈祥安 ...
最新文章
- 怎样才算世界一流大学
- Digit Sum II(	ABC044ARC060)
- noip2017考前整理(未完)
- Safari browser and asp.net Menu control (asp:Menu)
- revit模型怎么在手机上看_沙盘模型应该怎么看?一定要警惕这些问题
- 小米POCO X3今日亮相:首发骁龙732G后置6400万四摄
- [大学回忆录-思想]再谈我的专业技能
- ADO.NET的几大对象详解
- python工资一般多少西安-Python面试经验分享——西安贝业思数据
- pyspark —— spark dataframe 从hdfs读写文件
- 网络编程学习路线计划
- C++笔记(《C++新经典》)
- 最好用最清爽的json在线编辑器
- Java程序员的职业规划是什么?叩丁狼的建议
- 图像颜色空间转换--RGB to Lαβ
- word中如何将所有一级标题统一格式(转载)
- Thinking in Java 中闪耀的星星(四)
- 速卖帮AI点餐流程 AI菜品识别结账
- 程序员遇到人生低谷期怎么做?
- 爱了,阿里P8纯手码出489页SQL优化手册,附笔记源码
热门文章
- 中文语音评测之thchs30+gop_speechocean762实现
- 我的机器学习支线「模型复杂度」
- ASP.NET Core与ASP.NET区别
- ABTest流量分发和业界的一些经验
- iOS-音频 + 视频
- linux 命令:ps 详解
- SISD、MIMD、SIMD、MISD_设计失控
- 图片大小如何调整到10k?图片压缩到指定大小怎么弄?
- 第四届高教杯计算机绘图教程,第三届“高教杯”机械类计算机绘图试卷(三维).pdf...
- 重磅 | Hinton、LeCun、Bengio联合署名深度学习综述,《Nature》纪念人工智能60周年专题...