写给产品经理的几种机器学习算法原理

1、机器学习的过程

机器学习的过程:从本质上来讲,就是经过一堆的训练数据找到一个与理想函数(f)相接近的函数。算法

在理想状况下,对于任何适合使用机器学习的问题,在理论上都是会存在一个最优的函数让每一个参数都有一个最合适的权重值,但在现实应用中不必定能这么准确得找到这个函数。因此,咱们要去找与这个理想函数相接近的函数。只要是可以知足咱们的使用的函数,咱们就认为是一个好的函数。编程

这个训练数据的过程一般也被解释为:网络

在一堆的假设函数(Hypothesis set)中,它是包含了各类各样的假设,其中包括好的和坏的假设。框架

咱们须要作的就是:从这一堆假设函数中挑选出它认为最好的假设函数(g)——这个假设函数是与理想函数(f)最接近的。机器学习

机器学习这个过程就像是:在数学上,咱们知道了有一个方程和一些点的坐标,用这些点来求这个方程的未知项从而得出完整的方程。函数

但在机器学习上,咱们每每很难解出来这个完整的方程是什么。因此,咱们只能经过各类手段求最接近理想状况下的未知项取值,使得这个结果最接近本来的方程。学习

2、什么问题适合用机器学习解决

机器学习不是万能的,并不能解决全部的问题。翻译

经过以上机器学习的过程能够看出来,实质上,机器学习是:经过已知经验找到规律来进行预测。3d

银行想知道应该发放多少贷款给某个客户时,能够根据过往成功放贷的数据找出每一个贷款区间的人群特色、自身的房车资产情况等,再看看这个客户的特色符合哪一个区间,以此去肯定应该发放多少贷款,这就是适合用机器学习去解决的问题。rest

对于适合用机器学习解决的问题,台大的林轩田教授为咱们总结了三个要素:

  1. 有规律能够学习
  2. 编程很难作到
  3. 有可以学习到规律的数据

只要知足这三个条件的问题,咱们均可以挑选合适的算法去解决。

基于以上的条件,一般咱们能够用机器学习解决三类问题:

  1. 预测(回归):根据已知数据和模型,预测不一样客户应该发放的贷款额度是多少
  2. 判别(分类):与预测有点相似,也是根据模型判别这个客户属于过往哪一类客户的几率有多大
  3. 寻找关键因素:客户的属性很是多,经过模型咱们能够找出对放贷影响最大的因素是什么

3、几种常见的模型和算法

1. 感知机Perceptron Learning Algorithm,PLA

感知机学习算法是一种二分类的线性分类算法,通常用来解决二分类(只存在两个结果)的问题。

例如:判断“一个同窗的考试成绩合格仍是不合格?”、“银行会不会给某个客户发放贷款?”等。

这种只存正、负两个结果的问题,就称为二分类的问题。

感知机学习算法的原理很是好理解,有点相似考试的概念:

把不少个影响因素当作每道题的得分。由于不一样题目的权重不一样,因此咱们每道题的得分由权重(重要程度)和这个因素的得分相乘,最后把全部题目的得分加起来看看有没有超过60分(阈值)。若是超过了就是及格了(正结果),即对应的输出值为1,若是没有超过就是不及格(负结果),对应的输出值为-1。

仍是以刚才银行贷款的例子来解释:

一般银行判断在“给不给某个客户放贷款?”时,都是已经掌握了客户的各类信息(如:年薪、负债状况、社保缴费、公积金等等)。

由于数据的维度不一样,描述的单位也不一样,咱们须要把这些数据按照各自维度的标准统一成能够量化的评分——能够按照年薪在5W如下得1分、5-10W得2分这样的方式进行量化。

每一个维度的重要程度都不一样,因此咱们在相加的时候须要考虑为每一个值加上一个权重,再看看最后得出来的结果有没有高过放款的阈值评分——若是高过这个分数就放款,低过这个分数就不放款。

首先看看关于感知机的数学定义:

咱们能够转换到几何的方式去看这个问题:

在二维空间内,训练的数据就变成了平面上的一个点,这些数据里面有正样本以及负样本(成功放贷款的以及没有放贷款的)。

感知机算法的学习过程就是:找到一个平面(在二维中表现为一条线)——可以把全部的正样本和负样本区分开来。那么,当在应用的时候面对新来的客户,经过模型算出是正结果,咱们就能够给这个客户发放贷款;算出来是负结果,咱们就不发放贷款。

