sklearn:Python语言开发的通用机器学习库

引言:深入理解机器学习并完全看懂sklearn文档,需要较深厚的理论基础。但是,要将sklearn应用于实际的项目中,只需要对机器学习理论有一个基本的掌握,就可以直接调用其API来完成各种机器学习问题。
本文选自《全栈数据之门》,将向你介绍通过三个步骤来解决具体的机器学习问题。

sklearn介绍

  scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了。其完善之处不仅在于实现的算法多,还包括大量详尽的文档和示例。其文档写得通俗易懂,完全可以当成机器学习的教程来学习。
  如果要说sklearn文档的重要性,个人觉得,应该可以与佛经中的《金刚经》相比。如果能将其当成《金刚经》一样来阅读,你的机器学习水平一定会有质的提升。
  一般初阅佛经,肯定会被其中的一些名词弄糊涂,就像初次阅读sklearn的文档一样,会被诸如training data、testing data、model select、cross validation等这样的词汇弄糊涂。但实际上,只要肯用心读,把这些基础概念弄明白,后续学习就比较容易了。sklearn必须要结合机器学习的一些基础理论来理解,就像佛经必须要结合一些佛法基础理论来理解一样。
  既然是通用的机器学习库,sklearn中包含了大量常用的算法。正如其介绍一样,基本功能主要分为6个部分:分类、回归、聚类、数据降维、模型选择与数据预处理,如下图所示。

  要深入理解机器学习,并且完全看懂sklearn的文档,需要较深厚的理论基础。但是,要将sklearn应用于实际的项目中,却并不需要特别多的理论知识,只需要对机器学习理论有一个基本的掌握,就可以直接调用其API来完成各种机器学习问题。
对于具体的机器学习问题,通常可以分为三个步骤:

  • 数据准备与预处理
  • 模型选择与训练
  • 模型验证与参数调优

下面就通过一个具体的示例来介绍这三个步骤。

数据预处理

  在这个示例中,使用sklearn自带的Iris数据来做演示,而算法使用kNN来进行分类,要了解kNN算法的详细信息,请参考“近朱者赤,相亲kNN”一节。
  使用load_iris方法,加载Iris数据。Iris是一个非常有名的公共数据集,描述了鸢尾花的三种不同的子类别,共有4个特征,分别为花萼的长度与宽度,花瓣的长度与宽度。可以不用关注具体分哪三类,只需要知道在数据中类标签分别用0、1、2表示即可。
  加载数据的代码如下:

%pysparkfrom sklearn.datasets import load_irisfrom sklearn.cross_validation import train_test_split# 加载数据iris = load_iris()
data_X = iris.data
data_y = iris.target# 数据维度、特征与目标值的前3项print(‘data:‘, data_X.shape, data_y.shape)print(‘features:‘, data_X[:3, :])print(‘target:‘, data_y[:3])# 数据切分train_X, test_X, train_y, test_y = train_test_split(data_X, 
data_y, test_size=0.2)# 训练数据与测试数据的维度print(‘train:‘, train_X.shape, train_y.shape)print(‘test: ‘, test_X.shape, test_y.shape)

  将数据的特征加载为data_X,将类别标签加载为data_y,一般的命名习惯是,使用大写的X表示特征是多维的,而用小写的y表示目标值为1维。不同的命名习惯,比较符合人类以貌取人的特点,程序员不仅是人,更是聪明的人,因此也有这样的习惯。
  加载完数据,使用sklearn自带的train_test_split方法将数据按0.8与0.2的比例进行划分,切分为训练数据train与测试数据test,并将特征与目标值分别命名为train_X、train_y与test_X、test_y。
  其执行结果如下图所示。

建模与预测

  准备好数据后,就可以从neighbors近邻类中导入kNN分类算法了,其代码如下所示:

