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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 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)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4天前
|
人工智能 测试技术 数据处理
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
57 11
|
8天前
|
API Python
python泛微e9接口开发
通过POST请求向指定IP的API注册设备以获取`secrit`和`spk`。请求需包含`appid`、`loginid`、`pwd`等头信息。响应中包含状态码、消息及`secrit`(注意拼写)、`secret`和`spk`字段。示例代码使用`curl`命令发送请求,成功后返回相关信息。
30 5
|
1月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
56 7
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
111 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
1月前
|
存储 分布式计算 算法
企业级推荐开发平台 PAI-Rec
本文介绍了企业推荐系统的关键技术和解决方案。主要内容分为四部分:1) 推荐系统面临的挑战,如数据治理和算法优化;2) 提高开发效率的解决方案,通过配置化和自动化减少重复工作;3) 高性能推荐算法和推理服务,包括GPU优化和特征组合;4) 高效特征管理平台PAI FeatureStore,支持离线和实时特征处理。文中还提到了EasyRecTorch框架,用于加速训练和推理,并分享了如何通过这些工具提升推荐系统的性能和降低成本。
|
1月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
41 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
2月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
333 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
2月前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
32 5
|
2月前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
167 5

热门文章

最新文章

推荐镜像

更多