专栏首页WeaponZhi编写你人生中第一个机器学习代码吧!

编写你人生中第一个机器学习代码吧!

用 Python 实现第一段机器学习代码,跟我一起来吧!

我们先要学习的机器学习算法是监督学习,那么,何为监督学习呢?要了解监督学习,我们得先回顾下我们平时的编码方式。我们平时的编码方式是一种硬编码,简而言之就是面对问题的时候,我们通过正向暴力编码,将问题的各个方面和逻辑通过编码来处理,从而使得代码按照我们的思路一步步运行下去,最终解决我们的既定问题。

打个比方,假设我们要写一个代码来区分一个人的性别,我们可能首先会提取出男人和女人的特点,比如男人可能有胡子,有喉结,身高普遍在一个 xx 范围这样,那么我们就可以根据这些属性来编写一些判断条件,最终实现一个算法,然后把某个人具备的属性输入到算法,算法输出一个结果,告诉你这个人可能是啥性别。

这样可能能实现一个算法,但会有两个问题。首先就是这些属性的确定,决定一个人是什么性别的属性可能有很多,如果属性太多,靠人工来编写算法就会显得非常不实际。其次,这些属性对于最终输出结果的影响是有限的,总会存在特例,有的男人就是不长胡子,或者有的女人身高很高,面对这种比较特殊的个例的时候,算法就非常有可能出错,显然,单纯的依靠硬编码,是不可能做到尽善尽美的。

而监督学习算法的做法就是,把一些既定的样本输入给算法,这些样本包括具体的特征属性和具体的输出,比如「一个人身高一米八,有胡子,有喉结」,这是它的样本输入,「这个人是个男人」是它的输出,这些具有明确输入和结果的样本输入到监督学习算法后,它会自己进行学习和总结,随着样本数量的增多,监督学习的判断规则将会被训练的 越来越准确和成熟。随后,面对它从未见过的样本,比如「一米六,没胡子,有喉结」,算法就会根据之前的规则给出一个它的判断,告诉你这个人可能是个啥性别。

我们把胡子、喉结这些属性成为特征-Features,男人还是女人这样的输出结果称为标签-Label。为了实现这样的一个功能,我们需要一个分类器,那么,我们整个监督学习的过程大概是这样的。

scikit-learn 可以帮我们轻易的实现上面的需求,如果你安装过 Anaconda,scikit-learn 就已经包含其中了,其他下载方式这里不再赘述。

如果你是使用 Python 来学习机器学习,scikit-learn 肯定是你必须要使用的机器学习库,scikit-learn 是非常保守的库,它专业性极强,只做机器学习领域,从来不会作任何机器学习领域之外的扩展。不仅如此,scikit-learn 使用的机器学习算法都是经过广泛验证过的算法,这些算法往往也是效率最高,实现最简单有效的。所以,阅读 scikit-learn 的源码实现也是一个非常好的学习方式。

scikit-learn 官网 : http://scikit-learn.org/stable/

下面我们用具体的代码来演示上面说过的三个过程。

收集真实训练数据

在现实的应用环境中,我们获取数据的方式是多种多样的,比如,你可以通过读取已有文件来获取数据,或者是动态的监听数据,每获取一条数据就输入一条数据。我们就不这么复杂了,用上面判断性别的例子,简单的模拟几个数据:

>> features = [[160,30,2.1],[170,15,2.3],[178,8,2.5],[188,10,2.8],[167,22,2.2]]
>> labels = [0,0,1,1,0]

features 是我们的特征,拿第一个数据 [160,30,2.1] 举例子,160 代表的是身高,30 代表的是头发长度,2.1 代表的是腰围,单位为尺。好吧,原谅我想象力有点渣渣,可能例子不好,总之目前我们使用身高、头发长度以及腰围来作为我们判断性别的特征,当然,你还可以提取出更多的特征,这里只是为了我们测试方便。labels 就是我们的标签了,0 代表这个人性别为女,1 代表性别为男

这样, 我们就算完成了第一步,收集好了真实数据

训练分类器

拿到了数据源,我们需要挑选一种分类器来训练这组数据,这里我们选择决策树,可以先暂时不要管决策树是什么,你可以把它当做实现分类器的一种形式罢了

