机器学习快速入门教程 Scikit-Learn实现

机器学习是什么?

机器学习是一帮计算机科学家想让计算机像人一样思考所研发出来的计算机理论。他们曾经说过,人和计算机其实本没有差别,同样都是一大批互相连接的信息传递和存储元素所组成的系统。所以有了这样的想法,加上他们得天独厚的数学功底,机器学习的前身也就孕育而生了。

机器学习的萌芽诞生于19世纪60年代,20年前开始逐渐兴起。它是一门跨学科的交融,这里面包含了概率论、统计学等等学科。随着计算机硬件的提升,计算机运算速度的不断提高,它真正开始进入我们的日常生活当中。而在不久的将来,我相信它也会成为我们生活中必不可少的组成元素。

我们说说日常生活中的机器学习应用。第一个提到的,最具代表性的公司应该就是Google。他所开发的Google Now, google photos都是基于机器学习的产物。同样在百度,图片识别也是应用到机器学习中的视觉处理系统。于此同时,各种各样的企业都开始尝试把自己的产品往机器学习上靠拢,比如金融公司的汇率预测,股票涨跌;房地产公司的房价预测等等。

机器学习不仅仅只有一种方法,实现它的方法多种多样。这里所说的方法,在程序语言中,我们叫做算法。目前所有的机器学习算法大概可以被分为4到5类。

如果在学习过程中,我们不断的向计算机提供数据和这些数据所对应的值,比如说给计算机看猫和狗的图片,告诉计算机哪些图片里的是猫,哪些是狗,然后让它学习去分辨猫和狗,通过这种指引的方式,让计算机学习我们是如何把这些图片数据对应上图片所代表的物体,也就是让计算机学习这些标签可以代表那些图片,这种方式就叫做“监督学习(supervised learning)”。预测房屋的价格,股票的涨停同样可以用监督学习来实现。大家所熟知的神经网络同样是一种监督学习的方式。

如果同样在这种学习过程中,我只给计算机提供猫和狗的图片,但是并没有告诉它哪些是猫,哪些是狗,取而代之的是,我让它自己去判断和分类,让它自己总结出这两种类型的图片的不同之处,这就是一种“非监督学习(un-supervised learning)”。在这一种学习过程中,我们可以不用提供数据所对应的标签信息,计算机通过观察各种数据之间的特性,会发现这些特性背后的规律,这些规律也就是非监督方法所学到的东西。

还有一种方法综合了监督学习和非监督学习的特征,这种叫作“半监督学习(Semi-Supervised Learning)”。它主要考虑如何利用少量有标签的样本和大量的没有标签样本进行训练和分类。

在规划机器人的行为准则方面,一种机器学习方法叫作“强化学习(reinforcement learning)”,也就是把计算机丢到了一个对于它完全陌生的环境或者让它完成一项从未接触过的任务,它自己会去尝试各种手段,最后让自己成功适应这一个陌生的环境,或者学会完成这件任务的方法途径。比如说我想训练机器人去投篮,我要只需要给它一个球,并告诉它你投进了我给你记一分,让它自己去尝试各种各样的投篮方法。在开始阶段,它的命中率可能会非常低,不过它会像人类一样自己总结和学习投篮失败或成功的经验,最后达到很高的命中率。Google 开发的 AlphaGo 也就是应用了之一种学习方式。

还有一种和强化学习类似的学习方法,叫做遗传算法(genetic algorithm)。这一种方法是模拟我们熟知的进化理论,淘汰弱者,适者生存。通过这样的淘汰机制去选择最优的设计或模型。比如这位开发者所开发的计算机学会玩超级玛丽。最开始的马里奥1代可能不久就牺牲了,不过系统会基于1代的马里奥随机生成2代的,然后在保存这些代里面最厉害的马里奥,淘汰掉比较弱的马利奥代。然后再次基于强者“繁衍和变异”生出更强的马里奥。这也就是遗传算法的基本思想。

