导读:工欲善其事,必先利其器,机器学习也不例外。算法原理理解得再清楚,最终也需要通过编写代码来真正实现功能和解决问题。
本文将介绍当前机器学习主流的编程语言环境,当前机器学习使用最多的编程语言是Python,在业界口碑一直不错的Python语言借着机器学习的东风一下跻身编程语言热门榜的首位。
本文还将介绍Python语言下机器学习相关的支持库,包括科学计算支持库Numpy、机器学习库Scikit-Learn和数据处理库 Pandas。想要在实际工作中使用机器学习解决具体问题时,使用这些支持库将大大提升效率。
作者:莫凡
来源:大数据DT(ID:hzdashuju)
01 常用环境
一般来说,算法理论的实践方式有两种,一种是自己动手将算法用代码都实现一遍,另一种则是充分利用工具的便利性,快速了解掌握现有资源后,随即开始着手解决现实问题。
对于要不要重复造轮子的争论,我想是很难有决断的,两种方法各有利弊,这里我们选用第二种,这也贯彻了本文的宗旨:不是为了学习知识而制造知识,而是为了解决问题去学习知识。
机器学习经过这几年的高速发展,已经积累了非常丰富的开放资源,通过充分利用这些资源,哪怕此前你对这个领域不了解,也能快速掌握并着手解决实际问题。
首先是编程语言,我们选择Python。在前些年,Python和R语言在机器学习领域保持着双雄并立的局面,大致可以认为工业界偏爱Python而学术界偏爱R,但随着技术发展,特别是这几年深度学习所需的支持库毫无例外地都选择了用Python实现之后,Python语言已经成为机器学习领域毫无疑问的“老大”。
由于机器学习的火热,Python甚至拥有了与传统编程语言C和Java一较高下的底气,在多种编程语言排行榜上都大有后来居上的趋势。那么Python,决定就是你了!
接下来是支持库Numpy。机器学习涉及矩阵运算等大量数学运算,好在Python有两大特点,一是灵活,二是库多,Numpy就是Python中专门设计用于科学计算的专业支持库,在业界有口皆碑。不只是机器学习,其他科学领域譬如天体物理涉及的数学运算,要么直接使用Numpy,要么基于Numpy构建更高层的功能库。
最后是算法库Scikit-Learn。基于Python的机器学习算法库实际上有很多,每过一段时间就会冒出个“前五”“前十”这样的排行,但稳坐榜首的一直是Scikit-Learn。
它不但种类齐备,市面上见得到的机器学习算法基本上都能在此找到对应的API,简直是一家“机器学习算法超市”,而且封装良好、结构清晰,你可以通过简单几行代码就能完成一个复杂算法的调用,是机器学习领域入门的福音,更是进阶的法宝。
另外再加上一个Pandas数据处理库。它内置许多排序、统计之类的实用功能,属于“没它也不是不行,但有它会方便很多”的角色。业界实现机器学习,基本上都会用到Numpy、Scikit-Learn和Pandas这三件套。
02 Python简介
Python是一种动态的高级编程语言,与C和Java需要编译执行不同,Python代码是通过解释器解释执行,一个明显的区别是,Python的数据类型不用事先声明,语法更为灵活多变,代码看起来也更加简洁,用C和Java需要十行代码才能写明白的意思,可能用Python写一行就可以了。
高效快速是Python引以为傲的特点,Python社区甚至流传一句口号:“Life is short, I use Python.”
Python仍在不断迭代,而且并不向前兼容,这也导致当前Python分裂成两大版本分支,即Python 2.X和Python 3.X,虽然从语法上看还不至于成为两款语言,但二者代码是无法混用的,对于版本的选择也是开始学习使用Python时所要确定的第一件事。
之前一般认为,Python 2.X的发展时间更长,各方面的支持库更多且更成熟,不少人推荐从这个版本入手。但随着Python团队宣布将于2020年停止对Python 2.X的维护,各大社区都早已开始了从2.X向3.X迁移的工作,所以现在开始学Python的话更建议选择3.X。Python官网见图2-1。
▲图2-1 Python官网首页
1. Python的安装
Python具有很强的泛用性,支持Windows、Linux/UNIX、Mac OS X等主流操作系统平台,安装也很简单,可以通过
https://www.python.org/downloads
选择你使用的操作系统平台所对应的在线或离线安装包并进行安装。在安装包下载页面同时提供了多个版本的Python安装包,如果初次接触可能让你觉得难以选择。不过请放心,你也可以直接下载最新版本的Python安装包。
▲图2-2 Python下载页面
Python是一款开源编程语言,你也可以选择通过源代码进行编译安装。
2. Python的基本用法
Python是一款通用编程语言,语法满足图灵完备性,这里无法完全展开说明。
不过,如果你熟悉C或者Java语言,那么可以认为Python的语法就是它们的高度精简版,除了上面提到的不用进行类型声明外,Python还少了用来表示作用域的大括号以及语句结尾的分号,但同时,在Python中缩进不仅仅是代码规范,而是语法层面的强制要求。
如果你有语言基础,记住这些区别,应该就能很快熟练地使用Python。
这里仅对两项常用的Python工具进行说明,即Python库安装工具Pip和Conda。丰富的第三方支持库是Python功能强大的原因之一。在使用Python实现功能时,往往需要依赖第三方支持库,这些第三方库需要先安装再使用。安装方法是通过Pip或Conda工具,在命令行输入命令:
代码语言:javascript复制pip install 库名
或
代码语言:javascript复制conda 库名
进行联网下载并自动安装。
一般当你成功安装Python后,就能在命令行中直接使用Pip命令了,而Conda则可能需要额外进行安装才能够使用。Conda的功能更为强大,但如果你并不了解Python及相关背景知识,推荐通过Pip工具来下载安装第三方库。
在库的使用方面,Python也与其他编程语言一样,需要先导入再使用,语法是:
代码语言:javascript复制import 库名
import之后就能正常使用库的资源了。如果库名较长,还可以使用:
代码语言:javascript复制import 库名 as 别名
设定别名之后,通过别名也能够使用库的资源。
要使用库里的某个类,可以通过“库名.类名”的方法调用。如果认为这样写麻烦,或者导致单行语句太长,可以在导入时使用:
代码语言:javascript复制from 库名 import 类名
这样就可以在代码中直接使用类名了。
03 Numpy简介
Numpy是Python语言的科学计算支持库,提供了线性代数、傅里叶变换等非常有用的数学工具。Numpy是Python圈子里非常知名的基础库,即使你并不直接进行科学计算,但如图像处理等相关功能库,其底层实现仍需要数学工具进行支持,则需要首先安装Numpy库。Numpy官网见图2-3。
▲图2-3 Numpy官网首页
1. Numpy的安装
Numpy的安装很简单,使用Pip直接安装即可。命令如下:
代码语言:javascript复制pip install -U numpy
2. Numpy的基本用法
Numpy拥有强大的科学计算功能,也许刚一接触容易眼花缭乱,不知从何入手。不过不必担心,Array数据类型是Numpy的核心数据结构,与Python的List类型相似,但功能要强大得多。Numpy相关功能都是围绕着Array类型建设的,可以作为你了解Numpy的一条中心线索。
使用Numpy包很简单,只要用import导入即可。业界习惯在导入时使用“np”作为它的别名:
代码语言:javascript复制import numpy as np
导入后就可以使用了,常用功能如下。
- array 数据创建 创建Array类型数据
- zeros 数据创建 创建值为0的Array类型数据
- ones 数据创建 创建值为1的Array类型数据
- eye 数据创建 创建单位矩阵
- arange 数据创建 类似内置函数range,生成等差数值
- linspace 数据创建 生成可指定是否包含终值的等差数值
- random.rand 数据创建 随机生成数值
- T 数据操作 转置操作
- reshape 数据操作 不改变原数据的维度变换
- resize 数据操作 修改原数据的维度变换
- mean 统计操作 取均值
- sum 统计操作 求和
- max 统计操作 取最大值
- min 统计操作 取最小值
- var 统计操作 求方差
- std 统计操作 求标准差
- corrcoef 统计操作 计算相关系数
- append 数据操作 新增
- insert 数据操作 插入
- delete 数据操作 删除
- concatenate 数据操作 按行(列)连接数据表
- add 数学运算 标(向)量加法
- subtract 数学运算 标(向)量减法
- multiply 数学运算 标(向)量乘法
- divide 数学运算 标(向)量除法
- exp 数学运算 以e为底的指数运算
- log 数学运算 以e为底的对数运算
- dot 数学运算 点乘
04 Scikit-Learn简介
正如机器学习中推荐使用Python语言,用Python语言使用机器学习算法时,推荐使用Scikit-Learn工具。
或者应该反过来,现在机器学习推荐使用Python,正是因为Python拥有Scikit-Learn这样功能强大的支持包,它已经把底层的脏活、累活都默默完成了,让使用者能够将宝贵的注意力和精力集中在解决问题上,极大地提高了产出效率。Scikit-Learn官网见图2-4。
▲图2-4 Scikit-Learn官网首页
1. Scikit-Learn的安装
安装Scikit-Learn可以有两种方法。通过Pip安装,命令如下:
代码语言:javascript复制pip install -U scikit-learn
或通过 Conda安装,命令如下:
代码语言:javascript复制conda install scikit-learn
2. Scikit-Learn的基本用法
Scikit-Learn库包含了常见的机器学习算法,而且还在不断更新,常见机器学习算法都可以在Scikit-Learn库中找到,不妨将它当作机器学习算法的百科全书来使用。这里简要介绍它的用法。
使用Scikit-Learn包很简单,使用import导入即可,但须注意Scikit-Learn包的包名为sklearn:
代码语言:javascript复制import sklearn
调用机器学习算法也非常简单,Scikit-Learn库已经将算法按模型分类,查找起来非常方便。如线性回归算法可以从线性模型中找到,用法如下:
代码语言:javascript复制from sklearn import linear_model
model = linear_model.LinearRegression()
Logistic回归算法也是依据线性模型,同样也在其下:
代码语言:javascript复制from sklearn.linear_model import LogisticRegression
model =linear_model.LogisticRegression()
类似的还有基于近邻模型的KNN算法:
代码语言:javascript复制from sklearn.neighbors import NearestNeighbors
model =NearestNeighbors()
生成模型后,一般使用fit方法给模型“喂”数据及进行训练。完成训练的模型可以使用predict方法进行预测。
Scikit-Learn库对机器学习算法进行了高度封装,使用过程非常简单,只要根据格式填入数据即可,不涉及额外的数学运算操作,甚至可以说只要知道机器学习算法的名字和优劣,就能直接使用,非常便利。
05 Pandas简介
Pandas是Python语言中知名的数据处理库。数据是模型算法的燃料,也决定了算法能够达到的上限。一般在学习中接触的数据都十分规整,可以直接供模型使用。
但实际上,从生产环境中采集得到的“野生”数据则需要首先进行数据清洗工作,最常见的如填充丢失字段值。数据清洗工作一般使用Pandas来完成,特征工程也可通过Pandas完成。Pandas官网见图2-5。
▲图2-5 Pandas官网首页
1. Pandas的安装
安装Pandas可以有两种方法。通过Pip安装,命令如下:
代码语言:javascript复制pip install -U pandas
或通过 Conda安装,命令如下:
代码语言:javascript复制conda install pandas
2. Pandas的基本用法
Pandas针对数据处理的常用功能而设计,具有从不同格式的文件中读写数据的功能,使用Pandas进行一些统计操作特别便利。与Numpy类似,Pandas也有两个核心的数据类型,即Series和DataFrame。
- Series:一维数据,可以认为是一个统计功能增强版的List类型。
- DataFrame:多维数据,由多个Series组成,不妨认为是电子表格里的Sheet。
使用Pandas 包很简单,只要import导入即可。业界习惯在导入时使用“pd”作为它的别名:
代码语言:javascript复制import pandas as pd
导入后就可以使用了,其常用功能如下。
- read_csv 读取数据 从CSV格式文件中读取数据
- read_excel 读取数据 从电子表格中读取数据
- read_json 读取数据 从json格式的文件中读取数据
- read_clipboard 读取数据 从剪切板读取数据
- to_csv 写入数据 将数据写入CSV格式文件
- to_excel 写入数据 将数据写入电子表格
- to_json 写入数据 将数据写入json格式文件
- to_clipboard 写入数据 将数据写入剪切板
- Series 写入数据 创建Series类型数据
- DataFrame 写入数据 创建DataFrame类型数据
- head 信息查看 从头开始查看N位数据
- tail 信息查看 从末尾开始查看N位数据
- shape 信息查看 行列数信息
- dropna 数据操作 删除空值
- fillna 数据操作 填充空值
- sort_values 数据操作 正(逆)序排序
- append 数据操作 横向(按行)连接两个数据表
- concat 数据操作 纵向(按列)连接两个数据表
- value_counts 统计操作 值计数
- describe 统计操作 总体概况信息
- info 统计操作 数值类型统计
- mean 统计操作 取均值
- corr 统计操作 计算相关系数
- count 统计操作 非空值计数
- max 统计操作 取最大值
- min 统计操作 取最小值
- median 统计操作 计算中位数
- std 统计操作 计算标准差
关于作者:莫凡,新技术深度爱好者,曾经从事信息安全前沿技术跟踪研究和数据分析工作,在各类信息安全类技术期刊发表文章五十余篇,现转为投身高端知识“白菜化”项目,希望能让将更多听起来高大上的名词沾一沾“人间烟火”,成为日常生活中真正用得上的知识。
本文摘编自《机器学习算法的数学解析与Python实现》,经出版方授权发布。
有话要说?
Q: 入门机器学习,你准备好了吗?
欢迎留言与大家分享