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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 深入理解机器学习并完全看懂sklearn文档,需要较深厚的理论基础。但是,要将sklearn应用于实际的项目中,只需要对机器学习理论有一个基本的掌握,就可以直接调用其API来完成各种机器学习问题。本文选自《全栈数据之门》,将向你介绍通过三个步骤来解决具体的机器学习问题。

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

sklearn介绍

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

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

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

数据预处理

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

%pyspark

from sklearn.datasets import load_iris
from 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。
  其执行结果如下图所示。
【图2】

建模与预测

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

%pyspark

from 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模型,会输出其用于构建的参数,也可以打印出预测的前三个值,如下图所示。
【图3】
  在上面的建模与预测过程中,sklearn的这种简洁API方式已经成为现代机器学习库争相模仿的对象,就连Spark的ML库,也在学习这种简洁的方式,可以说几乎已经成为大众接受的标准方式了。

模型评估

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

%pyspark

from 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的评估,其结果如下图所示。
【图4】

模型持久化

  辛辛苦苦训练好一个模型后,总希望后面可以直接使用,此时就必须要对模型进行持久化操作了。模型本身就是一个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算法吓到了,过不了三天就从入门到放弃了。
  作为应用型的机器学习,能达到第三阶段固然好,但在实际应用中,建议能调用现有的库就直接调用好了。不理解的地方,能看懂源码最好。不太建议自己从头实现,除非能力确实够了,否则写出来的代码并不能保证性能与准确性。
  当然,从另外一个角度来说,尤其是在分布式环境下,机器学习还有另外三个层次,想知道的话,请见《全栈数据之门》一书。
  本文选自《全栈数据之门》,点此链接可在博文视点官网查看此书。
                    图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                       图片描述

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
10天前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
51 15
|
22天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
120 45
|
17天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
41 3
如何使用Python开发API接口?
|
9天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
24 1
|
10天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
35 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
13天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
28 2
|
15天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
32 1
|
15天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
39 1
|
15天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
22天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
73 7
下一篇
无影云桌面