一、我们需要一个机器学习工具库

不要重复造轮子,似乎是搞it的童鞋们经常听到的一句话。是的,我们这套课程,不打算所有的算法都自己实现,因为,这确实太费时间,不利于大家对思想和原理的理解。

所以这里,我们选择了一个应用广泛,且学习成本较低的库,作为我们机器学习入门的库,它就是scikit-learn。不要误解,虽然,我们使用了scikit-learn这个库,但是我们在必要的时候,仍然会自己实现一些算法。

为什么本套课程,打算自己实现一些算法呢?很多同学经常问我们是讲的scikit-learn的哪个版本呢?他们担心,学习了现在的版本,以后scikit-learn升级后,所学的知识就没有用了。我相信很多初学的同学都有这样的疑惑,这是因为,他们关心具体的api,而没有在意原理的学习,所以不能做到举一反三,也算一种学习中的悲哀吧!

1、scikit-learn是什么?

scikit-learn是一个python写的机器学习库。

什么?我仿佛听到有同学说,python,遭了,我并不会。我连java都没怎么熟悉,我还要去学习Python吗? 有这样顾虑的同学不用太担心,我们发誓,我们只讲最简单的python代码,只求能够满足我们日常的需要,即可。只会一些最简单的语法,你也能够步入机器学习的大门。

二、scikit-learn安装前的准备工作

安装scikit-learn库之前,不好意思,你必须要先安装一下python环境,前面的课程已经简单讲解了怎么安装python环境,这里就不在累述了。其实你只要简单的理解,它和安装java环境类似就可以了。

通过编译的方式来安装scikit-learn会比较麻烦。我们使用pip包管理器来安装scikit-learn,所以需要先安装pip包管理器。

1、pip包管理器安装

安装好python后,我们需要安装一个pip包管理器。作为一个人见人爱的程序员,一听到包管理器,就应该会敏感起来。 什么是包管理器呢?就是用来安装、卸载、更新自己或别人写的python代码库的工具。

pip包管理器安装复杂吗?并不复杂,更幸运的是,python版本在2.7.9及以上的版本,都自带了pip包管理器,所以,从第一课开始的同学,可以省去安装pip的步骤了。 在终端运行命令 pip –V,可以看到pip的是否安装,,如下图:

如果你比较倒霉,安装python的时候,没有自动安装pip,那么也没关系,只要按照下面的方法按照就可以了。

下载pip包解压 然后运行命令 python setup.py install,等待一会,即安装完成。

如果,您使用的是mac或者linux系统,那么更简单了,只要执行下面的脚步,就可以安装了。有时候也许有权限问题,可以用sudo以高权限运行。

1
2
3
4
wget http://pypi.python.org/packages/source/p/pip/pip-0.9.1.tar.gz 
tar xzf pip-0.9.1.tar.gz
cd pip-0.9.1
python setup.py install

如还有困难,可以看一下视频课程

三. 安装第三方依赖库

我并不想一开始就把安装过程搞得这么复杂,但是没办法,机器学习本来涉及到很多数学、向量、绘图等任务,而scikit-learn也使用了很多第三方的库,所以在安装scikit-learn之前,我们最好把这些库都安装好。Scikit-learn是不能自动帮你安装好它所用到的库的。

这里我们仅仅安装两个第三方库就可以了,一个是numpy数学库,一个是scipy科学计算库。在终端执行如下的代码:

1
2
pip install numpy
pip install scipy

只要没有报错就说明安装成功了。如果你是mac电脑,可能目录写权限不够,那么在命令前加上sudo即可。

在windows上使用pip可能安装不了,这时候,可以到官网去下载nump和scipy来安装,如果遇到问题,请看我们的初级视频来解决。视频中解决了安装错误的问题。

四、Scikit-learn的安装

无论是在windows、mac还是linux上,执行如下代码即可安装scikit-learn

1
pip install -U scikit-learn

如果安装失败,可能是权限不够(mac电脑下)。

一般来说,只要在命令前使用sudo 就可以了,如下: sudo pip install -U scikit-learn。

验证是否安装成功 在python的界面中录入: from sklearn import datasets

如果没有报错,就表示安装成功了,如下图所示:

四(补充)、终极神药

如果以上的安排都失败,你已经筋疲力尽花了很多时间还是无法正确安装scikit learn库,那么好心的我们,将为你提供神秘锦囊,一键搞定。

1、人品很好,为什么安装还是会失败