>> from sklearn import tree
>> clf = tree.DecisionTreeClassifier()
>> clf.fit(features,labels)

sklearn 即是 scikit-learn 库,我们引入库中的决策树类,并使用 fit() 函数来匹配特征和标签,这样,我们的分类器就算实现好了,clf 完成了它的训练。

对数据作出预测

实际上你可以把分类器想像成一个黑盒子,通过一些数据的训练,这个盒子就具备了一定的判断能力,当你再次输入进数据的时候,它能够得到相应的预测,至于这个盒子里面到底使用了什么方法根据数据的训练来指定规则,就是你选取的算法所做的事了,比如在这里,我们选择了决策树来作为分类器制定规则的算法,当然你还有很多算法可以选择,也可以自己实现算法,这不在我们这篇文章的讲述范围内。下面,我们使用实现好的分类器,对一个未知数据进行预测

>> print(clf.predict([[180, 15, 2.3]]))
[0]

我们使用 predict() 函数来对一组分类器从未见过的数据来进行预测。分类器认为一个一米八大个,长着 15 厘米长秀发,腰围 2.3 尺 的高大个是个女孩。好吧,这是它的想法。

本文分享自微信公众号 - WeaponZhi(WeaponZhi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AI 学习之路——轻松初探 Python 篇(二)

    这是「AI 学习之路」的第 2 篇,「Python 学习」的第 2 篇 我将分两篇讲解下 Python 的基础语法,这是第一篇。大家也可以在很多地方看到入门的学...

    小之丶
  • AI 学习之路——轻松初探 Python 篇(一)

    这是「AI 学习之路」的第 1 篇,「Python 学习」的第 1 篇 前言 1. Python 篇的组织结构 不管是学习人工智能还是大数据,Python 都是...

    小之丶
  • MVVM 面向接口型框架封装和单元测试

    大家好,今天给大家带来一个我自己开发改造的 MVVM 封装框架。代码不难,但我更想说一些我在开发这样一个架构过程中的想法和思路,我们不仅要善于作一个搬运工,更要...

    小之丶
  • EDA算法探究--20世纪10个影响最大的算法在EDA领域的应用

    21世纪初,科研人员总结了上个世纪对工业界影响最大的10个算法,其中大多数算法都在EDA领域有重要应用。我们今天来看一下,这10大算法,你在大学期间学过哪些?在...

    网络交换FPGA
  • pyhanlp 共性分析与短语提取内容详解

    HanLP中的词语提取是基于互信息与信息熵。想要计算互信息与信息熵有限要做的是 文本分词进行共性分析。在作者的原文中,有几个问题,为了便于说明,这里首先给出短语...

    IT小白龙
  • AI 路上,第一步这么走下去...

    算法是描述解决一个问题的步骤,外界给它所指定的数据,然后经过一系列步骤输出一个结果。为了更快更轻量级地解决问题,我们会选择高效精简的结构去实现,这种结构称为数据...

    double
  • 一年去雾算法研究的总结。

      从最开始的Crimm Imageshop中最简单的去雾功能开始,到前不久为止研究的诸多去雾算法,再到近日和一些朋友的关于去雾经验的交流,感觉自己对这个方面的...

    用户1138785
  • ROS下使用乐视RGB-D深度相机/Orbbec Astra Pro显示图像和点云

    最近调了一下很久之前买的乐视遗产系列——三合一体感相机(某宝100多块钱的RGB-D相机,实际也是奥比中光的 Astra Pro,学生党福利),赶紧记录一下,以...

    小黑鸭
  • 9 神经网络: 学习(Neural Networks: Learning)

    9.1 代价函数(Cost Function) 9.2 反向传播算法(Backpropagation Algorithm) 9.3 直观理解反向传播(Bac...

    用户2188327
  • Python matplotlib读取excel数据并用for循环画多个子图subplot操作

    表格内容大致如下,有若干sheet,每个sheet记录了同一所学校的所有学生成绩,分为语文、数学、英语、综合、总分

    砸漏

扫码关注云+社区

领取腾讯云代金券