怎么去找到这条线(超平面)呢?

感知机使用的学习策略是“梯度降低法”。

这种方法的思想是:先在平面内随便找一条线,而后开始把样本点放到平面内。当一个点被误分类——即位于分类超平面错误的一侧时,调整模型的参数(w和b),使分类超平面向该误分类点的一侧移动,以减小该误分类点与超平面的距离,直到超平面越过该误分类点使其被正确分类为止。

感知机利用梯度降低法的训练过程

这种方式对于模型的训练很是快速,计算量相对较小。

但同时,这样的计算方式追求最大程度正确划分、最小化训练数据的错误,效果相似下图的直线——会致使比较容易形成过拟合的状况,即:模型对于新数据的包容性差,会过分地把新输入数据分红错误的类别。

2. 线性回归Linear regression,LR

讲逻辑回归以前,咱们先讲讲“什么是线性回归?”。

在统计学中,线性回归是指:利用称为线性回归方程的最小平方函数,对一个或多个自变量和因变量之间关系进行建模的一种回归分析。

举个直观的例子:深圳春运时的客流量多是与过年的时间相关的——越接近过年这天人流量越大。

以下图所示:

若是客运站想预测:明天和后天的客流量。

该这么办?

咱们能够用一条线去尽可能准的拟合这些数据,若是有新的数据输入进来,咱们就能够找到对应的预测点:

上述例子就是一个最简单的一元线性回归分析:y=ax+b。

该式子中只包括一个自变量和一个因变量,且两者的关系可用一条直线近似表示。在收集的数据中,每个份量,就能够看作一个特征数据。

例如:上述例子的日期是一个特征,咱们还能够找到地区、节假日、其余车站的客流量等等不一样的因素,每一个特征至少对应一个未知的参数。这样就造成了一个线性模型函数。

当特征变多时,上述线性回归的向量表示形式为:

这个矩阵方程因为计算量太大很难直接去求解,那么咱们要怎么样去找到这根线的位置呢?

在这里咱们能够退一步,把参数求解的问题,转化为求最小偏差的问题,让实际值与预测值之间的偏差变得最小,那么咱们的预测值就十分接近实际值了。

这就是损失函数的来源。在机器学习的算法中,实际上存在大量因为计算量巨大从而没法求解的问题。咱们都是把这类问题转化成求最小偏差,即:实际值与预测值之间的偏差(损失)问题,想办法求出让偏差最小的状况,就能够获得问题的最优解。

线性回归方程的损失函数一般是经过最小二乘法,或者梯度降低法进行求解,在这里咱们不展开叙述。

线性回归是目前运用最普遍的模型之一,在金融、经济学、医学等领域经常用来解决预测类问题。

经过观测数据集拟合出一个预测模型,咱们就能够知道:一组特定数据是否在一段时间内会增加或降低?

3. 逻辑回归 Logistic regression,LR

逻辑回归实际上也是一个线性回归模型,可是线性回归经常用来作预测,逻辑回归却经常用来解决二分类问题。

为何会有这么大的差别呢?

若是对于上面的感知机算法来讲,目标是为了找到一个可以将正负样本彻底分开的超平面的话,从另一个层面看感知机算法就至关因而一个跃阶函数。

咱们只须要找到阈值,而且拿输入的数据去对比,得出数据是大于仍是小于这个阈值,而后就能给出的就是0或1(正/负样本)的反馈。

对应到数学模型上:咱们只须要把算出来的结果映射到这个跃阶函数上看看大于0仍是小于0,就能说他是一个正样本仍是负样本。

感知器的模型虽然简单直观,但问题在于这个模型不够光滑。

若是一个新的样本点咱们计算出来结果等于0.01——只是比0大了一点点,就被分类为正样本,这样在实际应用的时候就可能会不够准确。同时,这个函数在0处有一个跃阶致使这一点不连续,在数学上也很差处理。

那么有没有什么方法可让这个函数更光滑一点呢?

在数学上恰好存在一个sigmoid函数有这样的特性。

这个函数的输入范围是“−∞→+∞”,而值域则光滑地分布在0到1之间。

对于这个模型的解释和感知机也稍微有些区别。

感知机:是根据输入的条件,判断是一个正样本仍是负样本。