%pysparkfrom sklearn.neighbors import KNeighborsClassifier# 构建knn模型knn = KNeighborsClassifier(n_neighbors=3, n_jobs=-1)# 拟合数据knn.fit(train_X, train_y)# 预测preds = knn.predict(test_X)print(‘knn model:‘, knn)print(‘First 3 pred:‘,preds[:3])

  通过使用两个自定义参数n_neighbors(参考的近邻数)与n_jobs(使用的CPU核数)来导入KNeighborsClassifier模型,这样就生成了一个knn的模型。n_neighbors是knn中最重要的参数,可以通过交叉验证来设置一个合理的值。而n_jobs是sklearn中所有支持并行的算法都会支持的参数,sklearn中有很多算法都可以将单台机器的全部CPU进行并行运算,设置为-1即是使用机器的全部CPU核,也可以设置成具体的数字值。
  接着使用fit方法在训练数据上进行拟合,kNN是一个有监督的学习算法,因此在拟合数据的时候,需要将已知的类别标签train_y与特征train_X一起输入到模型中进行数据拟合。
  模型在训练数据上完成了拟合,便可以对测试数据进行预测了,使用predict方法来对测试的特征进行预测。因为是使用特征来预测其类别,此处自然不能传入测试数据的类别标签数据test_y,这个数据是在后面对模型进行评估时使用的。打印knn模型,会输出其用于构建的参数,也可以打印出预测的前三个值,如下图所示。

  在上面的建模与预测过程中,sklearn的这种简洁API方式已经成为现代机器学习库争相模仿的对象,就连Spark的ML库,也在学习这种简洁的方式,可以说几乎已经成为大众接受的标准方式了。

模型评估

  评估一个模型的好坏是机器学习中非常重要的任务。否则,无法评价模型的好坏,也就无法更好地优化模型。归根到底,所有的机器学习算法都是一堆数学运算,其预测的值与标准的值是可以进行数学上的对比的。在这一点上,与教育中所用的考试分数来评估一个人的能力不一样,也与公司中所用的KPI来考核一个人对公司的贡献是不一样的。
  在分类算法中,通常的评价指标有精确率、召回率与F1-Score等几种。
  前面构建的knn模型,本身也有一个score方法,可以对模型的好坏做一个初步评估,其使用的指标为F1-Score。当然,也可以使用sklearn中提供的更多的评价指标来评估模型。其代码如下所示:

%pysparkfrom pprint import pprint

# 使用测试的特征与测试的目标值print(knn.score(test_X, test_y))from sklearn.metrics import precision_recall_fscore_support

# 打印出三个指标scores = precision_recall_fscore_support(test_y, preds)
pprint(scores)

  对每个类别的数据都进行了精确率、召回率与F-beta Score的评估,其结果如下图所示。

模型持久化

  辛辛苦苦训练好一个模型后,总希望后面可以直接使用,此时就必须要对模型进行持久化操作了。模型本身就是一个Python的对象,可以使用pickle的方式将模型转储到文件,但sklearn推荐使用其joblib接口,保存与加载模型都非常简单:

import joblib# 保存模型joblib.dump(model, ‘/tmp/model.pkl‘)# 加载模型model = joblib.load(‘/tmp/model.pkl‘)

三个层次

  前面已经演示了一个完整的使用sklearn来解决实际问题的例子,可以发现,如果只是调用sklearn的API,确实不需要太复杂的理论知识。在学完上面的示例后,你或许都并不清楚kNN算法是如何工作的,但学习是分层次的。
  也许有的人认为,只会调用API来实现,并不是真正会用机器学习了。确实,不理解kNN算法,就不清楚如何进行算法的参数调优。但个人认为,从sklearn入门机器学习是最好的途径,尽管你以前完全没有接触过机器学习。
  我所理解的,学习机器学习算法的三个层次如下所述。

  1. 调用:知道算法的基本思想,能应用现有的库来做测试。简单说,就是了解kNN是做什么的,会调用sklearn中的kNN算法。
  2. 调参:知道算法的主要影响参数,能进行参数调节优化。
  3. 嚼透:理解算法的实现细节,并且能用代码实现出来。

上面三个层次是不是很押韵呢,但不幸的是,有的人一上来就想达到第三个层次,于是刚开始就被如何实现kNN算法吓到了,过不了三天就从入门到放弃了。
  作为应用型的机器学习,能达到第三阶段固然好,但在实际应用中,建议能调用现有的库就直接调用好了。不理解的地方,能看懂源码最好。不太建议自己从头实现,除非能力确实够了,否则写出来的代码并不能保证性能与准确性。
  当然,从另外一个角度来说,尤其是在分布式环境下,机器学习还有另外三个层次,想知道的话,请见《全栈数据之门》一书。
  本文选自《全栈数据之门》,点此链接可在博文视点官网查看此书。
                    
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       

时间: 2024-10-11 17:27:59

sklearn:Python语言开发的通用机器学习库的相关文章

使用L脚本语言开发一个XML访问库

