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决策树算法实践相关推荐

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

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

  2. 分类决策树考虑了经验风险吗_数据挖掘导论 第4章 分类:基本概念、决策树与模型评估...

    第4章 分类:基本概念.决策树与模型评估 分类(classification):分类任务就是通过学习得到一个目标函数(target function)f,把每个属性集x映射到一个余弦定义的类标号y.目 ...

  3. python+sklearn训练决策树分类模型(绘制学习曲线和验证曲线)

    本文所用文件的链接 链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ 提取码:p57s 关于决策树的初级应用,可以看我之前的文章: https:// ...

  4. 机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)

    一.机器学习算法分类: 机器学习算法可分为两大类,即分类与回归.其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级:而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等 ...

  5. 代码chaid_R或Python中的CHAID决策树

    我用SPSS生成了一个CHAID树,它对连续变量进行了自动分类,返回了R的汇总函数中没有的卡方值和自由度,下面是部分样本输出.Node 0 1 Total PC Parent Variable Sig ...

  6. python中的多态和鸭子模型

    多态性 是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent:=Child: 多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执 ...

  7. python决策树原理_Python机器学习决策树算法 | kTWO-个人博客

    ps:这篇文章主要来介绍决策树算法的基本原理和概念.具体的Python应用将在下一篇文章中介绍. 1.什么是决策树? 决策树(decision tree)也叫做判定树,类似于流程图的结构,每个内部的结 ...

  8. python中协程与函数的区别_python 协程与go协程的区别

    进程.线程和协程 进程的定义: 进程,是计算机中已运行程序的实体.程序本身只是指令.数据及其组织形式的描述,进程才是程序的真正运行实例. 线程的定义: 操作系统能够进行运算调度的最小单位.它被包含在进 ...

  9. python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用

    正文共:30429 字 预计阅读时间:76分钟 原文链接:https://realpython.com/python-type-checking/ 作者:Geir Arne Hjelle 译者:陈祥安 ...

最新文章

  1. 怎样才算世界一流大学
  2. Digit Sum II( ABC044ARC060)
  3. noip2017考前整理(未完)
  4. Safari browser and asp.net Menu control (asp:Menu)
  5. revit模型怎么在手机上看_沙盘模型应该怎么看?一定要警惕这些问题
  6. 小米POCO X3今日亮相:首发骁龙732G后置6400万四摄
  7. [大学回忆录-思想]再谈我的专业技能
  8. ADO.NET的几大对象详解
  9. python工资一般多少西安-Python面试经验分享——西安贝业思数据
  10. pyspark —— spark dataframe 从hdfs读写文件
  11. 网络编程学习路线计划
  12. C++笔记(《C++新经典》)
  13. 最好用最清爽的json在线编辑器
  14. Java程序员的职业规划是什么?叩丁狼的建议
  15. 图像颜色空间转换--RGB to Lαβ
  16. word中如何将所有一级标题统一格式(转载)
  17. Thinking in Java 中闪耀的星星(四)
  18. 速卖帮AI点餐流程 AI菜品识别结账
  19. 程序员遇到人生低谷期怎么做?
  20. 爱了,阿里P8纯手码出489页SQL优化手册,附笔记源码

热门文章

  1. 中文语音评测之thchs30+gop_speechocean762实现
  2. 我的机器学习支线「模型复杂度」
  3. ASP.NET Core与ASP.NET区别
  4. ABTest流量分发和业界的一些经验
  5. iOS-音频 + 视频
  6. linux 命令:ps 详解
  7. SISD、MIMD、SIMD、MISD_设计失控
  8. 图片大小如何调整到10k?图片压缩到指定大小怎么弄?
  9. 第四届高教杯计算机绘图教程,第三届“高教杯”机械类计算机绘图试卷(三维).pdf...
  10. 重磅 | Hinton、LeCun、Bengio联合署名深度学习综述,《Nature》纪念人工智能60周年专题...