美文网首页
什么是机器学习?

什么是机器学习?

作者: 醉看红尘这场梦 | 来源:发表于2020-03-11 18:05 被阅读0次

    提起机器学习这个概念,你一定已经耳熟能详了。但谈到如何开始学习这个领域的时候,相信你就不那么有自信了。我应该先学习一些数学知识么?我应该从哪个语言开始呢?我应该了解哪些和机器学习相关的项目呢?似乎光是这些问题,就足以让你在机器学习的大门前犹豫一阵子。

    显然,我们并不希望这样。一个机器学习的hello world是什么样的?其中涉及到的基本概念都在说什么?用可以实践的代码一步步去探索未知的技术领域才是我们熟悉的方式,而这,就是这个系列视频的目的。

    什么是机器学习?

    在开始动手编程之前,我们还是要做一些简单的科普。什么是机器学习呢?说句官方的话,它是人工智能领域的一个分支。在之前,人工智能造就的产物只能处理某个领域的问题。其中,最著名的事件莫过于1997年深蓝战胜了棋王卡斯帕罗夫。但是,无论多厉害,深蓝也只能是一个世界象棋高手。

    m

    而基于机器学习技术开发的Alpha Go则截然不同,它不仅精通围棋,而且人们还尝试通过训练,让它玩星际游戏。相比围棋,这更是一个完全不可预知的挑战。

    m

    因此,就像它的名字一样,机器学习是一种让计算机通过不同的例子进行学习,并自动生成经验的算法,而不像原来我们对人工智能的理解,就好像计算机会在不计其数写死的规则里运算一番,找到所谓的最优解。

    于是,机器学习的这种特性,一下子就为我们打开了一扇大门。因为计算机终于可以处理一些之前对人脑很简单,而对电脑很困难的问题了。在这一节里,作为机器学习领域的hello world,我们来看如何让计算机区分是一只老鼠和一只兔子。

    m

    做哪些准备工作?

    在开始之前,要先准备好本地的环境。

    首先,是scikit程序库,这是我们要接触的第一个和机器学习相关的项目,它包含了很多基于python实现的学习算法,以及学习用的数据集合。在它的安装页面可以看到,有很多种不同的安装方法:

    m

    这里,推荐大家使用Anaconda来安装,这是一个基于Python的科学计算平台,可以为我们提供一个隔离的Scikit学习环境。

    m

    但是,完整安装Anaconda很大,并且也没必要,我们只要安装Miniconda就好了,这是一个命令行工具,可以帮助我们构建要使用的计算环境:

    m

    其次,安装好Miniconda之后,打开terminal,执行conda install scikit-learn,如果是第一次安装,就会看到类似下面这样的结果:

    Fetching package metadata ...........
    Solving package specifications: .
    
    Package plan for installation in environment /Users/puretears/miniconda3:
    
    The following NEW packages will be INSTALLED:
    
        mkl:          2017.0.1-0
        numpy:        1.12.1-py36_0
        scikit-learn: 0.18.1-np112py36_1
        scipy:        0.19.0-np112py36_0
    
    The following packages will be UPDATED:
    
        conda:        4.3.11-py36_0      --> 4.3.16-py36_0
    
    Proceed ([y]/n)? y
    
    mkl-2017.0.1-0 100% |##############| Time: 0:03:10 610.80 kB/s
    numpy-1.12.1-p 100% |##############| Time: 0:00:10 339.65 kB/s
    scipy-0.19.0-n 100% |##############| Time: 0:01:19 197.61 kB/s
    scikit-learn-0 100% |##############| Time: 0:00:04   1.10 MB/s
    conda-4.3.16-p 100% |##############| Time: 0:00:00 537.09 kB/s
    
    

    可以看到,Miniconda会自动下载好所有需要的软件包以及一份Python环境,它们位于~/miniconda3/bin目录,为了使用方便,我们可以在/usr/local/bin目录,创建一个符号链接:

    ln -sf ~/miniconda3/bin/python3 /usr/local/bin/python3s
    
    

    然后,执行python3s -V,看到下面的信息就表示安装完了:

    Python 3.6.0 :: Continuum Analytics, Inc.
    
    

    第三,确认Scikit正常安装。新建一个python文件,例如skdemo.py,并添加下面的内容:

    import sklearn
    
    

    保存退出后,执行python3s skdemo.py,如果也没有任何错误提示,就表示我们已经一切准备就绪了。

    是兔子还是老鼠?

    做好准备工作之后,回到之前的问题:如何通过编程来区分是一只兔子,还是一只老鼠呢?

    m

    按照传统的思路,你可能会想,花色的是兔子,灰色的是老鼠。但是,如果给你的是一张黑白的图片,就明显不那么容易区别了:

    m

    这时,你可能又会想,那就通过耳朵和尾巴的长度,耳朵短、尾巴长的是老鼠,反之,是兔子。但是,当有人拿着下面这样的图片来找你的时候:

    m

    你就不得不再次重新调整判断的规则。当然,我们并不是要刻意给你找麻烦。而是说,如果识别的过程是由一系列死规则构成的,那么无论这个规则体系多么复杂,都一定能找出可以例外来。

    于是,不难想象,在以前,为了弥补一个又一个的“意外”,这类所谓的智能程序都会包含非常复杂的计算规则,并且,一旦要识别的对象发生了质的变化,之前所有的代码,就都作废了。显然,我们需要有一个更好的模式,而这,就是机器学习的目的。

    Scikit

    Training Data

    在机器学习领域里,有一种叫做supervised learning的方法。简单来说,它把机器学习的过程分成了三个阶段。第一个阶段,我们需要收集最初用于训练计算机的数据集合(Training Data)。在我们的例子里,就是分别告诉计算机,兔子和老鼠它们各自尾巴和耳朵的长度。

    为了得到这些数据,假设我们实地走访了一家动物园,采集了一些兔子和老鼠的数据,制作了下面这样的表格:

    Ear Length Tail Length Label
    550 160 Rabbit
    520 200 Rabbit
    80 420 Rat
    110 360 Rat

    在上面这张表里,前两列表示用于识别的属性,它们有一个专属名词:叫做Feature,为了简单,我们的模型里只包含了两个Feature,既耳朵和尾巴的长度。而表中的每一行,叫做一个Example,即样本,描述的是一个具体的动物。最后一列,叫做Label,表示多个features放在一起形成的识别结果。当然,我们的模型里有两个Label:兔子和老鼠。最终,我们管上面这张表,就叫做Training Data

    接下来,打开我们之前创建的skdemo.py,把之前创建的training data添加进来:

    features = [[550, 160], [520, 200], [80, 420], [110, 360]]
    labels = [0, 0, 1, 1]
    
    

    不难理解,features数组中的每个元素,是training data中的前两列,而labels中的每个元素则表示对应索引位置的feature的判断结果,这里我们用0表示兔子,1表示老鼠。

    Decision tree

    准备好training data后,我们就要着手训练计算机了,最终形成的这个把耳朵和尾巴长度映射到动物类型的过程也有一个专有名词,叫做Classifier,而训练Classifier的一个比较简单的方式,叫做decision tree。简单来说,用我们提供的training data,会生成一个类似这样的结构来判断动物的类型:

    m

    为了生成decision tree,我们添加下面的代码:

    from sklearn import tree
    
    clf = tree.DecisionTreeClassifier()
    clf = clf.fit(features, labels)
    
    
    • 首先,我们在sklearn module中引入了tree
    • 其次,用DecisionTreeClassifier()方法创建了一个空的decision tree,此时,它对于如何通过耳朵和尾巴的长度判别兔子和老鼠一无所知;
    • 最后,用fit方法,把featureslabels传递给它,完成了最终的训练工作;

    Give it a try?

    现在,是时候检测一下计算机的学习成果了,我们可以用decision tree的predict方法让计算机根据新的feature来计算label:

    print(clf.predict([[400, 110]]))
    
    

    如果没有意外,计算机会告诉你,这应该是一只兔子。

    相关文章

      网友评论

          本文标题:什么是机器学习?

          本文链接:https://www.haomeiwen.com/subject/tvjhjhtx.html