XML目前是应用最广泛的数据交换格式 那么我们就来使用L脚本语言开发一个XML访问库 下面这个脚本文件是一个简单的XML文件访问库,它能够生成简单的XML文件 #scplib 定义:类,XML文件 开始:类,XML文件 定义:字符串,XML文件头 定义:字符串,文件体 定义:字符串,开始标签,"<" 定义:字符串,行结束标签,"/>" 定义:字符串,结束标签,">" 定义:字符串,段落结束标签 定义:函数,插入文件头,文件头 开

Python语言开发环境之Spyder

https://blog.csdn.net/qq_34706955/article/details/80807091 Spyder(Scientific PYthon Development EnviRonment)是一个强大的交互式 Python 语言开发环境. 它有一个Editor(编辑器)用于编写代码:Console(控制台)可以评估代码并且在任何时候都可以看到运行结果:Variable Explorer(变量管理器)可以查看代码中定义的变量.还有其他的一些设备可以帮你高效地开发代码. I

Python语言web自动化通用脚本

web自动化脚本中有一部分代码是可以借鉴的,我们只需要将这个框架移植到当前项目中,修改部分参数即可.比如日志类.driver对象.元素基本操作等. 以商城项目为例,以下就是相关代码. base包(内含日志.driver对象.页面元素操作): 页面元素操作(base.py): import timefrom time import sleep import pagefrom selenium.webdriver.support.wait import WebDriverWaitfrom base.

Python机器学习库scikit-learn实践

原文:http://blog.csdn.net/zouxy09/article/details/48903179 一.概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出.当然了,算法之林虽大,但能者还是有限,能适应某些环境并取得较好效果的算法会脱颖而出,而表现平平者则被历史所淡忘.随着机器学习社区的发展和实践验证,这群脱颖而出者也逐渐被人所认可和青睐,同时获得了更多社区力量的支持.改进和推广. 以

【Python学习一】在OSX系统下搭建Python语言集成开发环境

Python是一门简单易学,功能强大的编程语言.它具有高效的高级数据结构和简单而有效的面向对象编程方法.Python优雅的语法和动态类型以及其解释性的性质,使它在许多领域和大多数平台成为编写脚本和快速应用程序开发的理想语言. 下面介绍如何在OSX下安装Python语言集成开发环境.主要分为2过步骤 一.下载安装 首先进入https://www.jetbrains.com/网站,Jetbrains是一家国外的公司,听说他们开发了很多很棒的ide. 找的Pycharm. PyCharm是一种Pyth

python语言概述

python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 学习编程语言有一个惯例,即运行最简单的Hello程序,该程序功能是在屏幕上打印输出"Hello World".程序虽小,但却是初学者接触编程语言的第一步.使用python语言编写Hello程序只有一行代码,如下; print ("Hello World") python

Python语言的特点及自学建议

Python语言的特点Python语言是一种被广泛使用的高级通用脚本编程语言,具有很多区别于其他语言的特点,这里仅列出如下一些重要特点.(1)语法简洁:实现相同功能,Python语言的代码行数仅相当于其他语言的1/10~1/5.(2)与平台无关:作为脚本语言,Python程序可以在任何安装解释器的计算机环境中执行,因此,用该语言编写的程序可以不经修改地实现跨平台运行.(3)粘性扩展:Python语言具有优异的扩展性,体现在它可以集成C.C++.Java等语言编写的代码,通过接口和函数库等方式将它

python集成开发环境PyCharm5.04注册以及简单使用

PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完 成.单元测试.版本控制.此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发. 安装: 去官网下载pycharm专业版 注册方法1: 安装   调整时间到2038年.   申请30天试用   退出pycharm   时间调整回来. 注册方法2: 在注册时选择 License server ,填

Python语言下的机器学习库

Python是最好的编程语言之一,在科学计算中用途广泛:计算机视觉.人工智能.数学.天文等.它同样适用于机器学习也是意料之中的事. 当然,它也有些缺点:其中一个是工具和库过于分散.如果你是拥有unix思维(unix-minded)的人,你会觉得每个工具只做一件事并且把它做好是非常方便的.但是你也需要知道不同库和工具的优缺点,这样在构建系统时才能做出合理的决策.工具本身不能改善系统或产品,但是使用正确的工具,我们可以工作得更高效,生产率更高.因此了解正确的工具,对你的工作领域是非常重要的. 这篇文