第一个问题,为什么会安装失败呢?学习本套课程的你,以后很可能会成为千里挑一的AI工程师,甚至AI科学家,很多问题,当然需要寻根问底。

由于python和包管理器版本很多,各个版本之间的兼容性不太好,各个软件包对不同python及包管理器的兼容性也不太好,所以在不同版本的python中安装第三方库,很有可能会失败,这是目前python开发者们懒得解决、也不想解决的问题。统一的问题解决之道是:使用较新的python及其包管理器。

2、安装anaconda

以上的问题,可以通过安装一个anaconda来解决,anaconda和python都是蟒蛇的意思,只是品种不一样,这就能解释他们两者之间有什么关系。

anaconda是python的发行版,就是一个打包调试好,并事先集成了很多第三方库的软件包。Anaconda支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。

当然,这些第三方包中也包含scikit learn,只要安装好anaconda,那么scikit learn自然而然就已经安装好了。

幸福的是,anaconda对于一个程序员来说,非常简单。

  1. 下载anaconda,地址
  2. 是windows下载windows版本,是mac下载mac版本,是linux下载linux版本。什么,你是ios,别搞笑了,不好意思,不支持。
  3. windows下会下载下来一个exe文件直接安装即可。

anaconda安装完成后,numpy,scipy,scikit learn就安装成功了。

五、第一个例子: 使用scikit-learn加载数据

作为第一个机器学习的例子,我们尽量简单。本节我们讲解一下如何加载scikit-learn中的原始数据集。

首先,我们列出下面的python代码

1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf8 -*-
 
# 加载糖尿病数据
 
# 导入常用数据集
from sklearn import datasets
 
# 加载糖尿病数据
diabetes = datasets.load_diabetes()
 
# 打印数据
print diabetes

第1行,设置本python代码的编码为utf-8,如果不幸,你忘记设置,那么如果源码中包含了中文字符,那么将显示乱码。

第2行,使用from..import..,指令,导入sklearn模块中的datasets类。datasets是一个国际上通用的实验数据集。sklearn之所以好用,就是因为,它为我们研究机器学习做了一些每个初学者都需要做的准备工作,从而节省了我们的宝贵时间,数据就是其中一项很重要的准备工作。

第3行,使用load_diabetes用来加载糖尿病数据,这个函数很简单,主要是到文件中去读取糖尿病数据,然后返回一个字典类型,如果对python的字典类型不了解。可以看一下这里的资料:http://www.runoob.com/python/python-dictionary.html

运行这段代码,我们得到如下的数据输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    'data': array(
            [[ 0.03807591,  0.05068012,  0.06169621, ..., -0.00259226,
             0.01990842, -0.01764613],
           [-0.00188202, -0.04464164, -0.05147406, ..., -0.03949338,
            -0.06832974, -0.09220405],
           [ 0.08529891,  0.05068012,  0.04445121, ..., -0.00259226,
             0.00286377, -0.02593034],
           ..., 
           [ 0.04170844,  0.05068012, -0.01590626, ..., -0.01107952,
            -0.04687948,  0.01549073],
           [-0.04547248, -0.04464164,  0.03906215, ...,  0.02655962,
             0.04452837, -0.02593034],
           [-0.04547248, -0.04464164, -0.0730303 , ..., -0.03949338,
            -0.00421986,  0.00306441]]
    ),
    'target': array(
            [ 151.,   75.,  141.,  206.,  135.,   97.,  138.,   63.,  110.,
           ..., 
            131.,  174.,  257.,   55.,   84.,   42.,  146.,  212.,  233.,
             91.,  111.,  152.,  120.,   67.,  310.,   94.,  183.,   66.,
            173.,   72.,   49.,   64.,   48.,  178.,  104.,  132.,  220.,   57.]
    )
}

data:是一个二维数组,里面一共有442个数组。每一个数组表示一条病人样本数据。样本数据有10个属性值,分别是:Age(年龄)、性别(Sex)、Body mass index(BMI指数)、Average Blood Pressure(平均血压)、S1~S6一年后疾病级数指标。

target:Target为一年后患疾病的定量指标,表示犯病或者病情加重的指标,值越大风险越高。与data一样,target有442个数据,分别和data中的每一行数据对应。

六、小结

大家学习完本课后,一定要自己动手实践一下哦,有问题,可以在评论区提出。如果不自己实现一下,最后的结果就是然并卵。哈哈。