1.1 背景

其实机器学习的理论在2010年后已经有了重大突破,为什么在这一年突然爆发了呢?AlphaGo的推动只是催化剂,主要的原因在于摩尔定律,也就是计算机硬件发展了到了足够承载海量的数据进行计算。

1.2 描述

机器学习是一个多领域交叉的学科,涉及到概率、统计和算法等等,是人工智能的核心。在此基础上诞生的行业应用目前主要集中图像处理、自然语言处理、推荐系统和数据挖掘和预测等方面。

1.3 划分

机器学历领域主要分为两大类,一类是监督学习,另一类是非监督学习,两者主要的区别在于一个数据是否有标签标记。

1.3.1 监督学习

监督学习是数据D= (X, y),X代表的是样本的特征,也就是我们用一些信息来表达一个样本,y指的是一个标签。比如X代表一个图片,那么y就代表这个标签是猫、狗还是人;比如X代表一个文本,那么y就代表这个文本的主题是经济、体育还是政治,活着y代表正面的情感还是负面的情感。因此,监督学习下,我们数据是既有特征又有标签的,所以我们的核心就是要学习出X到y的映射关系,也是给定一个X去学习出一个函数y=f(X)。我们如何去选择映射关系,比如是线性的映射关系还是非线性的映射关系,这就取决于我们使用什么样的模型来做拟合。比如我们选择使用线性的映射关系,那么我们选择的就是线性的模型,如果我们选择非线性的映射关系,那么我们选择的就是神经网络或者SVM。

1.3.2 非监督学习

无监督学习,数据上只有X而没有y,也就是D=(X),X没有标签,这种情况下我们能做的就是寻找X的特征、特点或者叫做规律。比如我现在有大量的样本数据,我们可以把这些样本分成几大类,每一个大类可能有一些共性。这样的方法论非常适合用在一些营销的场景里面,比如我根据用户的特点或者用户的行为数据,使用聚类算法像K-Means来把用户分成几类,然后可以给每一类用户提供个性化的营销方案。为了更够更好的理解聚类算法进行非监督的学习的过程,请看下面一张图片。
机器学习01-入门-LMLPHP

1.3.3 强化学习

除了监督学习与非监督学习之外,还有一类叫做强化学习,它跟另外两类是对立的,也是一种学习的方式。强化学习算法的思路也比较简单,以游戏为例,如果某一种策略能够在游戏中或者高的分数,那么就不断强化这个策略,这样就能取得更好的分数。这种算法有点想抖音的推荐策略,如果你对某一方面的视频很感兴趣,那么就不断你的兴趣,持续给你推送这一类的视频,你就会对它越来越感兴趣,直到你越来越离不开它。在游戏的场景中强化学习很实用,在 Flappy bird 这个游戏中,我们需要简单的点击操作来控制小鸟,躲过各种水管,飞的越远越好,因为飞的越远就能获得更高的积分奖励。
机器学习01-入门-LMLPHP
这是一个非常典型的强化学习场景:

  • 代理-机器有一个明确的小鸟角色
  • 目标- 需要控制小鸟飞的更远
  • 环境- 整个游戏过程中需要躲避各种水管
  • 行动- 躲避水管的方法是让小鸟用力飞一下
  • 奖励- 飞的越远,就会获得越多的积分

你会发现,强化学习和监督学习、无监督学习 最大的不同就是不需要大量的“数据喂养”。而是通过自己不停的尝试来学会某些技能。强化学习目前还不够成熟,应用场景也比较局限,除了机器人和工业自动化之外,最大的应用场景就是游戏了。

1.4 工业界应用

目前在工业界应用里主要还是以监督学习为主,后面的内容我们也会着重介绍监督学习的算法。对于监督学习,有大量的案例,只有有标签,而且和预测相关,都可以归类为监督学习。比如人脸识别,十年前人们开玩笑常说的刷脸支付现在已经成了司空见惯的事,除此之外,像文本分类,情感分析,语音识别,机器翻译,目标检测,金融风控,自动驾驶等等,这些都是属于监督学习的范畴。

1.5 算法

监督学习算法主要有线性回归、逻辑回归、KNN、朴素贝叶斯、决策树、随机森林、SVM、GBDT、XGBoost和神经网络等等,非监督学习算法主要有PCA、K-Means、GMM、LDA等等。这些算法我会在后面的章节中做详细的介绍,这里先简单做一个铺垫。线性回归是最经典最简单的回归算法,就是要预测一个实际的值,比如一个人的身高,北京的房价或汽车的销量等等;逻辑回归是建立在线性回归之上的,虽然名字叫做回归,但它不是用来解决回归问题的,而是用来解决分类问题的;朴素贝叶斯常用在文本分类的场景之中;决策是是一个树状的形状,我们每天潜意识都在使用决策树,比如如果和平精英新出的皮肤只卖一块钱,那么我就来一套;随机森林和决策树比较类似,就像是我使用多个决策树来做决策,比如同样的问题我问很多的专家,让他们来帮我做决策,最后我再把这些专家的经验总结一下,得出一个结论。基本的介绍,大概就先介绍到这里,后面会有更加详细的算法讲解。

1.6 解决的问题

我们一般把机器学习所解决的问题分为分类和回归两类,两者输出是不一样的,回归问题输出的是连续性的数值,比如天气是28度或价格是10.0元,分类问题输出的是类别型数据,比如明天是阴天还是晴天,情感是好还是坏,贷款会逾期还是不会预期等等,类别的特征没有大小的关系,经典的分类问题就是图像识别,我们需要识别出图像是狗还是猫

1.7 建模流程

在了解了机器学习的准备知识之后,我们来看一下如何建立一个机器学习的模型。
机器学习01-入门-LMLPHP

数据是我们建立机器学习模型的开端,然后针对数据中的噪声进行预处理,数据决定了机器学习的上限,而算法只是尽可能逼近这个上限,这里的数据指的就是经过特征工程得到的数据。特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。特征工程是机器学习建模流程中最重要的部分,主要包含特征构建,特征提取和特征选择三个部分,后面针对具体的案例我再详细展开。后面的过程就是建模和评估了,评估的方式主要是精确率、召回率和F1-Score,如果评估的效果不理想就需要重新做特征工程。

1.8 模拟练习

有一组数据[[152,51],[156,53],[160,54],[164,55],[168,57],[172,60],[176,62],[180,65],[184,69],[188,72]],其中第一个值代表身高,第二个值代表体重,需要我们根据身高来预测体重。

import numpy as np
import matplotlib.pyplot as plt
data = np.array([[152,51],[156,53],[160,54],[164,55],[168,57],[172,60],[176,62],[180,65],[184,69],[188,72]])
x, y = data[:,0].reshape(-1,1), data[:,1]
plt.scatter(x, y)
plt.xlabel('height(cm)')
plt.ylabel('weight(kg)')
plt.show()

机器学习01-入门-LMLPHP
显然输出的结果表示身高和体重呈线性关系,下面我画了三条线,很明显黄色的线可以更好的拟合这些点,然而,我们应该如何去找到这条线呢?
机器学习01-入门-LMLPHP

from sklearn import linear_model

rege = linear_model.LinearRegression()
rege.fit(x, y)
plt.scatter(x, y, color='red')
plt.plot(x, rege.predict(x), color='green')
print('身高178cm体重是%.2fkg' % rege.predict([[178]]))
plt.xlabel('height(cm)')
plt.ylabel('weight(kg)')
plt.show()

机器学习01-入门-LMLPHP
身高178cm体重是64.41kg

09-22 20:42