而逻辑回归由于值域分布在0到1之间的特性,因此输出的是判断是:一个正样本或负样本的几率是多少?

咱们的学习策略便是:求全部训练样本的条件几率之积的最大值——也能够理解为求几率之积尽量大,这样模型预测的效果就会越准确。

逻辑回归的本质上是一个线性回归模型,只是在特征到结果的映射中加入了一层函数映射——即先把特征线性求和,而后使用函数g(z)将最为假设函数来预测。

咱们看到的参数z,实际上也是一个线性回归的方程,只不过在这里符号化表示。实际上求解的方式与线性回归是相同的——都是要经过损失函数的方式逼近最优解。

逻辑回归的目的是:将样本分红0或1两类。

可是,咱们也关心样本分类的准确性。

例如:一个肿瘤被预测出来是恶性的,咱们也会关心它是恶性的可能性有多大?

对逻辑回归的理解也能够是:咱们经过几率将样本分红了0和1两类。

由于逻辑回归不像感知机——经过一个固定的阀值去判断样本数据的正负性,因此在二维平面上也再也不是经过一条直线去判断数据。而是变得更加有包容性,能够把一些不能线性区分的数据集区分开来。

其根本缘由就是:sigmoid函数把因变量和自变量变成了曲线的关系,使得在函数在二维平面上的表现更为柔和。这里面损失函数发挥了很大的做用,这里再也不展开说明。

逻辑回归与感知机相比,有三方面的优点:

  1. 直接对分类可能性建模,不须要事先假设数据的分布状况。感知机算法中若是不先假设一下数据的分布再去肯定线的位置的话,极可能会算错,可是逻辑回归算法就避免了这个问题。
  2. 不只能够预测出类别,还能够给出具体的几率预测值。这对预测结果有更好的解释性。
  3. 有很好的数学性质,方便计算,工程量较小。

逻辑回归算法因其是如今最普遍使用的算法之一,经常用于寻找某一疾病的危险因素、我的信用评估、贷款/金融意图预测等等领域。

同时,也能够用来对数据作自动判别分析,好比:一条评论是正面仍是负面?一个用户的购买路径是男性仍是女性?预测用户会不会购买某种商品?等等。

逻辑回归应用普遍仍是由于它的模型与许多现实问题相吻合,可以帮助咱们快速解决不少实际的问题。

4. K近邻分类算法 K-Nearest Neighbor,KNN

上面咱们说到,感知机以及逻辑回归实际上都是一种二分类算法,非黑即白。

那,若是遇到多分类问题该如何解决呢?

有一种很是简单的算法能够帮助咱们快速解决这个问题——K近邻分类算法。

K近邻分类算法是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。

用官方的解释来讲:所谓K近邻算法,即存在一个样本数据(训练样本)集,而且样本中每一个数据都存在标签(类别)——也就是说样本集中每个数据都被分到一个类别中。输入新的数据后,将新数据的每一个特征与样本集中的数据对应的特征进行比较,而后算法提取样本集中特征最类似的数据的分类标签,便可觉得新输入的数据进行分类。

在训练数据集中找到与该实例最邻近的K个实例, 若是这K个实例的大多数都属于同一个分类,就把该输入实例分类到这个类中。

通常状况下,咱们只选择样本集中前K个最类似的数据,这就是K近邻算法中k的出处(一般K是不大于20的整数)。

好比:比较3个最近的数据,那么K=3。

最后,选择K个最类似的数据中出现次数最多的分类,做为新数据的分类。

这种思想实际上也很是好理解,有点像“人以类聚,物以群分”的说法——若是你身边的邻居都来自同一个公司,那么你极有可能也属于某个公司;若是你身边的朋友绝大多数都属于某个学校毕业,那么你极有可能也曾经在这个学校读过书。

这种方式也很相似投票机制,新来的数据与旧数据相比对,多数都属于某个类别时,采用少数服从多数的原则,给新数据归类。

一样,咱们转化到几何的方式去看这个算法,KNN能够当作:有那么一堆你已经知道分类的数据,而后当一个新数据进入的时候,就开始跟已知数据里的每一个点求距离,而后挑离这个训练数据最近的K个点看看这几个点属于什么类型,就把这个新的点归到这个同属大多数的类别里。

K近邻分类算法的优缺点都很是明显。