以上就是当今比较重要的机器学习方法,我们再来总结一下:它们包括,有数据和标签的监督学习(supervised learning),只有数据没有标签的非监督学习(unsupervised learning),有结合了监督学习和非监督学习的半监督学习法。还有从经验中总结提升的强化学习(reinforcement learning),最后是和强化学习类似的,有着适者生存,不适者淘汰准则的遗传算法(genetic algorithm)。

总结:

有数据和标签的 监督学习 (supervised learning),
​
只有数据 没有标签的 非监督学习 (unsupervised learning)
​
有结合了 监督学习 和非监督学习的 半监督学习法.
​
还有从经验中总结提升的 强化学习 (reinforcement learning),
​
最后是和 强化学习类似的, 有着适者生存, 不适者淘汰准则的 遗传算法 (genetic algorithm).

如何选择机器学习方法

选择合适的估计器

解决机器学习问题最难的部分往往是为特定任务找到合适的估计器。不同的估计器更适合不同类型的数据和不同的问题。

这次我们会讲到通用的学习模式或者学习形式。具体来说,Scikit-learn把所有机器学习的模式整合,统一起来了。你懂其中一个学习模式的话,就可以通用所有的学习模式。

今天我们会讲到分类的学习。具体来说,我们会用到Iris的花的例子。这个花会有不同的特性特征。在Scikit-learn当中有一个database,数据库里面有花的练习。花是分了四个属性,比如长,高,近,直,直。这种花有四种类型,我们用classifier去分开这四个类型的花。

首先,我们要用到numpy,然后我们要from sklearn data set。Sklearn有很多的数据库,我们可以用到其他的数据库去学习。甚至用到其他的数据库放到其他的模块当中,比如tensorflow。我非常推荐大家用他的数据库去练习,用你的classifier或者是用你的regression。多谢了Sklearn的数据库,我终于学会了machine learning。

我们之后会用到import模块,我们今天要用到classifier叫做knn classifier。knn classifier,就是它会选择比较临近的几个点作为它的邻居。然后综合一下几个点,模拟出数据的预测值。具体knn怎么工作呢?欢迎大家去google一下,你就知道它是怎么样工作的。但是在Sklearn里面,你没有必要懂它怎么工作的,你只要懂它怎么用就OK了。

dataset.load iris, iris就是这种花。data, irisx等于所有的属性都存在我的data里面。这种花有分四种类,它都存在我的iris.target里面。

首先我们先print出来我的iris的属性,让大家看一看具体是什么东西。我只print了两个sample,每个sample都有四种属性。我现在不清楚是什么属性,但是它是描述花瓣的宽,长,直径,然后用它去分类。0代表0这一类的花,1代表1这一类的花,2代表2这一类的花,所以它有三个类别。我们要学习它的属性配上它的类别,然后我们会有成功的预测出不同的东西。

现在我们要用到这一个import的模块去分开我们的training data和test data。我把这一堆的data分成我要用于学习的data和我要用于测试的data。这样会有一个好处,它们不会互相影响,在你测试的过程中,你不会出现人为误差,这样是比较好的学习方式。用test split分开,分开的数据是我这两个的总数据。我测试的比例占了30%的总数据,所以它这边的xtest+ytest占了30%。然后我们先print一下,看它有什么不一样的地方。它虽然分开了,但同时打乱了我这个数据,上面整整齐齐的排列下来,但是这边打乱了它这个数据,这样也会有一个好处。我尽可能的把这个数据打乱,在我的学习过程中,它不会有一个连续的影响。应该说乱的数据永远比不乱的数据更好,在继续学习当中,它是更好的一种形式。

接下来我们就要开始拿出classifier。这就是我们定义SocketLin用哪一个模块的方式。我们定义它等于小写的knn,k-nearest-neighbor。然后呢,经典的一步就来了。这个model fit把我们要圈点的data放进去。x全,y全,把它放进去,它就自动帮你去完成这个圈点的步骤了。所有圈点的步骤都在这边。最后呢,也就是它圈点完了以后呢,我在print我的knn。到这边的knn,它就是已经圈点

猜你喜欢

转载自blog.csdn.net/m0_61634551/article/details/134171354