优势主要有两个方面:

  1. 精度很高,对异常数据也不敏感(所属类别是由大多数点决定了,一两个异常点不会有太大的影响)。
  2. 与上面的PLA、LR算法相比,不须要训练模型,易于实现,来一个新数据就能够立刻进行比对。

缺点则是:计算复杂度比较高。

由于要算新数据与每个临近点的距离,当维度超过二维时这就是一个空间复杂度很大的矩阵。

基于KNN算法的特色,目前主要应用在文本分类与商品推荐等场景。

在文本分类中像信息检索、手写字识别、机器翻译这样的场景均可以使用KNN算法以保证在有限的硬件资源下,提供给用户一个高效的检索系统。

5. 朴素贝叶斯分类器 Naive Bayes Classifier,NBC

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理和特征条件独立假设为基础,故统称为贝叶斯分类。

而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

朴素贝叶斯的简单之处在于:对于给出的待分类项,求解在此待分类项出现的条件下各个类别出现的几率。哪一个几率最大,就认为此待分类项属于哪一个类别。

这就有点像咱们走在街上,迎面走过来一个黑色皮肤的人,那咱们就猜他是非洲人,由于黑人中非洲人最多。

经过上述例子咱们能够看到:咱们判断一我的是非洲人基于一个很关键的信息,由于他是黑色皮肤的人。因此,咱们的判断其实是发生在“拥有黑色皮肤”这件事的状况下咱们的推断。

这种在其余已知事件发生的基础上去计算某件事发生的几率叫作“条件几率”。通常咱们使用贝叶斯定理求解条件几率。

要搞懂贝叶斯定理以前,咱们首先要搞懂“什么是正向几率?”和“什么是反向(条件)几率?”。

在贝叶斯研究以前, 人们已经可以计算正向几率。

好比:“假设袋子里有N个白球M个黑球,你伸手进去摸一把,摸出黑球的几率有多大?”。

然而在咱们实际生活中,平常能观察到的只是事物表面的结果——每每咱们只知道从袋子里取出来的球是什么颜色,并不能看到袋子里的实际状况。这时候咱们就但愿有一些方法能够经过观察这些取出来的球的颜色,能够推测出袋子里面黑白球的比例是什么样的。

咱们经过下图简单讲一下贝叶斯定理的组成:

朴素贝叶斯分类器的核心在于训练模型阶段——须要计算每一个类别在训练样本中的出现频率,以及每一个特征属性划分对每一个类别的条件几率估计,并将结果记录。

这一阶段是机械性阶段,根据前面讨论的公式能够由程序自动计算完成。

让咱们经过一个贝叶斯分类器解决拼写检查/纠正的例子加深理解:

当一个用户输入了一个不在字典中的单词时,咱们须要去猜想:这我的到底想要输出的单词是什么呢?若是用户输出了一个theu,那么他究竟是想输入they仍是then?到底哪一个猜想的可能性更大?

这个问题其实是在求“已知输入theu的状况下,咱们猜想他想输出they\then的几率谁更大?”

用上述符号表示即:P(B|A)。

咱们能够很容易计算出they\then单词的词频P(B),那么要怎么获得P(A|B)呢?

在这里能够用输入单词与正确单词在键盘上的距离来表示P(A|B)——即经过字母在键盘上的距离判断:下输入哪一个字母的可能性更高?

好比:在键盘上,Y和U离得更近,因此咱们会认为要输入Y可是不当心按成了U的几率更大一些。

经过上述的信息就能够计算出输出哪一个单词的几率更大。

朴素贝叶斯分类器的如下优势:

  1. 生成式模型,经过计算几率来进行分类,能够用来处理多分类问题并且分类的结果很容易被解释
  2. 所需估计的参数不大,对缺失数据不太敏感
  3. 无需复杂的迭代求解框架,适用于规模巨大的数据集

除了上述说到的拼写纠正之外,贝叶斯分类器还常常被用在垃圾邮件分类、文字广告过滤、识别恶性评论等等领域。

在许多场景下,朴素贝叶斯分类算法能够与后续讲到的决策树、神经网络算法相媲美,并且方法简单、分类准确率高、速度快。但这个算法也有一些像对输入数据的形式比较敏感、计算先验几率时的分类决策可能存在错误这样的缺点,在使用的时候仍是要根据具体的场景选择。

以上简单介绍了关于机器学习的一些算法,最后,感谢一下个人同行好友中翘。

相关文章
相关标签/搜索