mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2025-10-19 16:33:46 +08:00
mod
This commit is contained in:
150
极客时间专栏/成为AI产品经理/算法技术能力篇/08 | 算法全景图:AI产品经理必须要懂的算法有哪些?.md
Normal file
150
极客时间专栏/成为AI产品经理/算法技术能力篇/08 | 算法全景图:AI产品经理必须要懂的算法有哪些?.md
Normal file
@@ -0,0 +1,150 @@
|
||||
<audio id="audio" title="08 | 算法全景图:AI产品经理必须要懂的算法有哪些?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/00/c3/00bb3dbfbe4520a20044533c524916c3.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
从今天开始,我们正式进入算法技术能力篇的学习。在正式开始学习之前,我想先给你讲一个我亲身经历过的小故事。
|
||||
|
||||
我最开始做 AI 项目的时候,碰到过一个预测员工离职可能性的产品需求。当时,因为我对算法技术不熟悉,所以我只告诉算法工程师,我们要做一个预测员工离职的模型。因此,算法同学按照自己的理解,把它做成了一个预测员工可能离职的排序,而不是离职的概率。
|
||||
|
||||
很显然,这个模型和业务方的原始诉求是有出入的。但是,当我去说服算法工程师修改模型的时候,却被他说“你自己先搞清楚算法能做什么、不能做什么,再来和我谈”。后来我才知道,他的模型是按照回归的方式做的,得到的结果是未来预计离职的天数,最后自然是按照天数来做排序。
|
||||
|
||||
这件事也让我下定决定去学习算法技术,不说要学得多么精通,至少要知道常用算法的实现逻辑和应用场景,这也是我在算法技术能力篇要给你讲的。**这样一来,当你和算法同学协作的时候,能够减少很多沟通成本,知道如何给算法工程师提需求,能和他们同频沟通,就算是要对模型结果进行争执,也能更有底气**。
|
||||
|
||||
## 机器学习分类
|
||||
|
||||
这节课,我会先带你从宏观上了解目前机器学习的三大类应用场景,分别是分类问题、回归问题、聚类问题,以及怎么用相关算法来处理这些问题,最后帮你梳理一张 AI 产品经理需要掌握的算法技术全景图。这样,我们后面再去学习具体的算法,就能有一个更清晰的学习路径了。
|
||||
|
||||
这里,我先把分类、聚类和回归问题的定义总结在了下面的表格里,你可以先看看,对它们有个整体印象。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/fb/1c/fb4850b6c2274528b9fd5f46cdd5ac1c.jpeg" alt="">
|
||||
|
||||
有了印象之后,我们再结合具体的例子,来讲讲这些场景问题是怎么用相关算法解决的。
|
||||
|
||||
## 处理分类问题的算法
|
||||
|
||||
在实际工作中,我们遇到最多的问题就是分类问题,分类问题经常出现在分类判断、标签预测、行为预测这些场景中。
|
||||
|
||||
比如说,你现在是一个电商产品经理,有商城全部用户的历史行为数据,以及用户A、B、C、D的性别数据,希望预测商城其他用户的性别,可能是用户E。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/f1/fa/f1d5e84a17d5514fd8ae6e1a394579fa.jpeg" alt="">
|
||||
|
||||
这就是一个很经典的分类问题,这个问题的预测结果就是男性或者女性。**像这种判断一个事情的结果是“男/女”、“是/否”、“1/0”的问题就是二分类问题。**
|
||||
|
||||
不过,如果我把已知条件变换一下:你现在有商城全部用户的历史行为数据,以及用户A、B、C、D的婚姻状况数据,希望预测商城其他用户的婚姻状况。这个时候,预测的结果就是未婚、已婚或者是离异了,**像这种预测结果是多种情况的,就是多分类问题。**
|
||||
|
||||
那分类问题怎么解决呢?我们再回到刚才这个例子中。结合上面的表格,我们可以看到,已知性别的用户会呈现出来一种规律,就是女性浏览美妆品类次数远高于浏览数码类页面次数,而男性会呈现出相反的趋势。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/dd/4e/dd9debecd79391f544cfb86e9e88874e.png" alt="">
|
||||
|
||||
我们可以把性别和浏览页面次数呈现到一个图里,然后将用户浏览美妆品类页面,数码品类页面次数录入。这个时候,你会发现用户 E 和用户 A、C 离得很近,从数学的角度来看,距离越近就越相似,所以我们大概率认为 E 的性别应该和 A、C 一样,是女性。这就是分类问题的解决过程。
|
||||
|
||||
在机器学习的场景中,分类算法解决分类问题也是利用相似的原理,可用的算法非常多,常见的有逻辑回归、朴素贝叶斯、决策树、随机森林、K 近邻、支持向量机,以及神经网络等等。
|
||||
|
||||
总的来说,使用分类算法解决问题,我们必须要有已知的训练数据,才能对未知数据进行预测。当已知信息缺失的时候,我们又该怎么办呢?这个时候,我们要么考虑通过人工打标来处理数据,要么考虑使用**聚类算法**。这就是我接下来要讲的聚类问题的处理逻辑了。
|
||||
|
||||
## 处理聚类问题的算法
|
||||
|
||||
在机器学习中,我们经常需要给一些数据量很大,用户属性很多的用户数据进行分组,但往往很难下手。
|
||||
|
||||
我还是代入一个例子来给你讲讲,假设,你现在是一个客服系统负责人,为了减轻人工客服的压力,想把一部分常见的问题交给机器人来回复。解决这件事情的前提,就是我们要对用户咨询的商品问题先进行分组,找到用户最关心的那些问题。
|
||||
|
||||
这种需要根据用户的特点或行为数据,对用户进行分组,让组内数据尽可能相似的的问题,就属于聚类问题,用一个词概括它的特点就是 “物以类聚”。常见的聚类算法有层次聚类、原型聚类(K-means)、密度聚类(DBSCAN)。
|
||||
|
||||
那聚类问题该怎么解决呢?我们接着刚才的例子来说,假设我们现在有5条如下的咨询:
|
||||
|
||||
- 小爱同学和小爱音响有什么区别 ?
|
||||
- 小爱同学和小爱音响都是小米的吗 ?
|
||||
- 小米的蓝牙耳机怎么连接 ?
|
||||
- 华为路由器和小米路由器哪个可以在校园网内使用 ?
|
||||
- 一定要小米路由器才能用吗 ?
|
||||
|
||||
如果我们把每句话都看成单独的小组,这一共就是5个小组,那我们的目标就是把相似的问题合并成一个小组。最简单的办法,就是找出每个小组中的名词,把“各句中包含的名词一致的数量”看作“相似度”。这样一来,相同名词数量最多的两个句子就是最相似的。
|
||||
|
||||
按照这个思路,我把这 5 个句子中含有的名词都整理到了下面的表中,并用 “O” 进行了标记。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/fc/6a/fc781d43b735fdbb955069de0f9acc6a.jpeg" alt="">
|
||||
|
||||
这样,我们就能算出每一个句子和其他4句之间的相似度了。
|
||||
|
||||
- “句子 1”和“句子 2、3、4、5”的相似度分别是 2、0、0、0。
|
||||
- “句子 2”和“句子 3、4、5”的相似度是 1、0、0。
|
||||
- “句子 3”和“句子 4、5”的相似度是 0、0。
|
||||
- “句子 4”和“句子 5”的相似度是 1。
|
||||
|
||||
这样,我们也就能得出:最相似的小组是相似度为 2 的“句子 1”和“句子 2”,我们把这两个句子合并之后,5 个小组就变成了 4 个小组:
|
||||
|
||||
- “小组 1”:“句子 1”和“句子 2”
|
||||
- “小组 2”:“句子 3”
|
||||
- “小组 3”:“句子 4”
|
||||
- “小组 4”:“句子 5”
|
||||
|
||||
然后,我们再按照上面同样的方式把新生成的各小组进行聚类,就又会得到两个相似度为 1 的小组:
|
||||
|
||||
- “小组 5”:“句子 1” 、“句子 2”和“句子 3”
|
||||
- “小组 6”:“句子 4”和“句子 5”
|
||||
|
||||
就这样,当我们把所有相似的句子聚类到一起,就完成了聚类的过程。其实,聚类算法的原理很简单,就是根据样本之间的距离把距离相近的聚在一起。刚才,我是通过句子中的名词是否相同来衡量距离的,那在实际应用场景里,衡量样本之间距离关系的方法会更复杂,可能会用语义相似度、情感相似度等等。
|
||||
|
||||
同时,这个聚类的过程可以表示成带有层次的树形结构图,这就是层次聚类算法的原理也是它名字的由来。这种聚类方式可以是“自底向上”的聚合策略,也可以是“自顶向下”的分拆策略 。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/96/0b/966ef77dfce7d98778d41aebe8eb900b.jpeg" alt="" title="层次聚类">
|
||||
|
||||
总之,聚类算法解决问题的核心思想就是“**物以类聚,人以群分**”,所以,聚类分析较为重要的一个应用就是用户画像。
|
||||
|
||||
我们刚才说了,分类问题和聚类问题的差异在于分类问题需要根据已知的数据去学习,然后为新的数据进行预测,而聚类分析直接在已有数据中发现联系。但它们还存在着一个共同点,那就是它们都输出的是 “0” 或 “1” 这种**离散型的标签**。
|
||||
|
||||
离散型的标签指的就是非连续的一个个单独的标签。比如说,一个人的年收入可能是从几万到几千万这样的连续性值,但是如果我们将年收入的具体数值转化成低收入、中等收入、高收入、超高收入这些档,每一个档就是一个离散型的标签。
|
||||
|
||||
但有时候,我们在项目中确实需要预测一个具体的连续性数值,比如酒店的价格或股票的价格。遇到这类问题我们该怎么办呢?这个时候,我们就可以通过解决回归问题的算法来实现了。
|
||||
|
||||
## 处理回归问题的算法
|
||||
|
||||
在实际工作中,我们也经常会遇到回归问题,比如需要预测某个商品未来的销量,预测某只股票未来的价格等等。
|
||||
|
||||
下面我就通过一个预测销量调整库存的例子,来讲讲回归算法中线性回归的解题过程。
|
||||
|
||||
有这样的一个场景,你是一个电商产品经理,你们公司每件商品的库存都是通过预测未来产品的销量来动态调整的。这个功能的实现方式是,先根据商城 App 分析出用户的商品搜索次数,然后将每个商品的搜索次数和销量做数据分析,画出一个横轴为搜索次数,纵轴为销量的二维散点图。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/d3/0b/d3dcf811d6198971b7ae08273e61200b.jpeg" alt="">
|
||||
|
||||
我们以搜索小米路由器举例,从上图我们可以看到,相对密集的搜索次数都在1000次以下,当搜索次数超过1000次以后,散点变得稀疏起来。这样一来,我们就能根据数据拟合出一条回归直线。
|
||||
|
||||
这条回归直线上,因为销量和搜索次数成正比,所以它们都可以用**一元回归方程来表示**。如果我们假设影响销量的因素只有搜索次数这一个特征,那么在有了新产品和它的搜索次数之后,我们根据一元回归方程,就可以预测出新产品的销量了。
|
||||
|
||||
这个时候有的同学可能想说,“用户搜索次数虽然会影响销量,但我认为用户评价和库存也会影响销量啊”。接下来,我们就一起来验证一下这个假设。我们将库存、用户评价作为影响销量的两个因素,去分析它们之间的关系。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/60/65/60aa1785ef18bc2339aba6a01df33a65.jpeg" alt="">
|
||||
|
||||
如上图所示,当库存小于 40% 的时候,用户评价和销量都很低,当库存大于 80% 的时候,用户评价和销量呈线性增长。我们发现,用户评价和库存共同影响了产品销量,只有当库存大于 80% 且用户评价高于 0.6 的时候,产品才有较好的销量。因此,这三者之间的关系可以用**二元回归方程**进行量化。
|
||||
|
||||
当然,实际情况是像服务态度、物流时间、折扣力度、广告宣传、购物体验这些因素,它们也会或多或少地影响销量。我们可以把**这些因素也就是n个特征,都总结到同一个回归方程中**,用**多元回归方程**表示,具体的公式如下:
|
||||
|
||||
$$<br>
|
||||
\text { 销量 }=a_{0}+a_{1} * \text { 搜索次数 }+a_{2} * \text { 用户评价 }+a_{3} * \text { 库存 }+a_{4} * \text { 折扣力度 }+\cdots a_{n} * \text { 广告宣传 }<br>
|
||||
$$
|
||||
|
||||
通过这样的方式,我们就可以轻易地预测每种产品的未来销售,进而可以动态地规划库存和物流。当然,回归算法能做的还有很多,比如预测不同促销组合产生的盈利进而确定促销活动,预测广告的投入量进而估算盈利额等等。
|
||||
|
||||
对于产品经理来说,我们需要清楚的知道线性回归的原理,熟悉回归算法能解决的情况,比如它适合用来预测价格、销量,这类结果是连续值的问题。
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我结合三大类问题,给你讲了三大类常见算法和它们的应用场景。为了方便你的记忆,我把重点内容整理成了一张知识脑图,你可以去文稿中看一看,这里我就不重复了。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/12/32/127e681af48b78de40422e32dcfef932.jpg" alt="">
|
||||
|
||||
这里,我还想结合这三类算法,再给你举几个常见的应用场景,因为知道什么场景下使用什么算法来解决是我们最需要掌握的。
|
||||
|
||||
如果你希望知道你的用户会不会购买某个商品,你的用户在你们平台借款之后会不会不还钱,或者你想知道你的用户会不会购买你们平台的会员卡,这些就属于分类问题了,你们的算法工程师可能会选择逻辑回归,决策树来实现你的需求。
|
||||
|
||||
如果你希望知道你们平台某个商品未来的价格,预测你们小区未来某个时间点的房价,或者预测一下你的用户收入情况是多少,你们的算法工程师可能会选择使用回归算法来解决这些回归问题。
|
||||
|
||||
如果你想做一个用户画像体系,对用户进行分组打标签,这就属于聚类分析的领域了,你们算法工程师可以选择层次聚类,原型聚类等算法来实现你的需求。
|
||||
|
||||
当然,算法分类的方式不止一种,我们也可以按照建模时候有没有标签,把它们分成有监督、无监督和半监督算法。我之所以选择根据应用场景来分类,是因为你作为一个产品经理,应该关注的是,如何通过技术(算法)来解决业务场景中遇到的问题。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
如果我们要做一个预测用户未来能不能复购的模型,你觉得这属于什么问题,哪种算法可以解决呢?
|
||||
|
||||
期待在留言区看到你的设计和思考,我们下节课见!
|
93
极客时间专栏/成为AI产品经理/算法技术能力篇/09 | K近邻算法:机器学习入门必学算法.md
Normal file
93
极客时间专栏/成为AI产品经理/算法技术能力篇/09 | K近邻算法:机器学习入门必学算法.md
Normal file
@@ -0,0 +1,93 @@
|
||||
<audio id="audio" title="09 | K近邻算法:机器学习入门必学算法" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/a1/92/a1a4e8a6dcac068a28c1499d1f35f292.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
今天,我们正式进入算法的学习,来学习K 近邻算法(K-Nearest Neighbor),简称 KNN 算法。它是一种用来解决分类问题的算法,简单来说,就是用来预测用户是男是女,或者是否喜欢某件商品。**分类算法有很多,只不过,不同算法的实现机制不同,我们今天要讲的 KNN 算法是基于距离计算的方式来解决分类问题的。**
|
||||
|
||||
下面,我就借助生活中常见的例子,给你讲清楚 KNN 算法的原理、优缺点,以及应用场景。
|
||||
|
||||
## 如何理解 KNN 算法
|
||||
|
||||
我们的生活中总是充斥着各种各样的小抉择,这些抉择虽然对我们的影响不大,但总会让我们有些苦恼。比如,手机买什么牌子、买什么型号?午饭吃什么?周末陪女朋友去哪儿玩?你每次遇到这类问题的时候,都会怎么解决呢?
|
||||
|
||||
先别着急回答,我们先来做一个小测试题。如果现在就让你给女朋友选礼物,你会怎么做?我希望你能在 5 秒内,从下面 3 个选项中选一个:
|
||||
|
||||
1. 随便选一个就行了
|
||||
1. 问问周围兄弟们都送了什么礼物
|
||||
1. 做一份详细的报告,根据女朋友的情况量身定制礼物挑选方案
|
||||
|
||||
好了,我想你有很大可能会选择第2个选项。因为选1,就意味着你会承担更高的风险,选到一个非常不靠谱的礼物,还很有可能踩雷,而选3意味着你会花费大量的时间和成本去做准备,一般人估计也没有这么大的耐心。
|
||||
|
||||
事实上也是这样,如果你周围最好的几个朋友都送了女朋友口红,只有少数几个送了香水,那你选择送口红给女友更不容易踩雷,因此,你做出相似决定的概率也会更大。简而言之就是,你周围的环境将影响你的决定。
|
||||
|
||||
你选购礼物的逻辑其实就是 KNN 算法的实现思路了。通俗一点来说,**KNN 的原理就是,对于一个犹豫不决的选择,我们先参考周围最近的一些已经做出的选择,然后再做出相似的决定**,你也可以记成:“近朱者赤,近墨者黑”。
|
||||
|
||||
如果用数学去描述 KNN的原理,**就是对于一个待测的样本点,我们去参考周围最近的已知样本点的分类,如果周围最近的 K 个样本点属于第一类,我们就可以把这个待测样本点归于第一类**。
|
||||
|
||||
这个概念中提到了一个词“最近”,那我们该如何定义样本间距离的远近呢?通常来讲,我们会通过数学公式计算两个样本点之间的距离,最常见的一个计算方法就是欧式距离(Euclidean Space)。最后再做一个简单的统计,找到距离待测样本点最近的 K 个样本点中,哪些类别最多。当然除了欧式距离,还有很多距离计算的方式,如曼哈顿距离、余弦距离等等。
|
||||
|
||||
以上就是运用 KNN 进行分类决策的基本逻辑了。
|
||||
|
||||
## 应用场景:预测候选人能不能拿到Offer
|
||||
|
||||
知道了 KNN 算法的基本原理,接下来,我再通过一个预测候选者是否符合公司标准的例子,来说一说 KNN 算法的应用场景。
|
||||
|
||||
我之前参加过一个算法马拉松竞赛,这个竞赛的题目就是为公司的人事部门开发一套减少招聘成本的 AI 产品。它要求参赛者在已知公司历史**候选者姓名、工作年限、每月收,以及最终是否拿到公司 Offer** 的情况下,通过一个算法模型来预测一个新的候选者是否能通过公司的招聘考核,最终拿到 Offer。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/97/c8/97e1cf3d04c70c39f5c0fe35876910c8.jpeg" alt="">
|
||||
|
||||
上面左侧的图表图就是公司历史候选者的数据采样,我们将数据可视化制作出了二维平面图(如上图右)。其中,X 轴代表候选者的工作年限,Y 轴代表候选者目前的月收入,我们对拿到Offer的人用红色进行了标记,对没拿到的用蓝色进行了标记。
|
||||
|
||||
有了这些基础信息之后,我们接下来要解决的问题就是,怎么评估一个新候选者成功拿到 Offer 的概率。我们以上图中的千秋同学为例,他的薪资目前是 12.8 K,有 2.4 年的工作经验。
|
||||
|
||||
在对样本进行了评估之后,我们发现样本特征相对单一,并且数据量也不多,所以我们决定使用 KNN 算法来解决这个问题。具体的实现思路也很简单,就是给定一个人,再去寻找和他的相似度比较大的那些人,看看他们都是什么属性。
|
||||
|
||||
比如说,在这份数据中,我在千秋同学的附近,选出距离他最近的 3 个人,分别是潇然同学、斯南同学和莎佳同学。这三人中,潇然和斯南同学都拿到了 Offer,莎佳同学没拿到 Offer。这样一来,我们就可以直接预测出千秋同学是可以拿到 Offer 的,因为距离最近的三个人当中,拿到 Offer 的人数大于没有拿到 Offer 的人数,或者说“少数服从多数”。
|
||||
|
||||
当然,我知道你看到这个结论之后,肯定有非常多的疑问,别着急,听我接着说。首先,我为什么选择跟预测样本距离最近的 3 个样本呢 ?其实,这里的 3 就是 K 值(即,周围最近的 K 个样本点),你也可以选择 4 个或者 5 个或者其他的数字,但要注意的是 K 值的选取会影响到模型的预测效果。
|
||||
|
||||
当 K 取 1 的时候,就表示我们只评估与待测样本最近的一个样本的值是什么分类就行了,如距离千秋同学最近的是莎佳,她最终没有拿到 Offer ,所以,我们就可以预测千秋同学也拿不到 Offer。
|
||||
|
||||
当 K 取 9 的时候,就表示我们需要评估与样本集个数一样的样本点。可想而知,最终的结果就和整体的样本分布一样了,哪个分类的样本多,预测结果就是哪个分类,模型也就不起作用了。
|
||||
|
||||
**总的来说,当 K 越小的时候,模型就越容易过拟合,因为预测结果与最近一个样本点强相关。而 K 越大的时候,就越容易欠拟合,因为预测结果要考虑所有样本的情况,就相当于没有预测。所以,对于 K 的取值,一种有效的办法就是从 1 开始不断地尝试,并对比准确率,然后选取效果最好的那个 K 值。**
|
||||
|
||||
刚才这个例子,其实就是 KNN 一个最常见的应用场景:做分类。除此之外,KNN 还有一个比较常见的应用场景就是做推荐。
|
||||
|
||||
比如,在京东图书中,我们已知用户A和用户B的历史购买记录:用户 A 购买了《三体》《太空漫步》《流浪地球》;用户 B 购买了《原则》《影响力》《金字塔原理》。这个时候,如果京东图书要给一个购买了《三体》和《流浪地球》的新用户C进行图书推荐,它的推荐系统就可以通过计算出用户 C 和用户 A 的相似喜好,给用户 C 推荐其他的科幻小说。
|
||||
|
||||
到此,我们已经把 KNN 算法的原理和应用场景都讲完了,下面我们再来看看它的优缺点。
|
||||
|
||||
## KNN算法优缺点
|
||||
|
||||
虽然产品经理不需要写代码,但只有掌握了算法的优缺点,我们才能更好地评估算法适不适合当前业务需求,并且落地业务场景能达到什么样的效果。
|
||||
|
||||
**我们先来说KNN算法的优点。**
|
||||
|
||||
KNN 算法最大的优点就是简单易懂,实现起来非常容易,简单到都不需要进行训练了,只要把样本数据整理好,就可以直接预测新数据了。
|
||||
|
||||
**除此之外,KNN 在处理边界不规则数据的分类问题时要比线性分类器的效果好。** 线性分类器可以理解成画一条直线对数据进行分类,不规则的数据则很难找到一条线来分割开所有样本点数据。而KNN 的预测方式是以未知样本点作为中心点,然后画一个圈,使得圈里有 K 个数据,这就完全不用考虑数据的边界问题。
|
||||
|
||||
但是,KNN 的缺点也非常明显,首先是它只**适合小数据集**,因为 KNN 是基于距离的分类算法,如果数据量特别大的时候,就需要计算待测样本和每一个已有样本之间的距离,那样计算量是非常大的。对于大数据集,一般会选型 KNN 的优化算法,如 kd-tree 来实现。
|
||||
|
||||
**其次,KNN算法对数据容错性偏低。**因为 KNN 对于数据样本的质量依赖度很高,如果训练数据集中存在错误的样本数据,并且又刚好在待测样本的旁边,这样就会直接导致预测的数据不准确。
|
||||
|
||||
也正是因为 KNN 对于数据样本的依赖度很高,如果数据分布不均衡,同样会影响 KNN 的预测效果。比如,有的类别数据量特别多,那么基于 KNN 的预测效果就会很差,因为特别多的数据就会占有绝对的投票优势。针对这种情况改进的方法就是,对待测样本周围 K 个近邻数据增加权重,距离越近,权重越大。
|
||||
|
||||
## 总结
|
||||
|
||||
KNN 算法是机器学习领域中的入门级算法,作为产品经理,我们要掌握它的核心原理、应用场景以及优缺点。
|
||||
|
||||
KNN 核心原理你可以理解为“近朱者赤近墨者黑”,即基于距离的一个简单分类算法。在数据量不多,特征都相对单一的业务场景下(如我们课程中的例子)很适合选择 KNN 算法。因为构建起来不复杂,所以当团队中缺少算法同学的情况下,产品经理就可以提出建设性的建议,根据场景特点来选型 KNN 算法。这样,工程研发同学也可以通过学习完成算法的实现,最终实现业务需求。
|
||||
|
||||
KNN 的优点很明显,简单易实现,可以快速解决多分类问题,并且相对于线性分类算法用一条直线来分割数据的方式来说,KNN 对于边界不规则的数据预测效果会更好。
|
||||
|
||||
对于KNN 缺点,你要记住,KNN 对于数据的容错性很低。比如,当待测样本周围的 K 个数据样本中存在错误样本的时候,就会对预测结果有很大的影响。
|
||||
|
||||
另外,KNN 一般适用于样本数较少的数据集。因为它在处理数据量比较大的样本时会非常耗时,所以,在实际工业中,我们一般会选用 Kd-tree 来进行预测。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
在你现有的业务场景需求中,有适合应用 KNN 算法来实现的吗?
|
||||
|
||||
欢迎在留言区分享你的观点,如果你的朋友也正在学习KNN算法,不妨也把这节课转发给他,我们下节课见!
|
100
极客时间专栏/成为AI产品经理/算法技术能力篇/10 | 线性回归:教你预测,投放多少广告带来的收益最大.md
Normal file
100
极客时间专栏/成为AI产品经理/算法技术能力篇/10 | 线性回归:教你预测,投放多少广告带来的收益最大.md
Normal file
@@ -0,0 +1,100 @@
|
||||
<audio id="audio" title="10 | 线性回归:教你预测,投放多少广告带来的收益最大" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/41/26/41d8827025f0e2edde90315b5e00d626.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
上节课,我们讲了分类问题中最基础的 KNN 算法。这节课,我们来讲回归问题中最经典的线性回归(Linear Regression)算法。
|
||||
|
||||
我会先结合地铁排队的常见例子,带你理解线性回归算法的原理,再利用它去实现投放广告的收益预测,给你讲清楚它的应用场景。
|
||||
|
||||
## 如何理解线性回归算法?
|
||||
|
||||
如果你每天上班坐地铁,肯定碰上过早高峰排队,尤其是在疫情期间,地铁协管员会要求所有人站好队,并且前后间距大约 1 米。尽管队伍中的人没有刻意站成一条直线,但是从队伍外面看过来,它依然是一条直线。
|
||||
|
||||
某一天,你突然特别着急地跑到地铁站,因为你起来晚了,赶不上这班地铁就要迟到了,所以你很想一跃而起插入到队伍前面去,但是按照要求,你只能排在队伍的最后面,再和前一个人保持差 1 米的距离。
|
||||
|
||||
同样地,其他新来的人要上地铁,也一定要排在队尾,再和前一个人间隔1米。这个操作看似很平常,不知道你有没有想过这背后的科学依据呢?
|
||||
|
||||
其实,只要你按照我们刚才说的排好了队,就说明你已经成功在你的潜意识里构建了一个模型,去寻找你自己的站位。这个模型就是线性回归的模型,你的站位就是这个模型的解,是一个具体的数值。这个模型中,所有人的站位都分布在一条直线的周围,因此,后来的人也都会自觉地站在这条直线的周围,让它依然是一条直线。
|
||||
|
||||
这就是线性回归这个模型背后的逻辑思路,也就是**根据已有的数据去寻找一条直线,让它尽可能地接近这些数据,再用这条直线预测新数据的可能结果,这个结果是一个具体的数值**。
|
||||
|
||||
那这条直线怎么找呢?我们就需要知道线性回归的原理了。
|
||||
|
||||
### 线性回归算法的原理
|
||||
|
||||
刚才,我们一直提到“直线”,那你还记得直线的数学公式吗?我们今天会一直用到它,所以我先带你来复习一下。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/5d/5b/5db58f1c570193df922dd6c6d503b45b.jpeg" alt="">
|
||||
|
||||
在这个式子中,**我们可以通过一组合适的 A 和 B ,去描述一组对应的事物 X 和 Y 之间的对应关系,然后再用得到的分布来描述未知事物的可能解,这就是**线性回归**用来做预测的“套路”**。
|
||||
|
||||
回到刚才排队的例子,如果我们把队伍中每个人的顺序和对应的站位想象成已知信息 X 和 Y,那么我们一定可以找到一组合适的 A 和 B 来描述这条直线,让尽可能多地人站在这条直线上面或者离这条直线非常近。这个时候,我们其实已经找到了这条直线的分布。
|
||||
|
||||
最后,我们再用这个已知的分布,其实也就是 A 和 B 的对应关系,代入到新人的顺序信息,就可以求出这个新人应该站在什么位置了。
|
||||
|
||||
线性回归算法非常常用,它的原理我们一定要记住,所以我再来讲一个例子来帮助你理解。比如说,我们现在已知一部分人的身高和体重信息,想要通过身高来预测一些新人的体重信息,我们该怎么做呢?
|
||||
|
||||
因为大部分人的身高和体重是成正比的,也就是说身高越高,体重越大。所以,我们可以假设体重为 Y,身高为 X,然后通过已知数据找到一组合适的 A 和 B,再把求得的 A 和 B 以及这位新朋友的身高信息 X代入到公式当中,我们就可以求得这个新朋友的体重了。
|
||||
|
||||
刚才我们得到的其实都是一元回归方程,因为影响结果Y的其实只有一个影响因素X,那如果有多个影响因素我们该怎么办呢?就比如在预测银行贷款的例子中,贷款人的工资和年龄都会影响贷款额度。这个时候,我们就要构建二元回归方程了,它的分布也不再是一条直线,而是一个较为复杂的平面了,公式是Y=A<sub>1</sub>X<sub>1</sub>+A<sub>2</sub>X<sub>2</sub>+B。同理,还有多元回归方程。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/69/37/699190176359e717e5c980fe889dbf37.jpeg" alt="">
|
||||
|
||||
线性回归算法的原理我们讲完了,但有的同学可能会问,我们怎么保证所有线性分布的数据都落到一条直线上,更准确点来说,就是怎么让每次生成的直线到所有点的距离最小呢?这个时候,我们就需要引入损失函数,来对每次生成的直线进行评估。
|
||||
|
||||
### 如何计算最优解?
|
||||
|
||||
在数学中,我们会定义一个距离公式来**计算线性回归的预测值和真实值之间的差异**,放在我们例子中,就是计算地铁上所有排队人的站位与理想直线站位的误差到底有多大。当然如果每个人站的位置都很好,那所有人的位置距离这条直线的误差之和就会很低,反之就会很大。
|
||||
|
||||
这个公式在机器学习中就被称作**损失函数**,也叫代价函数。**损失函数就可以用来评价模型的预测值和真实值之间不一样的程度,损失函数值越小,模型性能越好。**而平方残差和(RSS,Residual Sum of Squares)是一种最常见的损失函数,它可以用来计算每一个样本点的结果值和当前函数值之间的平方差,差值越小,回归模型做得就越好。差值的具体计算方式,我们只要了解就可以了,我把相应的图片放在了下面,你可以看一看。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/72/a4/72cyy64b95e4cb69c454f1e9613169a4.jpeg" alt="">
|
||||
|
||||
## 线性回归算法的应用场景
|
||||
|
||||
到这里,我们已经明白线性回归算法到底是怎么操作的了。为了把它更好地应用到实际问题中,我再结合一个预测广告的例子,来给你讲讲这个算法到底能用来解决什么问题。
|
||||
|
||||
假如,你是京东手机部门的产品经理,现在部门要推出一款明星产品:“京造手机”。领导为了让产品卖得更好,就到处去投放广告,让大家都知道这个产品,激发大家购买的欲望。因为一般来说,广告投放得越多,钱花得越多,知道的人越多,产品卖得越多。
|
||||
|
||||
那根据历史累计的广告投放经费和销售额,我们可以画出一张关系图,图上每个点对应的 X 轴代表广告费,Y 轴代表销售额。结合这张图我们可看出,有些坐标点的收益相对较高,有些坐标点的收益相对较低,大概率它们是符合线性关系的。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/c5/20/c50eab9e8571yy55acc26bf25ac4f520.jpeg" alt="">
|
||||
|
||||
已知线性回归方程是 Y = AX + B,我们将已有数据代入到这个方程中,然后求得出一组 A和 B 的最优解,最终拟合出一条直线,使得图中每个点到直线的距离最短,也就是我上面说的损失函数最小。这样,我们就能通过这个最优化的 A 和 B 的值,进行估算广告经费和销售额的关系了。
|
||||
|
||||
虽然它对于每一个单点来说都不是那么精确,但有了这条线,你只需要设定一个广告费的数额,就一定能计算出一个销售额。这样一来,当你在开部门周会的时候,就可以跟领导汇报:“只要我们投入多少的广告费用,GMV 就能达到我们这个月的指标”。
|
||||
|
||||
除此之外,线性回归可以应用在产品采购和生产线的许多阶段。比如,我们经常需要预测某个商品未来的销量,预测库存等等。总之,我们作为产品经理,要善于挖掘各种需求,利用这些算法技术来提高销量。
|
||||
|
||||
## 线性回归算法的优缺点
|
||||
|
||||
因为线性回归算法很简单,数学原理很清晰,所以它的**运算效率很高**。又因为我们最终得到的是一个公式函数,所以根据计算出的公式系统,我们就可以很明确地知道每个变量被影响的大小,所以它**具有很强的可解释性**。这一点有助于产品经理理解影响模型效果的因素的变化,也有助于我们通过非技术性的语言想领导进行汇报。
|
||||
|
||||
但也正是因为线性回归的算法太过于简单,所以预测的**精确度相对较低**,不相关的特征会对模型的效果好坏有很大的影响,而且在数据量较小的情况下,很容易出现过拟合的问题。因此,在实际工业中,我们会更多地应用非线性回归的方式,比如决策树回归、KNN回归、随机森林回归等,然后通过模型融合得到更为精准的结果。但它们的原理基础都来源于线性回归模型,所以我们一定要掌握好线性回归。
|
||||
|
||||
除此之外,线性回归的也有个很明显的缺点,就是**不具备求解一个非线性分布的能力**。也就是说,如果你的数据不是简单地分布在一条直线周围,那么你用线性回归求解的分布也会误差很大,从而对未知测试数据的评估结果也不准确。对于这个问题,我们会在接下来的课程中介绍更多的方法,你可以先自己想想。
|
||||
|
||||
## 总结
|
||||
|
||||
线性回归算法也是机器学习领域中的入门算法,主要用来预测具体的连续性数值。今天,我带你总结了它的核心原理、应用场景以及优缺点。
|
||||
|
||||
首先,线性回归的核心原理,就是根据原有数据通过线性回归方程 Y = AX + B,把已有数据代入到这个方程里,求出一组 A 和 B 的最优解,最终拟合出一条直线,然后通过每个数据到直线的距离最短,也就是损失函数最小。这样一来,我们就能通过这个最优化的 A 和 B 的值,估算出新的数据 X 和 Y 的关系,进行数据的预测。
|
||||
|
||||
其次,线性回归也可以应用到很多预测具体数值的场景中,比如预测身高、预测销售额、预测房价、预测库存等等,但前提是这些场景中的数据是符合线性分布的。
|
||||
|
||||
最后,线性回归的优点可以总结为三点,**简单易实现,运算效率高,可解释性很强**。缺点主要有一点,**就是预测的准确度比较低**。因此,我们在实际工作中,会更多地应用非线性回归的方式。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
假设,你们公司正在向市场推出一种新产品,但还没确定以什么价格进行销售,你能利用今天学习的线性回归,设计出一个实现方案吗?
|
||||
|
||||
如果你已经有思路了,可以直接在留言区写下你的答案,如果还是没思路,你可以参考我下面给出的提示:
|
||||
|
||||
>
|
||||
<ol>
|
||||
- 预先选择几个价格点,分别对测试客户做市场调研,得到销售额与用户的反馈;
|
||||
- 使用线性回归推断价格和销售额之间的关系,从而确定销售产品的最佳价格点。
|
||||
</ol>
|
||||
|
||||
|
||||
实践方案设计好后,你觉得在具体的落地实践上还有什么需要考虑的吗?欢迎在评论区分享你的观点,如果你的朋友正在为预测类问题而苦恼,也欢迎你把这节课分享给他。我们下节课见!
|
109
极客时间专栏/成为AI产品经理/算法技术能力篇/11 | 逻辑回归:如何预测用户是否会购买商品?.md
Normal file
109
极客时间专栏/成为AI产品经理/算法技术能力篇/11 | 逻辑回归:如何预测用户是否会购买商品?.md
Normal file
@@ -0,0 +1,109 @@
|
||||
<audio id="audio" title="11 | 逻辑回归:如何预测用户是否会购买商品?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/89/yc/894024b954b405295455facb518cbyyc.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
上节课,我们讲了线性回归算法。这节课,我们要讲一个和线性回归在名字上很相近的算法,它叫逻辑回归(LR,Logistic Regression)。虽然名字很相近,但是它们却有着本质上的差异。因为,逻辑回归是一种分类算法,解决的是分类问题,或者说,逻辑回归就是用来预测某个事情是“是或者否”这样的概率。
|
||||
|
||||
那为什么会有这样的差异,它们的区别到底是什么,逻辑回归可以解决什么样的分类问题呢?我们今天就通过一个预测用户购买商品的例子来好好聊一聊。
|
||||
|
||||
## 如何理解逻辑回归算法?
|
||||
|
||||
假设,最近你们公司组织了一场创新技术大赛,你作为 AI 产品经理,兴致勃勃地报了名。大赛的题目是预测公司附近的房价在未来某一天**是涨还是跌**,现有数据是公司附近每天的**人口数量**、**房屋面积**,以及**房屋价格**。
|
||||
|
||||
仔细分析已知数据之间的关系,我们发现,房屋价格会受到公司附近的人口数量和房屋面积这两个因素影响,它们之间关系大概率会是线性的。如果用我们上节课学过的线性回归算法来解决,这就是个二元线性回归问题,也就是通过每天已知的人口数量和房屋面积来预测房屋的价格。
|
||||
|
||||
这个时候,线性回归方程是:`房价 = A1*人口数量 + A2*房屋面积 + B`。
|
||||
|
||||
不过,当有两个变量的时候,问题就会更复杂,所以为了方便你理解,我们把这个模型简化一下,先只把“人口数量”这个影响房价的重要特征留下。这样一来,我们根据线性回归算法就能画出一个房价随人口数量变化的图形,它的公式是:房价 = 人口数量 * A + B。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/2d/82/2dfe68331e3ee346777a3af6ba860582.jpeg" alt="">
|
||||
|
||||
到这儿,整个解决的过程都很顺利。我们通过线性回归对已知的信息,即房价和人口数量的关系进行了评估,然后通过这个关系对未来某天的人口数量做进一步分析,得到未来某天的房价是涨还是跌。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/14/d4/1415e43c1b31b825152293dd5b80a6d4.jpeg" alt="">
|
||||
|
||||
但这个时候问题来了,一旦这些数据中有几天的房屋价格信息被登记错了,而我们又把这些错误的数据录入到线性回归方程中(如上图所示),拟合出来的直线就会产生很大的偏移,这会让整个地区的房屋价格分布远远偏离原有的正常范围。这个时候我们该怎么办呢?
|
||||
|
||||
### 逻辑回归算法的原理
|
||||
|
||||
当线性回归的预测结果,由于受到个别极端数值的影响而不准的时候,我们就可以用逻辑回归来解决。
|
||||
|
||||
在数学中,我们通常会采取一些平滑函数,去减小这些极端值对于整体分布的影响,让整体的分布更加集中。**所谓的平滑函数,你可以理解为是把线性回归预测到的具体的值,通过一个函数转化成为 0~1 的一个概率值**,如下图所示。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ce/39/cedfd24b62f6829c073c0dcbbb1c9439.jpeg" alt="">
|
||||
|
||||
比如,最常见的平滑函数就是 sigmod 函数,通过这个函数的映射,我们可以把某些极端值产生的影响变得非常微小,尽可能地降低它们造成误判的结果,而且,这个函数的输出是在 0~1 之间,也就是说逻辑回归的结果会输出一个事件的概率。对应到我们刚才的例子中,就是当sigmod 函数的输出大于 0.5 的时候,我们预测房价就会涨,小于 0.5 的时候,我们预测房价就会跌。
|
||||
|
||||
说了这么多,这里我再带你总结一下预测房价的流程。我们首先做一个线性回归,此时预测出来的结果值 Y 可以是一个任意连续值,然后我们再在这个结果 Y 基础上调用一个函数 sigmod,把一个评估结果顺利转化成了一个事件的概率。这就是逻辑回归在机器学习中的应用思路了。
|
||||
|
||||
总的来说,**因为线性回归的结果可以是任意大小的连续型数值,所以这类回归模型可以被更广泛地应用在预测价格等任务上。而逻辑回归模型的输出只能在 0 到 1 之间,也就是表达一个事件会发生的概率,所以被广泛地应用在分类问题上**。
|
||||
|
||||
### 如何计算逻辑回归的最优解?
|
||||
|
||||
到这儿,我们就把逻辑回归的原理讲完了。不过,我还想再和你聊聊逻辑回归最优解的问题。上节课,我们在计算线性回归最优解的时候,需要找到所有样本点相对于整体分布的距离当作损失函数的评估目标,也就是让线性回归的预测值和真实值之间的差异越小越好。
|
||||
|
||||
在逻辑回归里,我们一般会采用交叉熵函数的输出结果作为损失函数的评估目标,根据它来更新逻辑回归中的参数,再通过这些参数让整体的分布更加准确。
|
||||
|
||||
损失函数有很多种,像是我们这两节课说的平方损失函数,交叉熵损失函数,还有绝对值损失函数等等。实际工作中,我们需要根据不同的算法来选择特定的损失函数。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/56/c2/56819ef87623624125695de56c141fc2.jpeg" alt="">
|
||||
|
||||
交叉熵损失函数一般是用来度量实际输出与期望输出之间的距离,交叉熵的值越小,两个概率分布就越接近,拟合得就更好。在我们的例子中,同样可以采用这个逻辑去分析样本真实分布和实际输出分布之间的误差。
|
||||
|
||||
## 逻辑回归算法是如何应用的?
|
||||
|
||||
最后,我们再来说说逻辑回归算法可以解决的问题。比如说:
|
||||
|
||||
- 判断用户的性别
|
||||
- 预测用户是否点击指定商品
|
||||
- 预测用户是否购买指定商品
|
||||
|
||||
这些问题除了是项目的目标以外,本身也可以帮我们更好地了解用户、服务用户。
|
||||
|
||||
那逻辑回归是怎么解决分类问题的呢?因为逻辑回归属于有监督学习的分类算法,所以在使用它之前,我们必须要先收集一批已标注好的数据作为训练集,比如说用户的基本信息、浏览日志,购买日志等等。
|
||||
|
||||
下面,我们就以预测用户对商品的购买偏好为例,看看使用逻辑回归是怎么实现的。其实我们可以将这个问题转换为是预测用户在未来某个时间段是否会点击某个商品,比如苹果手机。当我们把用户会点击标记为 1,不会点击标记为 0,这就变成了一个二分类问题。
|
||||
|
||||
整个过程可以理解成是,我们要利用历史点击过苹果手机的用户的行为日志,通过逻辑回归算法训练出一个模型,当输入一个新用户的浏览行为的时候,这个模型就能输出这个新用户点击苹果手机的概率。
|
||||
|
||||
这其实就是模型设计,我们在[第6课](https://time.geekbang.org/column/article/325072)讲过,模型设计最重要的工作是定义模型的目标变量和抽取数据样本。那针对刚才这个场景,模型的目标变量就是用户点击了苹果手机商品页面,数据样本就是历史产生过点击行为的用户浏览日志。这里,我们会用到的特征包括用户在京东的浏览,购买的历史信息。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/04/ef/046565a9c0414a15131b6b2ef5f954ef.jpeg" alt="">
|
||||
|
||||
然后,我们提取指定的时间跨度的特征数据,比如30天内的,用来生成的训练集数据,经过人工过滤,我们最终得到了30天内,浏览过苹果手机页面的用户特征和标签数据。
|
||||
|
||||
如果用户在给定的时间内购买了指定商品,就作为正例,没有购买,则作为负例。然后通过逻辑回归算法对每个指定的商品训练一个二分类模型,将训练好的模型保存下来,就可以用于预测用户在某个商品上的购买概率了,这种预测结果很适合用到推荐等场景中。
|
||||
|
||||
总的来说,逻辑回归模型作为基础的分类模型,它可以告诉你一个事件发生的概率,也就是帮你判断一个事件的可能结果。所以除了预测商品点击和购买率之外,我们还可以通过逻辑回归模型进行股票市场的分析判断,对股票形势进行预测。此外,逻辑回归模型也广泛应用在智能领域中,比如我们手机中指纹解锁、面部识别、智能医疗等等。
|
||||
|
||||
## 逻辑回归算法的优缺点
|
||||
|
||||
因为逻辑回归在线性回归基础上,加了一个 sigmod 平滑函数,把一个预测连续值转化成了一个概率值,所以,逻辑回归也继承了线性回归算法的全部优点,也就是运算效率高、可解释性强等等优点。不仅如此,逻辑回归因为采取了平滑函数,所以它还减小了极端值对于整体分布的影响,让整体的分布更加集中。
|
||||
|
||||
也正是因为逻辑回归模型简单高效,易于实现,所以它一般也会用来为后续模型优化提供一个不错的 baseline,就比如,我们在排序这样的服务中也使用了逻辑回归模型。
|
||||
|
||||
不过,既然继承了线性回归的优点,逻辑回归同样也存在和线性回归类似的缺点。作为分类模型,它是根据事物的线性分布转化为概率作为判断,也就是说如果一个事物不是简单的线性分布,那么它的结果也不会很理想。
|
||||
|
||||
## 总结
|
||||
|
||||
逻辑回归算法是机器学习领域中经典的分类算法,作为产品经理,我们要掌握它的核心原理、应用场景以及优缺点。
|
||||
|
||||
逻辑回归的核心原理就是在线性回归模型基础上,把原有预测的连续值转化成一个事件的概率,用来解决分类问题。在实际应用中,逻辑回归也可以在线性回归的基础上做进一步预测。
|
||||
|
||||
比如说,线性回归可以用来预测身高、销售额、房价、库存是多少,逻辑回归就可以预测身高是高了还是矮了,预测销售额提升了还是降低了,预测房价涨了还是跌了,预测库存够用还是不够用等等。
|
||||
|
||||
总之,逻辑回归一般用来预测广告点击率、商品点击率、商品推荐、股价预测、产品销量预测等等。
|
||||
|
||||
最后,逻辑回归优点可以总结为4点,简单易实现,运算效率高,可解释性很强,模型分布更集中,它的缺点是对于非线性分布的预测结果不会很理想。
|
||||
|
||||
重要知识总结完了之后,我还想说一个额外的问题,我们知道逻辑回归算法和 KNN算法都是分类算法,也都可以解决分类问题,那你知道它们之间的区别吗?你可以先自己想想,为了方便你理解,我把它们之间的对比表格放在了下面,你可以看一看。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/6f/ec/6f422eef49d4058949b233a106160aec.jpeg" alt="">
|
||||
|
||||
## 课后讨论
|
||||
|
||||
假设,我们现在有某个网站 1000 个用户的行为数据,以及这些行为数据对应标注的用户性别,你能通过逻辑回归,利用这些行为数据实现对用户性别进行预测的功能吗?特征和标签的示例参考如下:
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ea/6a/ea42b044425a54133973d22bde51446a.jpeg" alt="">
|
||||
|
||||
期待在留言区看到你的思考和设计方案,我们下节课见!
|
111
极客时间专栏/成为AI产品经理/算法技术能力篇/12 | 朴素贝叶斯:让AI告诉你,航班延误险该不该买?.md
Normal file
111
极客时间专栏/成为AI产品经理/算法技术能力篇/12 | 朴素贝叶斯:让AI告诉你,航班延误险该不该买?.md
Normal file
@@ -0,0 +1,111 @@
|
||||
<audio id="audio" title="12 | 朴素贝叶斯:让AI告诉你,航班延误险该不该买?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/33/86/339f2f4yy19169f41b437790f37d2d86.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
今天,我们接着来讲一个基础的分类算法,朴素贝叶斯(NBM,Naive Bayesian Model),也可以简称 NB 算法。
|
||||
|
||||
你可能想说,贝叶斯我听过,什么叫朴素贝叶斯呢?其实,朴素贝叶斯就是我们在贝叶斯原理的基础上,预先假定了特征与特征之间的相互独立。那特征之间的相互独立是什么意思呢?简单来说,一个人的性别是女性和她是中国国籍这两项特征就是相互独立的,因为她的国籍不会影响到她的性别。那特征之间不相互独立也很好理解了,像是一个人的身高会影响他衣服的尺码,所以身高和衣服的尺码就不是相互独立的。
|
||||
|
||||
那特征与特征之间相互独立的好处是什么呢?朴素贝叶斯算法怎么解决分类问题呢?我们又该怎么使用它呢?今天,我们就通过一个预测购买航班延误险的例子,来给你详细讲一讲。
|
||||
|
||||
## 如何理解 朴素贝叶斯 算法?
|
||||
|
||||
有的同学可能对贝叶斯算法还不是非常熟悉,或者忘得差不多了,所以在讲朴素贝叶斯算法之前,我们先来说说贝叶斯算法以及相关的基础概念。
|
||||
|
||||
### 1. 贝叶斯的原理
|
||||
|
||||
贝叶斯是由一名英国数学家提出来的,贝叶斯就是这个数学家的名字。那它是干什么的呢?
|
||||
|
||||
比如说,我们拿到一个长得很大的西瓜,拍一拍它会有咚咚咚的声音,而且这个西瓜的价格还特别贵,那我们就觉得它应该挺甜。虽然这个西瓜不一定是甜的,但是这些经验可以帮助我们在一定概率下找到甜西瓜。
|
||||
|
||||
这就是贝叶斯的原理:**当不知道这个事物实际情况的时候,我们可以根据一些相关的条件来判断这个事物的本质**。与贝叶斯相关的基础概念有 3 个,分别是**条件概率、先验概率、后验概率**。
|
||||
|
||||
**条件概率**就是事件 B 在另一个事件 A 已经发生条件下的概率,记作 P(B|A)。在统计学中,也称之为似然函数。比如说,北京下雨后,发生道路堵车的概率。
|
||||
|
||||
**先验概率**是事件 A 或 事件 B 是根据经验来判断发生的概率,记作 P(A)、P(B)。比如说,今天我面试了某厂的员工,根据过去的经验这个公司来的员工都很优秀,所以我判断这个人大概率也很优秀。
|
||||
|
||||
**后验概率**是我们已经看到某个事情发生了,再判断这个事情发生原因的概率,即**在事件已经发生后,推测原因**。比如 P(A|B) 是已知 B 发生后 A 的条件概率,也叫做 A 的后验概率。比如说,我们知道一个西瓜很甜,这个西瓜很甜的原因可能是土壤好,光照充分等等。这个时候,一个西瓜很甜是因为它的土壤非常好的概率,就是后验概率。
|
||||
|
||||
实际上,**贝叶斯的原理就是根据先验概率和条件概率估算得到后验概率。**
|
||||
|
||||
### 2. 朴素贝叶斯的原理
|
||||
|
||||
朴素贝叶斯就是在贝叶斯的原理上,加了一个前提假设:所有的条件对结果都是独立发生作用的。这该怎么理解呢?
|
||||
|
||||
我们先来看朴素贝叶斯的公式:
|
||||
|
||||
$$<br>
|
||||
\mathrm{P}(A \mid B)=\frac{P(B \mid A) P(A)}{P(B)}<br>
|
||||
$$
|
||||
|
||||
你可能会说,看到公式我就头大。别着急,我们这就来快速理解一下这个公式。我们假设,公式里的 A 代表堵车,B 代表北京下雨,P 代表概率,所以我们可以得到这几个概率:
|
||||
|
||||
- P(A):堵车的概率,也就是事件 A 发生的概率;
|
||||
- P(B):下雨的概率,也就是事件 B 发生的概率;
|
||||
- P(B|A):在堵车的情况下,北京下雨的概率,也就是在 A 的情况下,发生 B 的概率;
|
||||
- P(A|B):在北京下雨的情况下,堵车的概率,也就是在 B 的情况下,发生 A 的概率。
|
||||
|
||||
那朴素贝叶斯公式就可以理解成是在北京下雨的情况下,求堵车的概率。根据过往的统计结果,我们可以得到 P(A)=60%,P(B)=30%,P(B|A)=40%,根据公式:P(A|B)=P(B|A) P(A)/P(B) = 40% * 60% / 30% = 80%。也就是说,在北京下雨的情况下,有 80% 的可能性会堵车。
|
||||
|
||||
因此,**在实际的应用中,朴素贝叶斯更适用于文本分类、情感分析、垃圾邮件分类这类场景,毕竟这些数据的相互独立性更高。另外,朴素贝叶斯还会和协同过滤一起,使用到推荐系统中**。当然,在实际工作中,贝叶斯的应用会更加复杂。接下来,我就以售卖机票的场景下,是否增加延误险的需求为例,来给你讲讲它的应用。
|
||||
|
||||
## 朴素贝叶斯的应用案例
|
||||
|
||||
之前,国内的 OTA 行业(Online Travel Agency,在线旅行行业)基本都接入了延误险。业内的做法是在售卖机票的时候,直接搭售延误险,但这样的产品设计对于用户体验来说是有损害的,用户往往在不知情的情况下,购买了本不需要的产品。
|
||||
|
||||
这个时候,我们就可以通过预测航班是否可能延误,给用户提一个航班延误概率的提示,让用户自己做主是否有购买延误险。从平台角度来说,这既丰富了平台的产品,又提高了总体 GMV,从用户角度来说,这既不需要面对不存在的延误险和机票的捆绑销售,又有了更多的选择和参考。
|
||||
|
||||
那我们该怎么去判断航班是否可能延误呢?我们可以用朴素贝叶斯快速构建一个模型进行预测。具体的做法是这样的:我们已经知道,决定航班是否延误最主要的因素就是起飞地和降落地的天气情况。假设这些原因之间完全没有影响,那么我们可以去收集过去的飞行数据,计算出每一个条件,比如天气和飞机延误之间的关系。
|
||||
|
||||
假设,我们的用户正在浏览北京飞往深圳的航线,他坐飞机的时间段内,起飞地北京的天气是雪天,降落地深圳是雨天。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/1f/64/1fa56937887d610813dff502008fab64.jpeg" alt="">
|
||||
|
||||
上面这些条件,我们给它们都分配一个代号。其中,北京的天气是雪天是 AI,深圳的天气是雨天是 A2,飞机延误的概率是 B1,不延误的概率是 B2。这样一来,我们就可以统计飞机延误和不延误情况下,北京是雪天和深圳是雨天的概率了。那么上面那些概率就可以变换为:
|
||||
|
||||
- 飞机延误的情况下,北京天气是雪天 = P(A1|B1) = 20%
|
||||
- 飞机延误的情况下,深圳天气是雨天 = P(A2|B1) = 40%
|
||||
- 飞机不延误的情况下,北京天气是雪天 = P(A1|B2) = 10%
|
||||
- 飞机不延误的情况下,深圳天气是雨天 = P(A2|B2) = 10%
|
||||
|
||||
根据历史数据,我们可以得到总体延误的概率为 P(B1) = 30%,不延误的概率是 P(B2)= 70%。这个时候,根据我们之前讲的贝叶斯公式,就可以得到北京雪天同时深圳雨天的时候,飞机延误和不延误的概率了,具体公式如下所示。
|
||||
|
||||
- 飞机发生延误的概率是:P(B1|A1A2) = P(A1A2|B1) * P(B1) / P(A1A2)
|
||||
- 飞机不发生延误的概率是:P(B2|A1A2) = P(A1A2|B2) * P(B2) / P(A1A2)
|
||||
|
||||
虽然这两个公式中的分母 P(A1A2) 我们不知道是多少,但我们直接比较分子就可以知道延误概率和不延误概率哪个更大。把具体的数值套入到公式中,我们就能得到发生延误的概率是 24%,不发生延误的概率是 7%,计算公式如下:
|
||||
|
||||
- P(A1|B1) * P(A2|B1)*P(B1)/P(A1)*P(A2) = 20% * 40% * 30% = 24%
|
||||
- P(A1|B2) * P(A2|B2)*P(B2)/P(A1)*P(A2) = 10% * 10% * 70% = 7%
|
||||
|
||||
这样一来,当用户在浏览这个航线的时候,我们就可以提示用户,“该航线大概率会延误,请您按需购买延误险”。
|
||||
|
||||
## 朴素贝叶斯的优缺点
|
||||
|
||||
朴素贝叶斯的优点主要有两个,首先是算法的逻辑简单,因为它的核心就是贝叶斯公式,所以它实现的过程是不需要训练的,算法计算的时候对资源也占用比较小。
|
||||
|
||||
因此,当公司没有算法工程师的情况下,如果你想做一些相对简单并且条件比较独立的事件预测时,你完全可以对研发工程师提出这样的要求:由你来提供相应的条件,研发工程师通过公式来帮你预测结果。
|
||||
|
||||
**这个时候,你不只是一个需求提出方,还是一个解决方案架构师,能够推动一个需求从0到1 的落地,同时还不需要公司提供额外的资源,这就是你价值的体现。**
|
||||
|
||||
但是由于朴素贝叶斯有一个假设前提,就是各个条件之间相互独立,互不影响。这让它的使用非常有局限性,只有在条件比较少,并且相互独立的时候,朴素贝叶斯的效果才会比较好。可是,现实世界中这种情况往往不存在,所以在面对条件个数比较多,或者条件之间有一些相关性的时候,朴素贝叶斯得到的效果就会差很多。
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我带你一起学习了第三个分类算法,朴素贝叶斯。作为产品经理,我们首先要记住,这个算法的核心来自于贝叶斯公式,算法的前提假设是,算法中各个条件相互独立、互不影响。
|
||||
|
||||
同时,为了帮助你加深理解,我也把它的原理和基础概念总结在了下面的表格里。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/5y/9b/5yy7851e2d518fc67938e3d4e3e38a9b.jpeg" alt="">
|
||||
|
||||
接着,我们要重点掌握朴素贝叶斯的应用场景,我从两个方面帮你做了总结。
|
||||
|
||||
从算法适合的场景上来说,朴素贝叶斯比较适合用于垃圾邮件分类,用户情感预测这些和文本处理相关的场景,这些场景中,算法依赖的条件相互之间比较独立,所以适合用朴素贝叶斯算法来做。
|
||||
|
||||
从算法开发成本上来说,朴素贝叶斯适合项目周期比较紧张,算力资源不太充足的情况,因为朴素贝叶斯模型相对简单,构建过程不会太复杂,占用时间相对比较短,并且由于其相对简单的特点,对于算力的要求也不会太高。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
假设,我们业务方 HR 团队希望你分析每一个员工的离职概率,你觉得用朴素贝叶斯合不合适?为什么?
|
||||
|
||||
欢迎在留言区写下你的思考和疑惑,也欢迎你把这节课分享给你的朋友,我们下节课见!
|
153
极客时间专栏/成为AI产品经理/算法技术能力篇/13 | 决策树与随机森林:如何预测用户会不会违约?.md
Normal file
153
极客时间专栏/成为AI产品经理/算法技术能力篇/13 | 决策树与随机森林:如何预测用户会不会违约?.md
Normal file
@@ -0,0 +1,153 @@
|
||||
<audio id="audio" title="13 | 决策树与随机森林:如何预测用户会不会违约?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/d1/eb/d1ce685aae917a36929e09b8057be4eb.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
今天,我们要讲决策树与随机森林。决策树是一种基础的分类和回归算法,随机森林是由多棵决策树集成在一起的集成学习算法,它们都非常常用。
|
||||
|
||||
这节课,我就通过决策树预测用户会不会违约的例子,来给你讲讲决策树和随机森林的原理和应用。
|
||||
|
||||
## 如何理解决策树?
|
||||
|
||||
很多人都有过租房子的经历,那你是怎么决定要不要租一个房子的呢?你可以先想一想,我先把我的做法说一下,我会先判断房子的位置,再看价格,最后看装修。
|
||||
|
||||
更具体点来说,我只会选择离公司近的房子,比如说 5 公里以内的或者通勤时间在 40 分钟以内的。其次,如果价格便宜,不管装修得好不好我都租,如果价格贵那我就要看装修情况,装修好就租,装修不好就不租。
|
||||
|
||||
这就是一棵典型的决策树:对于租房子这个问题,我根据距离、价格、装修这几个条件 ,对一个房子进行了判断,最后得到一个解决结果,就是这个房子我是租或者不租。下图就是这棵决策树的示意图。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/e3/1c/e358d29d64fa282b6841733b01e5421c.jpeg" alt="">
|
||||
|
||||
我们可以看到,决策树(Decision Tree)就是一种树形结构的算法,上面的节点代表算法的某一个**特征(如距离、价格),节点上可能存在多个分支,每一个分支代表的是这个特征的不同种类(如距离远、距离近),最后的叶子节点代表最终的决策结果(如租、不租)**。
|
||||
|
||||
### 决策树的生成
|
||||
|
||||
知道了决策树的形式和原理,我们再来看看决策树的生成过程,它是决策树的核心。不过,对于产品经理来说,更重要的还是掌握决策树的原理、形式、优缺点。那我把它的详细过程写在下面,就是让你在工作中遇到类似问题的时候,能直接回来补充必要的知识,所以今天我们先对整体过程有个大致了解就可以了。
|
||||
|
||||
**决策树生成的过程包括三个部分,分别是特征选择、决策树生成、决策树剪枝。**下面,我们还是拿上面租房子的例子,来说一说这个决策树生成的过程。假设现在有如下条件的一个房子,根据我上面定下的规则,你觉得这个房子我会不会租呢?
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/68/ce/684deee55d00b1942423418db7c361ce.jpeg" alt="">
|
||||
|
||||
我们先看距离,因为这个房子距离公司远,所以根据上面的决策树,我们就能直接得出结论:不租。但是,假设我们的决策树不是用距离作为根节点,而是用价格作为根节点的话,结果会不会不一样呢?
|
||||
|
||||
这个时候,决策棵树可能会变成下面的样子:
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/61/ab/619af82a58ce588849ae5f5068043eab.jpeg" alt="">
|
||||
|
||||
你会发现,我们的决策树一下子变“大”了,判断这个房子的过程就变成了,先看价格,再看装修,最后看距离。我们发现,即使决策树的结构发生了变化,可我们还是会得到之前的结论:不租,所以,决策树的构造只会影响到算法的复杂度和计算的时间,而不会影响决策的结果。
|
||||
|
||||
因此,在实际工作中,我们就需要优化决策树的结构,让它的效率更高,但这具体该怎么做呢?
|
||||
|
||||
### 信息熵
|
||||
|
||||
我们一般会在特征选择和决策树的生成阶段,通过**信息熵**来决定哪些特征重要以及它们应该放到哪个节点上,因为信息熵是用来衡量**一个节点内信息的不确定性的**。一个系统中信息熵越大,这个系统的不确定性就越大,样本就越多样,你也可以理解成是样本的**纯度越低**,信息熵越小,系统的不确定性就越小,样本越趋于一致,那样本的**纯度就越高**。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/e1/7d/e1c16a9cd77a60dfc08366yyb82eef7d.jpeg" alt="">
|
||||
|
||||
我们肯定是希望决策树在每次划分的时候,每个条件分支都能够最大化地去划分这些样本,让每个节点的信息熵更低,样本一致性更高。所以,决策树会计算每一个特征划分后样本的“**纯度**”,纯度越高的特征越接近根节点。这样一来,决策树的复杂度和计算时间肯定就会越少,也就不会出现我们刚才说的那种“很大”的决策树。这就是实际工作中我们构造决策树的思路了。
|
||||
|
||||
实际上,决策树的算法有很多,最典型的三种分别是 ID3(Iterative Dichotomiser 3,迭代二叉树3代)、C4.5 和 CART(Classification and Regression Trees,分类与回归树)。ID3 是最初代的决策树算法,它使用的计算指标是信息增益;C4.5 是在 ID3 基础上改进后的算法,它使用的计算指标是信息增益率;CART 分类与回归树,做分类问题时使用的是 [Gini 系数(Gini Coefficient,基尼系数)](https://zh.wikipedia.org/wiki/%E5%9F%BA%E5%B0%BC%E7%B3%BB%E6%95%B0),做回归问题的时候使用的是偏差值。
|
||||
|
||||
作为产品经理,我们简单了解这三种算法的特点就可以了,我在下面对它们进行了总结,你可以参考一下。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/84/c7/84a031cyyd5e41232b2789b4ab41f6c7.jpeg" alt="">
|
||||
|
||||
### 剪枝操作
|
||||
|
||||
最后,因为决策树很容易出现过拟合情况,所以我们还会引入剪枝操作这个环节。剪枝就是我们对一棵树进行简化,减少它的复杂程度,提高模型的泛化能力。剪枝的原理很好理解,主要就是判断把某个节点去掉之后,模型的准确度会不会降低了,如果没有降低,就可以减掉这个节点。
|
||||
|
||||
剪枝的操作还分为预剪枝和后剪枝,它们的区别是剪枝发生的阶段不同。预剪枝在决策树生成时候同步进行。而后剪枝是决策树生成之后,再对决策树的叶子节点开始一步一步地向根方向剪枝。
|
||||
|
||||
## 决策树的应用案例:预测用户违约
|
||||
|
||||
决策树的生成讲完了,我们重点来看看决策树的应用。在金融风控场景下,我们经常需要判断用户的违约风险。
|
||||
|
||||
最早的风控模型都是使用逻辑回归来做的,因为它相对简单而且可解释性强。但逻辑回归属于线性模型,不能很好处理非线性特征,所以决策树算法也慢慢用于违约风险的预测。接下来,我们就来看看决策树是怎么预测违约风险的。
|
||||
|
||||
决策树预测用户违约的核心思想是:**先获取部分用户的历史数据,历史数据中包括过去的信贷数据和还款结果;然后将贷款客户不断进行分类,直到某个节点的样本用户都是同一个类型为止;最后,再对决策树进行剪枝,简化树的复杂度。**
|
||||
|
||||
假设我们得到的用户历史数据如下所示。对于这个表格,我再补充解释一下,过去的信贷数据应该包括申请数据、金融产品相关数据等等。年龄,是否有房这些都属于申请数据,是包括在信贷数据里的。
|
||||
|
||||
还款结果指的是什么时候还款,还了多少,但是做模型设计,定义模型目标变量的时候,我们不可能直接用还款数据,所以我们定义是否逾期作为目标值,也就是 Y 值。1 代表逾期,0 代表不逾期。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/a3/49/a3d903270195ca1984452862a7e20849.jpeg" alt="">
|
||||
|
||||
因为目前决策树算法中,使用比较多的是 CART 算法,所以我们也选择它进行模型构建,而特征选择阶段会使用 Gini 系数。 CART 算法选择 Gini 系数,是因为信息熵模型使用了大量的对数计算导致效率很低,而 Gini 系统可以避免这个问题,从而提升计算效率。
|
||||
|
||||
从上面的历史数据中,我们可以提取出三个特征,分别是性别、年龄和是否有房。接下来,我们就分别计算一下这三个特征的 Gini 系数。
|
||||
|
||||
首先,性别特征的 Gini 系数直接根据公式计算就可以了,我们假设它就是 0.412。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/3e/cd/3e00a6868442cb4aa76ca685eb0d52cd.jpeg" alt="">
|
||||
|
||||
我们重点来看第二个特征:年龄。年龄是一个连续的值,我们的历史数据中一共有 4 种数值,每两个相邻值之间都可以是一个特征分类的点(比如说,年龄 22 和年龄 24 的分类点就是23),所以对于年龄这个特征,我们一共有3种不同的分类方式。因为分类方式比较多,相对应的,Gini 的计算方式就会比较复杂,我们需要分别计算3种不同分类方式时的 Gini 系数,选出 Gini 最小的分类方式,把它作为年龄的分类。
|
||||
|
||||
假设年龄在 37 的时候 Gini 系数最小,等于 0.511,那么年龄这个特征的条件分支就是小于 37 和大于 37。
|
||||
|
||||
相同的,我们可以再计算是否有房的 Gini 系数。假设这个特征的 Gini 系数为 0.113,最后,根据 Gini 排序我们就能得到如下的决策树结构。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/67/74/67169bb3yy9e13dc29f86490b67af374.jpeg" alt="">
|
||||
|
||||
但是,这个决策树还不是最终的结构,因为有些节点我们是可以去掉的。比如说,我们发现有房产这个条件下面的所有节点,去掉和不去掉的时候模型准确性没有变化,那我们就可以把有房产下面的所有节点裁剪掉,从而得到新的决策树。
|
||||
|
||||
这就是剪枝操作,在我们实际工作中通常采取后剪枝的操作,从叶子节点逐步向上判断哪些节点是可以去掉的,剪枝后的决策树如下所示。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/03/67/03b29d852885211dd2d5bc567934c867.jpeg" alt="">
|
||||
|
||||
以上就是决策树创建的过程,因为没有进行实际计算,实际结果可能有偏差,你只要理解这个过程就可以了。
|
||||
|
||||
## 决策树的优缺点
|
||||
|
||||
通过上面的学习我们可以发现,决策树的优点和缺点都很明显。由于具有树形结构所以决策树的可解释性强,直观好理解,而且我们还可以从结果向上去追溯原因。采用决策树,我们可以很方便地和领导、业务方、甲方去解释我们的模型是什么,以及有哪些因素影响了模型的结果。
|
||||
|
||||
不过,决策树的缺点也非常明显。当数据量大,数据维度(样本具有的特征或者属性,如价格、位置)很多的时候,决策树会变得非常复杂,训练时间会很久。
|
||||
|
||||
另外,决策树还有一个很明显的缺点就是,需要算法同学手工设置决策树的深度(决策树要分多少层),如果设置了不合适的参数,就很可能造成欠拟合或者过拟合的情况。比如说,深度太浅就意味着你的叶子节点分得不干净,很容易造成欠拟合的情况,深度太深也会导致决策树训练时间太久,复杂度太高,很容易造成过拟合的情况。
|
||||
|
||||
## 随机森林:集体的力量
|
||||
|
||||
在实际工作中,我们既可以只使用一棵决策树来解决问题,也可以使用多棵决策树来共同解决问题,也就是随机森林。
|
||||
|
||||
随机森林(Random Forest)指的是由多棵决策树组成,随机指的是每一个决策树的样本是随机从数据集中采样得到的。假设, 模型由三个决策树A、B、C组成,我们给每棵决策树都随机抽取样本进行训练,由于这三棵树的训练样本不一样,因此它们最后得到的决策结果有可能不同。最后,我们再把这三棵树得到的结果做一个综合,就能得到最终的决策结果了。
|
||||
|
||||
随机森林的原理很好理解,那我们再来说说它的优缺点。因为这个算法是随机从数据集中进行采样的,所以模型的随机性很强,不容易产生过拟合的情况,但正因为样本是随机的,所以模型对于样本数据的异常值也不太敏感。
|
||||
|
||||
其次,因为算法采样的时候,是从整个数据集中抽取其中一部分进行采样,而且随机森林是由多棵树组合而成的,所以模型中的每一棵决策树都可以并行训练和计算,这样一来,在面向大数据量的情况下,随机森林的运行效率更高。
|
||||
|
||||
也正是因为这样,随机森林在训练时候需要的计算成本会更高,而且,就算它们整合之后会比之前单一模型表现好,但在面对复杂样本的时候,它们仍然没有办法很好区分,所以模型上限很低。
|
||||
|
||||
随机森林属于集成学习中的一种。集成学习(Ensemble Learning)可以理解为,不是通过某一个单独的机器学习算法解决问题,而是通过多个机器学习算法结合使用来完成最终的算法,最终达到 1+1>2 的效果。核心原理你可以记成是我们常说的“三个臭皮匠赛过一个诸葛亮”。
|
||||
|
||||
集成学习的内部由很多[弱监督模型](https://www.cnblogs.com/yumoye/p/11025504.html)组成, 某一个弱监督模型只在某一个方向上表现比较好,当我们把这些算法合而为一的时候,就会得到一个各方面都会表现较好的模型。集成学习的算法有很多,随机森林是其中比较有代表性的一种。我在下面整理了一个集成学习的思维导图,你可以了解一下。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/50/bd/50d6fe5acc9a759798cba086926981bd.jpg" alt="">
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我们讲了决策树、随机森林的原理、应用和优缺点。理解决策树是理解随机森林和集成学习的基础,不过,作为产品经理,我们的重点不在于理解决策树的生成过程,只是借着它的生成加深对决策树原理和应用的理解。
|
||||
|
||||
总的来说,关于决策树和随机森林,我希望你重点记住这 5 点:
|
||||
|
||||
<li>
|
||||
决策树就是一种树形结构的算法,它很直观,可视化很强,但也容易过拟合;
|
||||
</li>
|
||||
<li>
|
||||
决策树特征选择是生成决策树的基础,不同的算法对应了不同的特征选择方式;
|
||||
</li>
|
||||
<li>
|
||||
集成学习是多个机器学习算法的结合;
|
||||
</li>
|
||||
<li>
|
||||
随机森林是集成学习中的一种,由多棵决策树组成;
|
||||
</li>
|
||||
<li>
|
||||
随机森林的原理你可以记成:三个臭皮匠赛过一个诸葛亮,它的特点你可以记成:模型起点高、天花板低。
|
||||
</li>
|
||||
|
||||
除此之外,关于决策树和随机森林的应用场景我还想再强调一下。决策树和随机森林模型的可解释度都很高,这就意味着我们可以轻松地把模型的计算逻辑介绍清楚。
|
||||
|
||||
实际上,这一点对于咨询、金融、医疗领域的公司来说非常重要,因为你的客户往往不懂你的模型内部在做什么,但如果你的模型结构清晰,你就能在最短的时间内介绍出模型的优势。而且,因为随机森林这样的集成学习算法融合了多个模型的优点,所以对于解决分类问题来说,决策树和随机森林是当今的机器学习算法的首选,就比如你可能听过的 GBDT、XGBoost 就是决策树的升级版。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
因为产品经理不需要实际进行模型的构建,所以我不会让你去构建一棵决策树,我想请你来梳理一下,你所在的团队中有哪些项目是基于决策树、随机森林或者是升级算法解决的呢?
|
||||
|
||||
欢迎在留言区分享你的经验,我们下节课见!
|
106
极客时间专栏/成为AI产品经理/算法技术能力篇/14 | 支持向量机:怎么预测股票市场的涨与跌?.md
Normal file
106
极客时间专栏/成为AI产品经理/算法技术能力篇/14 | 支持向量机:怎么预测股票市场的涨与跌?.md
Normal file
@@ -0,0 +1,106 @@
|
||||
<audio id="audio" title="14 | 支持向量机:怎么预测股票市场的涨与跌?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/7e/a8/7e0e6091d168f65fbaa3a0a7940896a8.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
不知道你有没有听过一个小故事,一个学渣和一个学霸考了同一张试卷,学渣考了 98 分,是因为他只能考 98 分,学霸考 100 分,是因为卷子只有 100 分。用这个故事中的学霸来形容我们今天要讲的这个算法一点也不过分,这个算法可以说是机器学习分类算法的天花板了。
|
||||
|
||||
它就是用来解决分类问题的支持向量机(Support Vector Machine,SVM)算法,简称SVM 算法。在深度学习模型“横行天下”的今天, SVM因为相比于深度神经网络更为轻量级,也有极好的性能,所以在工业界,它一般会作为模型效果的基准线。
|
||||
|
||||
这节课,我们就来聊一聊SVM的原理、应用和优缺点。
|
||||
|
||||
## 如何理解SVM算法?
|
||||
|
||||
我们先来做一道题:假如,桌子上放了两种颜色的球,你要用一根木棍把它们分开,你会怎么做呢?
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/fe/e4/fec87be1a1d5e91b6b306b6ea50efde4.jpeg" alt="">
|
||||
|
||||
如上图所示,我用了两种方式把它们分开了。这两种分类方式看起来差别不大,因为它们应用在这些数据集上的效果都一样,都可以完美分开两种颜色的球。
|
||||
|
||||
好, 现在我们加大难度,在这个基础上加上两个红色的样本点。如下图中的两个红色球,它们一个距离图中左下方的橙色球更近,另一个距离右上方的蓝色球更近。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/5b/24/5b989e3deaac41099c7ac72b6fc63c24.jpeg" alt="">
|
||||
|
||||
如果我们还是用刚才的分类算法,这一回的效果就完全不同了。为什么这么说呢?在[第11讲](https://time.geekbang.org/column/article/329236)我们学过, KNN 算法通常是用距离公式(如欧式距离)去衡量两个样本之间的相似度,距离越近表示它们越相似。根据这个原理,我们就能得到一个结论:靠近橙色球的样本大概率属于橙色球,靠近蓝色球的样本大概率属于蓝色球。这样一来,做对这道题的就只有右边的分类算法。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/c6/bb/c67ae769de5d6feb3ccfea83702554bb.jpeg" alt="">
|
||||
|
||||
那为什么只有它做对了这道题呢?我们可以看到,相比于第一个分类算法,第二个分类算法在完美区分所有样本点的同时,还在努力保证边界样本点到这个分类算法的决策边界的距离尽可能远,这就意味着两个分类样本之间的距离会被放大。根据距离公式,距离远表示相异,所以这两个分类样本的区分度会更高。
|
||||
|
||||
这个分类方法立于不败之地的原因,用一句话总结就是:**在保证了分类正确性的同时,还尽可能让两个样本的类别更容易区分。简单来说就是,不仅做对了,还保证了质量**。
|
||||
|
||||
### SVM算法的原理
|
||||
|
||||
我刚才说的划分橙色和蓝色小球的方法就是SVM的算法思路:当样本数据是线性可分(用一条直线可以将样本数据分开)的时候,找到距离两类样本间隔最大的一条线,或者说是两类样本数据之间的中轴线。因为有无数条线可以区分两个分类,只有它们之间的中轴线距离所有样本点的距离最远。
|
||||
|
||||
其中,距离这条直线最近的几个样本点(如上面例子中的几个橙色和蓝色小球),就叫做**支持向量(Support Vector)**,这几个点到这条线的距离称为**间隔**。
|
||||
|
||||
那为什么一定要找到间隔最大的这条直线呢?它除了能让分类样本的区分度最高,还有一个好处,就是当新数据发生波动的时候,就算超过了原有数据样本点的最近边界,分类结果仍然不会受到影响。因此,寻找最大间隔的过程也是 SVM 算法最优化参数的过程。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/99/35/99a06c48af2b3830eb372af3d5c32a35.jpeg" alt="">
|
||||
|
||||
### 如何处理非线性可分?
|
||||
|
||||
但是,我们也知道现实情况中,很多数据是线性不可分的,就比如橙色和蓝色的球均匀地混合在了一起。这个时候,我们找不到一条直线可以把两种小球很好地分类。在这种情况下,SVM 又是怎么解决的呢?
|
||||
|
||||
SVM 的解决办法就是将二维平面映射到三维空间,**我们可以想象成是把二维平面中的直线通过在三维空间上的投影构造出一个平面。这个平面把原有的空间分割成为了两部分**,让两种颜色的小球样本在高维空间中线性可分。当然,我们也可以在平面的基础上延伸,比如映射到一个超过三维的空间,这就构造出了一个超平面。这种数学思路是 SVM 算法最优秀的地方,也是SVM和其他线性算法最大的区别。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/ec/8f/ec2ff0fea4031d3371a9323df3cafd8f.jpeg" alt="">
|
||||
|
||||
**总之,线性分类算法都可以叫线性分类器,它在二维空间中是直线,在三维空间是平面,在三维以上的空间维度是超平面。**
|
||||
|
||||
在讲SVM解决办法的时候,我们还有一个问题没有解决:SVM 是怎么把分类器从二维平面映射到高维空间的呢?其实就是通过“核函数”来实现的,核函数的作用简单来说就是把低维空间映射到高维空间,常见的核函数有线性核函数、高斯核函数等等。因此, SVM 就是通过核函数将样本从原始空间映射到一个更高维的特质空间中,让样本数据在新的空间中线性可分。
|
||||
|
||||
总的来说,SVM 是一个有监督的二分类器,目标是找到一个超平面,让两类数据距离这个超平面最远,从而对新的数据分类更准确。
|
||||
|
||||
## 应用场景:预测股票市场的涨与跌?
|
||||
|
||||
假设,我们现在需要预测股票市场的涨和跌。因为,SVM 通过核函数能够方便地处理高维数据,而且,它通过少量的支持向量就可以进行决策,预测效率非常高,所以,我们决定通过 SVM 算法找到一套解决方案。
|
||||
|
||||
同时,我们希望这个方案还能应用在一些典型的个股股票的预测场景中,能够根据股票的若干特征样本数据,把待预测的目标结果划分成“涨”和“跌”两种,从而实现预测股票涨跌的效果。
|
||||
|
||||
首先,我们对模型进行设计,第一步是设定模型的目标变量。
|
||||
|
||||
因为要预测的是股票涨跌,所以我们首先想到的就是预测未来一些天的股票价格是增长还是下降,但是,除非这个结果具有非常高的正确率,否则这种预测对于实际投资就没有太大的指导意义。
|
||||
|
||||
但是,如果我们能够描绘出未来一些天股票价格的走势或者说是股票价格曲线的大致形状,就算它预测出的股票价格与实际股票价格有一定的出入,这对股票投资来说也会有很大的指导意义。因此,我们的目标变量就是未来一些天个股的“涨”和”跌”走势。
|
||||
|
||||
然后就是确定数据样本。我们会从历史个股在市场交易环节的数据表现中进行抽取,并且确定算法选型为 SVM 支持向量机。
|
||||
|
||||
在模型设计完成之后,我们就要建立特征工程了。模型里所用到的输入特征数据是由股票基础指标计算得出,这些指标分别是前收盘价、开盘价、最高价、最低价、均价、成交量、成交额、涨跌、涨跌幅、换手率、收盘价。我们会根据这些指标构造出 8 个特征向量,这些指标一般和股价具有较强的相关性,特征向量如下:
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/40/39/40588ee62dfd77c4fd0aed2210808539.jpeg" alt="">
|
||||
|
||||
在构建完特征工程后,就进入模型训练的环节了。在这个阶段,算法工程师会选择核函数进行训练,如果是线性数据,就选线性核函数的 SVM 分类器,否则就选高斯核函数的 SVM 分类器。在预测股票涨跌的例子中,算法工程师就会选择高斯核函数的 SVM 分类器,然后对训练好的模型用测试集进行评估。
|
||||
|
||||
最后,我们把计算得出的结果绘制成股票的价格曲线,通过对比真实与预测行情的走势,以可视化的方式直观地检验模型预测结果是否达到效果。
|
||||
|
||||
## SVM算法优缺点
|
||||
|
||||
SVM 算法作为机器学习领域非常强大的算法,SVM 算法作为机器学习领域中非常强大的算法,首当其冲的优点就是,它不仅适用于线性问题,还适用于非线性问题。因此,SVM 对高维数据集和低维数据集都有不错的表现,它可以在数据特征很少的情况下生成非常复杂的决策边界。当然,在特征数量足够多的情况下效果更好,原因是数据集的复杂度只取决于支持向量而不是数据集的维度。
|
||||
|
||||
并且,相比于 KNN、决策树这些局部最优解的算法来说,SVM 可以求得一个全局的最优解。
|
||||
|
||||
但是,SVM 的缺点就是训练所需要的资源很大。由于运算量与存储量都很高,SVM 训练会非常消耗时间和内存。因此支持向量机比较适合小的样本量,比如几千条数据,当样本量太大的时候,训练资源开销就会过大。而且,SVM 无法直接解决多分类问题,只能通过多个二分类支持向量机的组合来解决。
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我借助预测股票涨跌的例子给你讲了 SVM 支持向量机的核心原理、应用场景以及优缺点。
|
||||
|
||||
对于 SVM 的原理,你可以分两方面来理解,我还是用小球举例:
|
||||
|
||||
<li>
|
||||
当小球数据是线性可分的时候,SVM 的思路就是要找到距离两种小球间隔最大的那条线;
|
||||
</li>
|
||||
<li>
|
||||
当小球数据是线性不可分的时候,SVM 的做法就是通过核函数把小球映射到高维空间中,构造出一个超平面,让小球样本在高维空间中线性可分。
|
||||
</li>
|
||||
|
||||
在深度学习模型还没有火起来之前,SVM 算法可以说是分类算法的天花板了,尤其在文本分类场景下效果表现非常好,比如情感分析、短文本分类等等。那么,即使在深度学习模型应用这么广泛的今天,无论我们选择哪个深度学习算法,它的效果也一定要以SVM 算法的效果为基准线。
|
||||
|
||||
关于SVM的优缺点,我们要知道,SVM 可以解决线性问题,又可以解决非线性问题,同时,它可以求出一个全局最优解。但是,SVM 训练资源开销比较大,所以适合应用在小样本量的数据分类中,而且它只能通过多个二分类的组合,来间接解决多分类问题。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
结合我们学过的知识,对于 SVM 和 LR来说,你觉得哪些情况下适合选用 SVM,哪些情况下适合选用 LR?为什么?
|
||||
|
||||
欢迎在留言区分享你的观点和疑惑,也欢迎你把这节课分享给你的朋友,我们下节课见!
|
137
极客时间专栏/成为AI产品经理/算法技术能力篇/15 | K-means 聚类算法:如何挖掘高价值用户?.md
Normal file
137
极客时间专栏/成为AI产品经理/算法技术能力篇/15 | K-means 聚类算法:如何挖掘高价值用户?.md
Normal file
@@ -0,0 +1,137 @@
|
||||
<audio id="audio" title="15 | K-means 聚类算法:如何挖掘高价值用户?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/bc/49/bc009dfe39c44yy3d605b3557eb1a449.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
在前面的课程中,我们学习了分类算法:K 近邻、逻辑回归、朴素贝叶斯、决策树,以及支持向量机,也学习了回归算法:线性回归。它们有一个共同点,都是有监督学习算法,也就是都需要提前准备样本数据(包含特征和标签,即特征和分类)。
|
||||
|
||||
但有的情况下,我们事先并不能知道数据的类别标签,比如在[第8讲](https://time.geekbang.org/column/article/326965)智能客服的例子中,因为事先并不知道用户的咨询问题属于什么类别,所以我们通过层次聚类算法把相似度比较高的用户咨询问题进行了聚类分组,然后把分析出的常见高频问题交由机器人回复,从而减轻人工客服的压力。
|
||||
|
||||
聚类算法是无监督学习算法中最常用的一种,无监督就是事先并不需要知道数据的类别标签,而只是根据数据特征去学习,找到相似数据的特征,然后把已知的数据集划分成不同的类别。
|
||||
|
||||
不过,因为第 8 讲中的层次聚类算法在实际工业中的应用并不多。所以今天,我们就来讲一种应用最广泛的聚类算法,它就是 K 均值( K-means )算法。
|
||||
|
||||
## 如何理解 K-means 算法?
|
||||
|
||||
每次大学开学的时候都会迎来一批新生,他们总会根据自己的兴趣爱好,自发地加入校园一个个小社团中。比如,喜欢音乐的同学会加入音乐社,喜欢动漫的同学会加入动漫社,而喜欢健身的同学会加入健身社等等。
|
||||
|
||||
于是,这些来自天南地北从来不认识的人,追随着同样的兴趣爱好走到了一起,相互认识。这就是我们常说的,人以群分,物以类聚。
|
||||
|
||||
### K-means算法的原理
|
||||
|
||||
如果把这个故事的主角换成机器学习中的数据样本,我们是不是就可以快速给它们进行分类了呢?比如,当几个样本非常相似的时候,我们就把它们归为一类,再用这几个样本的中心位置表示这个类别,以方便其他相似样本的加入。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/41/47/41d93f4ed4609c3350b2b0a39dd9eb47.jpeg" alt="">
|
||||
|
||||
每当这个类别中有了新的相似样本加入的时候,我们要做的就是更新这个类别的中心位置,以方便这个新样本去适应这个类别。
|
||||
|
||||
这其实就是K-means算法的思路:**对于n个样本点来说,根据距离公式(如欧式距离)去计算它们的远近,距离越近越相似。按照这样的规则,我们把它们划分到 K 个类别中,让每个类别中的样本点都是最相似的**。
|
||||
|
||||
为了方便理解,我们引入了聚类的概念,聚类就是相似度很高的样本点的集合,我们刚才说的K个类别就等于K个聚类。同时,为了准确描述聚类的位置信息,我们还需要定义这个聚类的坐标位置,就是聚类中心,也就是质心(Centroid),来方便其他待测样本点去评估它距离哪个聚类更近,每个质心的坐标就是这个聚类的所有样本点的中心点,也就是均值。
|
||||
|
||||
### K-means算法解决聚类问题的过程
|
||||
|
||||
K-means算法是怎么解决聚类问题的呢?为了帮助你理解,我们来举个具体点的例子。假设我们现在要给 9 个样本进行聚类,它们有两个特征维度,分布在一个二维平面上,如下图所示。
|
||||
|
||||
第一步,我们先随机在这个空间中选取三个点,也就是质心。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/18/fc/18782bd5af2d4278a720292e963706fc.jpeg" alt="">
|
||||
|
||||
第二步,我们用欧式距离计算所有点到这三个点的距离,每个点都选择距离最近的质心作为的中心点。这样一来,我们就可以把数据分成三个组。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/79/cd/797dcabf4cd23d455e9fecaa2c80f5cd.jpeg" alt="">
|
||||
|
||||
第三步,在划分好的每一个组内,我们计算每一个数据到质心的距离,取均值,用这个均值作为下一轮迭代的中心点。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/cd/34/cd92aef5a52000480394e483e537c234.jpeg" alt="">
|
||||
|
||||
最后,我们不断重复第二步和第三步进行迭代,直到所有的点已经无法再更新到其他分类,也就是聚类中心不会再改变的时候,算法结束。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/4e/38/4efb7b40617841d86b6bc85257b60638.jpeg" alt="">
|
||||
|
||||
### K 值如何确定
|
||||
|
||||
K-means 的算法原理我们就解释完了,但还有一个问题没有解决,那就是**我们怎么知道数据需要分成几个类别,也就是怎么确定K 值呢?**
|
||||
|
||||
K 值的确定,一般来说要取决于个人的经验和感觉,没有一个统一的标准。所以,要确定 K 值是一项比较费时费力的事情,最差的办法是去循环尝试每一个 K 值。然后,在不同的 K 值情况下,通过每一个待测样本点到质心的距离之和,来计算平均距离。
|
||||
|
||||
比如,在刚才这个例子中,当 K=1 的时候,这个距离和肯定最大,平均距离也最大;当 K=9 的时候,每个点也是自己的质心,这个时候距离和是 0,平均距离也是 0。随着 K 值的变化,我们最终会找到一个点,让平均距离变化放缓,这个时候我们就基本可以确定 K 值了。
|
||||
|
||||
## 应用案例:K-means算法对用户分层
|
||||
|
||||
接下来,我们再借助电商平台分类用户的例子,说说K-means算法的应用。电商平台的运营工作经常需要对用户进行分层,针对不同层次的用户采取不同的运营策略,这个过程也叫做精细化运营。
|
||||
|
||||
就我知道的情况来说,运营同学经常会按照自己的经验,比如按照用户的下单次数,或者按照用户的消费金额,通过制定的一些分类规则给用户进行分层,如下表格,我们就可以得到三种不同价值的用户。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/6e/fd/6e2d8c4975e9b994yyeca0cfdc604bfd.jpeg" alt="">
|
||||
|
||||
这种划分的方法简单来看是没有大问题的,但是并不科学。为什么这么说呢?这主要有两方面原因。
|
||||
|
||||
一方面,只用单一的“下单次数”来衡量用户的价值度并不合理,因为用户下单的品类价格不同,很可能会出现的情况是,用户 A 多次下单的金额给平台带来的累计 GMV(网站的成交金额) ,还不如用户 B 的一次下单带来的多。因此,只通过“下单次数”来衡量用户价值就不合理。因为一般来说,我们会结合下单次数、消费金额、活跃程度等等很多的指标进行综合分析。
|
||||
|
||||
另一方面,就算我们可以用单一的“下单次数”进行划分用户,但是不同人划分的标准不一样,“下单次数”的阈值需要根据数据分析求出来,直接用 10 和 50 就不合理。
|
||||
|
||||
这两方面原因,就会导致我们分析出来的用户对平台的贡献度差别特别大。因此,我们需要用一种科学的、通用的划分方法去做用户分群。
|
||||
|
||||
RFM 作为用户价值划分的经典模型,就可以解决这种分群的问题,RFM 是客户分析及衡量客户价值的重要模型之一。其中 ,R 表示最近一次消费(Recency),F 表示消费频率(Frequency),M 表示消费金额(Monetary)。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/52/7b/526ee6394aeff3ae1f102f324f1eb87b.jpeg" alt="">
|
||||
|
||||
我们可以将每个维度分为高低两种情况,如 R 的高低、F 的高低,以及 M 的高低,构建出一个三维的坐标系。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/9f/0c/9fa0e7a682af19e9c20beef840434e0c.jpeg" alt="">
|
||||
|
||||
这样一来,我们就把客户分为了$2^{3}$,也就是 8 个群体,具体的分类如下:
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/0e/e8/0e754511d92549e9f3ca1c91ef9414e8.jpeg" alt="">
|
||||
|
||||
然后,我们通过用户历史数据(如订单数据、浏览日志),统计出每个用户的 RFM 数据:
|
||||
|
||||
- USERPIN:用户唯一ID;
|
||||
- R:最后一次消费日期距现在的时间,例如最后消费时间到现在距离 5 天,则 R 就是 5;
|
||||
- F:消费频率,例如待统计的一段时间内用户消费了 20 次,则 F 就是 20;
|
||||
- M:消费金额,例如待统计的一段时间内用户累计消费了 1000 元钱,则 M 就是 1000;
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/81/ae/81c5434b9ef1bac845600d8c6d8bc1ae.jpeg" alt="">
|
||||
|
||||
这样,我们就有了 8000 个样本数据,每个样本数据包含三个特征,分别为 R、F,M,然后根据前面 RFM 分为 8 个用户群体,则意味着 K 值为 8。
|
||||
|
||||
最后,我们将数据代入到 K-means 算法,K-means 将按照本节课讲解的计算逻辑进行计算,最终将 8000 个样本数据聚类成 8 个用户群体。这个时候,运营同学就可以根据新生成的 RFM 用户分群进行针对性的营销策略了。
|
||||
|
||||
好了,这就是K-means 算法对用户进行聚类的全部过程了。除了对用户聚类,K-means 算法可以应用场景还有很多,常见的有**文本聚类、售前辅助、风险监测等等**。下面,我们一一来说。
|
||||
|
||||
**文本聚类**:根据文档内容或主题对文档进行聚类。有些 APP 或小程序做的事儿,就是从网络中爬取文章,然后通过 K-means 算法对文本进行聚类,结构化后最终展示给自己的用户。
|
||||
|
||||
**售前辅助**:根据用户的通话、短信和在线留言等信息,结合用户个人资料,帮助公司在售前对客户做更多的预测。
|
||||
|
||||
**风险监测**:在金融风控场景中,在没有先验知识的情况下,通过无监督方法对用户行为做异常检测。
|
||||
|
||||
## K-means 聚类算法的优缺点
|
||||
|
||||
在优点方面,K-means 算法原理简单,程序容易实现,运算效率高,并且可解释性强,能够处理绝大多数聚类问题。而且,因为它属于无监督算法,所以不需要利用样本的标注信息就可以训练,这意味着它不需要像监督学习一样过分追溯样本的标注质量。
|
||||
|
||||
在缺点方面,K-means 由于不能利用样本的标注信息,所以这类模型的准确度比不上监督类算法。而且,K-means 算法受噪声影响较大,如果存在一些噪声数据,会影响均值的计算,进而引起聚类的效果偏差。
|
||||
|
||||
## 总结
|
||||
|
||||
K-means 算法是机器学习领域中处理无监督学习最流行、经典的聚类分析方法之一。它是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,待测样本点距离聚类中心的距离越近,它的相似度就越大。
|
||||
|
||||
今天,我先讲了 K-means 算法的原理。我们要重点理解它的应用思路,我把它们总结成四步:
|
||||
|
||||
第一步,随机选取任意 K 个数据点作为初始质心;<br>
|
||||
第二步,分别计算数据集中每一个数据点与每一个质心的距离,数据点距离哪个质心最近,就属于哪个聚类;<br>
|
||||
第三步,在每一个聚类内,分别计算每个数据点到质心的距离,取均值作为下一轮迭代的质心;<br>
|
||||
第四步,如果新质心和老质心之间的距离不再变化或小于某一个阈值,计算结束。
|
||||
|
||||
K-means 最经典的应用场景就是文本聚类,也就是根据文档内容或主题对文档进行聚类,再有就是对用户进行分类,它们是 K-means 最常用的两个场景。
|
||||
|
||||
然后,我还给你讲了K-means 算法的优缺点。关于优点你记住3点就够了,分别是简单易实现,运算效率高,可解释性很强。缺点也是3点,分别是不稳定,容易受到噪声影响,并且不如有监督学习算法准确。
|
||||
|
||||
那重要知识总结完之后,我还想带你对K-means算法和KNN 做一个区分。很多同学容易把它们弄混,因为它们的类别信息都会受到当前样本周围的环境的影响,但 K-means和KNN 有着本质的区别,我在下面对它们进行了对比,你可以去看看,希望能帮助你加深理解。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/48/c5/4871ba4bcef7e1bacf7efa55e875cbc5.jpeg" alt="">
|
||||
|
||||
## 课后讨论
|
||||
|
||||
我想请你想一想,在你的业务场景中,有哪些需求可以通过聚类分析的方式来实现。为什么?
|
||||
|
||||
欢迎在留言区分享你的故事,我们下节课见!
|
135
极客时间专栏/成为AI产品经理/算法技术能力篇/16 | 深度学习:当今最火的机器学习技术,你一定要知道.md
Normal file
135
极客时间专栏/成为AI产品经理/算法技术能力篇/16 | 深度学习:当今最火的机器学习技术,你一定要知道.md
Normal file
@@ -0,0 +1,135 @@
|
||||
<audio id="audio" title="16 | 深度学习:当今最火的机器学习技术,你一定要知道" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/f4/6e/f41cddb65ceedf28336c581baffef06e.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
深度学习(Deep Learning)是一种特殊的机器学习,是借鉴了人脑由很多神经元组成的特性而形成的一个框架。相对于普通的机器学习,深度学习在海量数据情况下的效果要比机器学习更为出色。
|
||||
|
||||
并且,自从 2016 年 Alpha Go 打败了李世石之后,深度学习就正式确立了在机器学习领域中的霸主地位。可以说,目前所有应用了人工智能的行业,基本都用到了深度学习模型。因此,产品经理也必须要了解深度学习的基础知识。
|
||||
|
||||
这节课,我们就来学习这个当今最火的机器学习技术,以及它的应用场景和算法效果。
|
||||
|
||||
## 如何理解深度学习?
|
||||
|
||||
因为深度学习可以简单理解为多层的神经网络模型,所以想要理解**深度学习**,我们就要先理解**神经网络。**接下来,我就通过一个例子来讲讲什么是神经网络。
|
||||
|
||||
### 什么是神经网络?
|
||||
|
||||
假如,你现在就职于一家很“民主”的公司,每年年终总结的时候,公司会让每一名员工写下自己对公司的意见,并且收集起来。为了节约行政成本,这些意见都会由当前层级的领导整合后,提交给他的上一级领导。
|
||||
|
||||
比如说,每个“部门组长”收集所有“部门员工”的意见,整合后统一提交给所有“部门经理”。每个“部门经理”收集所有“部门组长”的意见,整合后统一提交给所有“事业群经理”。就这样层层汇总传递,最后由事业群经理汇总提交给总经理,下图就是这个公司收集员工意见的流程图。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/52/c4/5234ded970a15fdefee5f4e2504572c4.jpeg" alt="">
|
||||
|
||||
这个例子其实完全可以通过机器学习模型来描述。我们可以把每个“员工”的意见,想象成机器学习中的“**特征**”,把每一层“领导”对收集上来的意见的整合,想象成当前层级的“**输出**”,最后把“总经理”收到的结果想象成模型的“**最终输出**”。这样一来,就形成了一个多层级的机器学习模型,也就是我们说的**神经网络**。
|
||||
|
||||
具体来说,我们可以把这个神经网络用三层结构来表示,分别为**输入层**、**隐藏层**,以及**输出层**。其中,隐藏层对我们来说是黑盒,隐藏层中的每上一个隐藏层的输出都是下一个隐藏层的输入,每一层都是在表达一种中间特征,**目的是将特征做非线性高阶变换**。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/b2/3f/b2c3759771b812f2af47b085cd3e253f.jpeg" alt="">
|
||||
|
||||
在这个神经网络的结构中,不同层级之间的联系是非常紧密的,因为每个连接层之间的节点(领导),都会和上下两个层级中的所有节点(领导)进行沟通。我们也把这种结构叫做**全连接神经网络模型**。
|
||||
|
||||
### 神经网络模型的组成
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/c9/28/c9d640yy93768938d867a1197e44ba28.jpeg" alt="">
|
||||
|
||||
上图这样由“圆圈”和“连接线”组成的图就是神经网络结构图,我们可以通过一个数学公式来表达:$A^{(n+1)}=\delta^{n}(W^{n}A^{n}+b^{n})$。
|
||||
|
||||
理解公式是理解神经网络组成的关键,接下来我就给你详细讲讲这些参数都是什么。
|
||||
|
||||
首先,图中的一个个“圆圈”就是 **Neuron**(神经元),表示当前层级下计算节点的输出,也就是$A^{(n+1)}$,我们可以把它想象成某个层级的领导对收集上来的意见整合后的结果。
|
||||
|
||||
而“连接线”就是 **Weights**(网络权重),表示不同层级之间的连接,用$W^{n}$表示。我们可以把它想象成不同员工意见的权重,比如核心员工的意见份量就重一些,绩效差的员工份量就轻一些。
|
||||
|
||||
同时,因为每个人所在公司位置不同,所以对于意见的反馈结果也会不同。比如,有些“部门经理”在收到员工的意见后,决定直接放大负面反馈的意见,而有些“部门经理”则决定谨慎处理,减少负面意见反馈的声音。在机器学习中,我们会把这些带有主观偏见的处理,叫做神经网络模型中的 **bias 偏移**,用$b^{n}$表示。
|
||||
|
||||
说到这,不知道你意识到一个问题没有,如果只是把“员工”意见反馈给“总经理”,那中间几层的“领导”就没有存在意义了,因为“员工”完全可以直接跳过所有“领导”把意见传递给最终的“总经理”。
|
||||
|
||||
因此,神经网络模型还设计了一个对下层意见解读和调整的操作。一般来说,我们会采用增加激活函数对每一层整体的输出做改进,把每层的结果做非线性的变化,去更好地拟合数据分布,或者说来更好地展示给上层的“领导”。常见的激活函数有 $ReLU$、$tanh$、$Sigmoid$等等,我们用$\delta^{n}()$表示。
|
||||
|
||||
### 深度学习模型训练目标
|
||||
|
||||
理解了神经网络的基本知识之后,深度学习模型的训练目标就很好理解了。
|
||||
|
||||
前面的学习让我们知道,**监督类机器学习模型的目标就是在给定一个任务的情况下,找到最优化的参数,使得 Loss 损失值最小,其中 Loss 损失值就是预测结果和真实结果之间的误差。**
|
||||
|
||||
神经网络作为一个有监督机器学习模型,自然也不会例外,它的**目标就是在给定一个任务的情况下,找到最优的Weights 和 bias,使得 Loss 最低**。
|
||||
|
||||
由于最开始的参数都是随机设置的,因此获得的结果肯定与真实的结果差距比较大。那么,为了训练神经网络中的参数,神经网络模型会采用反向传播,把 Loss 误差从最后逐层向前传递,使当前层知道自己在哪里,然后再更新当前层的 Weights 权重和 bias 偏移,进而减小最后的误差。这部分数学推导比较复杂,产品经理只要了解就可以了。
|
||||
|
||||
## 深度学习的应用案例:图像识别是如何实现的?
|
||||
|
||||
近几年,神经网络在图像处理和自然语言处理方面都有非常大的成果。所以,我们也借助一个图像识别的案例,来讲讲深度学习的应用。
|
||||
|
||||
如今,图像识别这项技术已经发展得很成熟,**卷积神经网络(Convolutional Neural Networks,CNN)**又是其中的主流技术,像Facebook、Google、Amazon等公司都在利用 CNN 进行图像识别的工作。
|
||||
|
||||
[<img src="https://static001.geekbang.org/resource/image/d0/85/d09fd297cd622ece574422c8cec05085.jpg" alt="">](http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/)
|
||||
|
||||
### CNN是如何实现图像识别的?
|
||||
|
||||
下面,我们就来学习一下,CNN 实现图像识别的具体过程。
|
||||
|
||||
因为 CNN 是深度学习的算法之一,所以它同样包含输入层、隐藏层,以及输出层这三大部分,更具体点来说,CNN 的整个组成部分可以分为,数据输入、特征提取、全连接以及输出层四个部分。其中,特征提取、全连接对应神经网络的隐藏层,数据输入和输出层对应神经网络的输入层和输出层。同样的,我也把它和神经网络的对应关系梳理出来了,如下图所示。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/a0/ed/a0849f739942a975dda1cfe49e120aed.jpeg" alt="">
|
||||
|
||||
接下来,我就结合下面的示意图,给你详细讲讲它对图像的处理过程。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/79/ed/796418b390b0b2c4eb6285f73dd63bed.jpeg" alt="">
|
||||
|
||||
CNN 实现图像处理的第一步,就是把图像数据输入到 CNN 网络模型中。我们在[第3讲](https://time.geekbang.org/column/article/322393)中讲到,任意一张彩色图片都可以表示成一个三阶张量,即三维数组。
|
||||
|
||||
其实所有彩色图像都是由红、绿、蓝(RGB)叠加而成的,比如一个 12px * 12px 的图像可以用 3 个 12 * 12 的矩阵来表示,如果是白色的图像就可以表示成 GRB(255, 255, 255)。 **那么, CNN 网络模型的数据输入就是将彩色图像分解为 R、G、B 这 3 个通道,其中每个通道的值都在 0 到 255 之间。**
|
||||
|
||||
数据输入之后,就到了特征提取的阶段了。在讲具体操作之前,我想你肯定会有一个疑问:**为什么CNN就适合于图像类的任务,全连接神经网络为什么不可以呢?**
|
||||
|
||||
这是因为,CNN 能够在众多深度学习算法中,以最短时间提取图像的特征。普通的神经网络对输入层与隐藏层会采用全连接的方式进行特征提取,所以在处理较大图像的时候,处理速度就会因为计算量巨大而变得十分缓慢。这个时候,计算能力就会成为最大的瓶颈。如果换成现在互联网上动不动就出现的高清大图,全连接神经网络就更行不通了。
|
||||
|
||||
举个例子,人在识别图像的时候,图像越清晰越好,但是这一点对于机器来说却很难,因为机器在识别图像的时候,往往需要将图像转换成像素值,再输入到模型中进行学习,而越清晰的图片意味着需要处理的像素越多,会带来更多的计算压力。
|
||||
|
||||
为了解决这个问题,CNN 就通过过滤无关信息,来提高识别效率。比如下面的这张图片,背景对于图像识别来说其实没有帮助的,反而増加了很多干扰信息。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/98/4e/9844172e097e06f09d4f6ef2a071c34e.jpeg" alt="">
|
||||
|
||||
那么,如何有效地过滤掉干扰信息,并且识别图像中的主体信息呢?做法就是不断模糊化一张图片,最后只剩下狗的轮廓,而背景信息这类无关项就会越来越不可见。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/27/e8/27d70a677158819ae8658741f92caee8.jpeg" alt="">
|
||||
|
||||
对于 CNN 网络模型来说,“模糊化图像”的这个操作就是通过 CNN 的**卷积和池化**来实现的。
|
||||
|
||||
我们先来看卷积运算。CNN 的每一个隐含单元(即,前文中的各中间层“领导”)只连接输入单元(即上一层输入)的一部分,这样就能让模型中不同输出对应不同的局部特征。对应到图像中,就是可以提取图像的不同局部特征,从而实现既减少了输入值,又提取到了图像的最主要的内容。
|
||||
|
||||
在完成各层的卷积运算后,深度学习模型还需要进行非线性的变换,非线性的变换是通过增加**激活函数**来实现的,通过激活函数将“线性回归”拟合的直线编程曲线,这样可以拟合各种复杂的问题,这里激活函数选型的是 $ReLU$函数。非线性变换的内容我们在“[逻辑回归](https://time.geekbang.org/column/article/329236)”那节课也讲过,你也可以去回顾一下。
|
||||
|
||||
**池化**的目的也是提取特征,减少向下一阶段传递的数据量,池化过程的本质是“丢弃”,即只保留图像主体特征,过滤掉无关信息的数据特征。
|
||||
|
||||
CNN 的所有卷积和池化操作都是在提取特征,直到**全连接**层才进入真正的训练学习阶段,做最后的分类计算。在 CNN 中,**全连接**层一般是用的是 Softmax 函数来进行分类,这部分我们简单了解就行了。
|
||||
|
||||
## 深度学习的优缺点
|
||||
|
||||
接下来,我再结合深度学习的优缺点,来说说它的适用场景。
|
||||
|
||||
首先,深度学习的可解释性非常差,因为它的内部计算复杂,对我们来说是一个黑盒,我们只需要输入数据,由它来告诉我们结果,至于为什么会这样,它不做任何解释。所以在很多对解释性要求比较高的场景,比如信用评级、金融风控等情况下,深度学习没办法使用。
|
||||
|
||||
其次是训练深度学习模型非常消耗资源,所以想利用深度学习网络进行实际工作,我们就必须要提前准备好相应的计算资源,如硬件设备。
|
||||
|
||||
最后,因为深度学习模型复杂,对数据依赖很强,所以它比我们之前讲的传统机器学习网络更难理解和学习。因此,在实际工作中,训练深度学习模型也需要配置专业的人才。
|
||||
|
||||
总之,深度学习具有**可解释性弱,模型训练慢,对数据依赖很强,模型复杂这四个缺点。**尽管深度学习的应用有着非常苛刻的条件,但是相对于它的模型性能来说,这些成本的付出还是值得的。深度学习自身的神经网络结构,让它每层的 Activation 激活函数都可以做非常复杂的非线性变化,这也意味着你的模型可以拟合任意复杂的数据分布,所以,它比我们之前讲过的所有算法的性能都要好。
|
||||
|
||||
## 总结
|
||||
|
||||
今天,我们围绕深度学习,讲解了它的原理结构、优缺点和应用场景。
|
||||
|
||||
深度学习是机器学习的一种,它源于神经网络模型的研究,由输入层、隐藏层,以及输出层组成,在计算机视觉、语音识别、自然语言处理等领域应用最为广泛。
|
||||
|
||||
在目前的机器学习领域中,它可以说是性能最好的网络模型了。但同时,它也具有可解释弱,模型训练慢,对大数据有依赖,模型复杂度高的缺点,这让它的应用场景受到了局限。
|
||||
|
||||
因此,在目前工业中,深度学习常用来处理计算机视觉、人脸识别、语音识别、机器翻译、自然语言处理、推荐系统等等。
|
||||
|
||||
最后,我还想补充一点,除了我们今天讲的CNN,深度学习还有很多其他的模型,比如 LSTM、RNN、Seq2Seq、Gen,以及很多开源的深度学习框架,比如 TensorFlow、PyTorch 等等。这些都为算法工程师构建和使用神经网络创造了极大的便利,并且在实际的工作中,他们通常也会选择这些框架来进行模型的构建和训练。作为产品经理,如果你掌握了我们今天讲的内容,你也可以结合自己的业务,多去了解一下这些内容。
|
||||
|
||||
## 课后讨论
|
||||
|
||||
最后,我还想请你介绍一下,你曾经在工作中遇到过的深度学习模型案例,以及当时为什么要基于深度学习来做?
|
||||
|
||||
欢迎在留言区给分享你的故事,也欢迎你把这节课分享给你的朋友,我们下节课见!
|
58
极客时间专栏/成为AI产品经理/算法技术能力篇/期中周测试题 ,你做对了吗?.md
Normal file
58
极客时间专栏/成为AI产品经理/算法技术能力篇/期中周测试题 ,你做对了吗?.md
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
你好,我是海丰。今天,我来公布一下主观题的答案。
|
||||
|
||||
我们先来回顾一下题目:
|
||||
|
||||
假如,你现在是一家电商平台的产品经理,负责点评系统的产品设计,现在有一个需求是要通过计算将海量评论中的垃圾评论(如,打广告的情况)过滤出来,你会怎么思考和设计产品?
|
||||
|
||||
我们知道,用户评论数据都是非结构信息,所以我们首先要做的就是将非结构化数据转化成结构化的。在文本分析中,我们可以使用“词向量”来表示文本中的数据。
|
||||
|
||||
举个例子,如果用户评论中出现某些特定词,比如“尊敬的”“您好”“促销”等等,它们很有可能属于垃圾评论。那我们就可以用这些词来构成“词向量”,具体怎么做呢?下面,我分三步来讲。
|
||||
|
||||
## 第一步:对评论进行分词。
|
||||
|
||||
分词是文本分析的首要工作,“基于字符串匹配”是最简单的分词方法。举个例子,现在有一句短语叫做“北京亚朵酒店”,以及我们事先积累的词库。
|
||||
|
||||
首先,我们可以提出短语的第一个字符串“北”,然后将短语中从“北”字开头的后续的内容与词库中收录的词语进行匹配。当匹配到了词库中的词语“北京”后,就可以停止匹配了,“京”字也就作为终止字符。这样,我们就从“北京亚朵酒店”中提出来了第一个词语“北京”。
|
||||
|
||||
接着,我们就可以把“北京”这个词从原始短语中删除,从“亚”字重新开始匹配。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/c5/7e/c51567521db7407a58663167f3183b7e.jpeg" alt="">
|
||||
|
||||
根据字符串匹配的方式,在已知业务常见词语的基础之上,我们是可以将评论中的所有词汇都切分出来的,切分的结果如上图所示。
|
||||
|
||||
当然,我这里使用“基于字符串匹配”的分词方式讲解是为了让你更容易理解,在实际工作中,我们通常会采用“正逆向最大匹配”的分词算法,以及如果有更为复杂的短语,如“武汉市长江大桥”,就要结合概率来进行分词了。
|
||||
|
||||
## 第二步:构建训练集和测试集。
|
||||
|
||||
解决了分词问题后,垃圾评论分类产品的构建的工作就已经完成一半儿了。接下来,就是构建训练集和测试集了。
|
||||
|
||||
首先,我们需要两组评论,一组用于训练,一组用于测试。目前,历史评论的样本数据我们有了,样本数据的标签(正常评论、垃圾评论)我们也有了,那么,只需要确定特征以后,就可以带入分类算法进行训练了。
|
||||
|
||||
那么特征是什么呢?其实就是把分词后的每个“词语”在样本中的词频(出现的次数)。
|
||||
|
||||
比如说,下面是5 个评论统计得到的词频统计表。其中“0”表示某个词语在评论中没有出现。“1”则表示某个词语在评论中出现了。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/c7/89/c73d41aed9cec72bf0140de59085a489.jpeg" alt="">
|
||||
|
||||
## 第三步:计算概率。
|
||||
|
||||
根据刚才得到的表格,我们能够计算出“尊敬的”“你好”这些词语在垃圾评论和正常评论中出现的概率,我把它们总结在了下面的表格里。这个时候,当“顾客”出现在新评论中的,我们就认为它是垃圾评论的概率是 0.2。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/7f/9c/7f10e80ef03664cf223874f385de679c.jpeg" alt="">
|
||||
|
||||
这样一来,当有了新的评论出现的时候,我们首先对它进行分词,根据概率公式 数学公式: $ p=\sum_{i=1}^{8}{c_{i}p_{i}} $计算新评论属于垃圾评论的概率。
|
||||
|
||||
比如,对于一个含有“尊敬的”、“促销”、“朋友”、“约会”、“顾客”的评论来说。
|
||||
|
||||
属于垃圾评论的概率是:
|
||||
|
||||
数学公式: $ 0.67 = 1 \times 0.2 + 0 \times 0.13 + 0 \times 0.13 + 1 \times 0.2 + 0 \times 0.13 + 1 \times 0.07 + 1 \times 0+1 \times 0.2 $
|
||||
|
||||
属于正常评论的概率是:
|
||||
|
||||
数学公式: $ 0.8 = 1 \times 0 + 0 \times 0 + 0 \times 0 + 1 \times 0.2 + 0 \times 0 + 1 \times 0.4 + 1 \times 0.2+1 \times 0 $
|
||||
|
||||
由于 0.8 大于 0.67,所以新评论属于正常评论。
|
||||
|
||||
好了,主观题的解题思路就是这样了。那么,期中周马上就要结束了,希望你能尽快巩固好我们所学的内容。我们下节课见!
|
132
极客时间专栏/成为AI产品经理/算法技术能力篇/期中答疑 | AI产品经理热门问题答疑合集.md
Normal file
132
极客时间专栏/成为AI产品经理/算法技术能力篇/期中答疑 | AI产品经理热门问题答疑合集.md
Normal file
@@ -0,0 +1,132 @@
|
||||
<audio id="audio" title="期中答疑 | AI产品经理热门问题答疑合集" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/18/7f/18445b17a4f8fd0640be5e384a96a77f.mp3"></audio>
|
||||
|
||||
你好,我是海丰。
|
||||
|
||||
到今天为止,我们的课程已经更新过半了。我非常开心看到很多同学一直在坚持留言,认真回答课后问题。不过,我也发现,不少同学已经慢慢掉队了,有的人是想要拿出大块的时间来学习,有的人是遇到问题之后没有解决,进度就停下了,总之是积累了很多的课程没有学习。
|
||||
|
||||
从今天开始,我们就进入期中周了。首先,我会整理出一些关注度比较高的课后问题,在这里进行统一的解答,其次,我还准备了一道问答题,通过解决它,希望能帮助你对前半程学过的知识进行梳理,查缺补漏。
|
||||
|
||||
我先给你准备一份学习指南:首先,关注度比较高的问题我分成了三类,分别是关于产品岗位、关于技术边界,以及关于项目流程的问题。你可以结合我下面的分类,直接去找对应的问题答案。如果你还有其他的疑问,也可以在留言区提问,我都会尽力解答。然后,你可以集中精力去做我留下的问答题,问答题的解决思路我会在周五进行更新,记得准时来看。
|
||||
|
||||
话不多说,直接进入今天的答疑吧!
|
||||
|
||||
## 关于产品岗位
|
||||
|
||||
### 问题1:如何快速建立对一个行业的结构认知?
|
||||
|
||||
想要快速对一个行业有整体的宏观认知,可以先从这个行业的产业链入手,了解这个产业中一个完整的价值创造过程是怎样的,行业里有哪些头尾部公司。获取这些产业认知内容的途径,我总结了一下,一般有3种方式:
|
||||
|
||||
<li>
|
||||
通过咨询公司报告,如 [艾瑞咨询](http://report.iresearch.cn/)、[易观智库](https://www.analysys.cn/)、[艾媒网](https://www.iimedia.cn) 等咨询公司的行业报告了解行业资讯和动态;
|
||||
</li>
|
||||
<li>
|
||||
通过行业发展报告,如 [中国报告大厅](http://www.chinabgao.com/)、[中国产业研究院](https://www.chinairn.com) 等相关行业发展或投资调研报告;
|
||||
</li>
|
||||
<li>
|
||||
行业上市公司财报,找行业内的上市公司,通过财报信息能全面的了解,行业的用户、商业、供应链、业务发展等信息。
|
||||
</li>
|
||||
|
||||
### 问题2:为什么 AI 产品经理多分布在 B 端企业?
|
||||
|
||||
每个行业都会有“产品岗位”,所以产品经理必然是覆盖全行业的。但为了区分产品经理就职的主流方向,大部分 AI 产品经理活跃在 B 端,原因在于过去几年 AI 在 B 端的产业,更容易商业化。
|
||||
|
||||
不过,岗位需求也是随着行业发展而动态变化的,所以最近一两年,我们也能看到 AI 产品经理在 ToC 和 ToB 中的岗位逐渐多了起来,例如推荐系统产品经理,虽然岗位 Title 没有提到 AI,但是岗位能力就是一个 AI 产品经理的要求。
|
||||
|
||||
随着 AI 技术在各行业的不断落地,我认为,ToC 的 AI 产品经理势必会成为未来几年后的岗位主流。
|
||||
|
||||
### 问题3:没有 AI 项目环境,产品经理如何转型?
|
||||
|
||||
这个问题我发现还是很普遍的,所以我把它单独拿出来说,我认为可以通过三个步骤来学习。
|
||||
|
||||
**第一步,夯实基础。** 我建议你先完整地跟着课程节奏学习一遍,重点掌握 AI 产品经理的三大能力,掌握课程中算法和评估相关的知识点。
|
||||
|
||||
**第二步,以教促学。** 在你了解了课程中的内容后,要试着用自己的话把这些内容讲出来,让别人听懂,而这离不开“从学习到分享再到学习”的一个迭代过程。
|
||||
|
||||
**第三步,落地实践。** 如果所在团队中没有算法同学,那你可以试着在工作中提一些和 AI 相关小需求,这些需求是可以通过相对简单容易的传统机器学习算法来解决的,比如KNN、Naive Bayes,这是为了确保工程研发同学可以通过学习实现。
|
||||
|
||||
这样一来,通过研发同学的“踩坑”经历,你可以总结出他们在落地算法过程中对复杂问题的解决和效果反馈,再把它们补充到你的知识技能树中,积累经验。总之,我们要善于利用身边的资源,赋能于自己的业务,来帮助自己提升。
|
||||
|
||||
### 问题4:算法工程师如何转型 AI 产品经理?
|
||||
|
||||
对于想要转型产品经理的算法同学,我有2点建议。
|
||||
|
||||
首先,需要理解产品经理和技术人员的区别。产品经理需要的是知识的广度,需要打通上下游与横向部门,而技术人员更多的是要在技术领域深挖。
|
||||
|
||||
其次,需要突破技术思维的限制。比如,需要意识到,很多时候产品经理做一个产品更重要的是对业务有价值,而不是要追求技术的创新,或者技术的某些提升。就像有时候一个模型 KS 是 30 还是 40 对于业务没有明显的提升,我们就用去提升这些指标。
|
||||
|
||||
总之,产品经理决定做一个事情的出发点,是通过技术来实现业务价值,有时候技术如何做反而不重要。
|
||||
|
||||
在实际操作上,我建议这类同学可以多和产品经理沟通,看看他们是怎么做的,他们的思考路径是什么,当他们给你提需求的时候,他们考虑的问题都有哪些,来发现自己和产品经理之间的区别,让自己习惯按照产品的思维去思考。
|
||||
|
||||
### 问题5:测试工程师如何转型 AI 产品经理?
|
||||
|
||||
对于这个问题,我有些犹豫,我比较推荐测试工程师在测试领域深造,然后将技能发展到 AI 测试领域,这样你作为一个测试工程师会有得天独厚的优势。
|
||||
|
||||
作为一名 AI 测试工程师,需要掌握的知识有机器学习基础知识、Python 编程、大数据基础、模型测试。当然,如果还是想转型 AI 产品经理,那么我也建议你参考上一个问题“算法工程师如何转型 AI 产品经理”,很多的准备工作都是相通的。
|
||||
|
||||
## 关于技术边界
|
||||
|
||||
### 问题6:AI 产品经理需要什么样的数学基础?
|
||||
|
||||
数学基础是很多转型产品经理都关注的问题。我认为,一个相对完整的数学基础知识体系包括:线性代数、概率论、数理统计、运筹学(最优化方法)、信息论。
|
||||
|
||||
但这并不是说,产品经理需要从头开始啃数学基础知识,而是你需要有两方面的认知。
|
||||
|
||||
一方面,我们要清晰产品经理对于数学基础的掌握边界。与算法和研发相比,产品经理不需要建模,所以有数学基础不需要你究其原理,如数理统计中的统计推断方法,或运筹学中的最优化方法,你的价值在于利用技术服务业务而不是精通技术。
|
||||
|
||||
另一方面,对于想快速入门AI领域的产品经理来说,一定要本着知识的落地应用为学习原则,例如作为产品经理来说为什么要学习概率分布,你要知道它在工作中的作用是什么,其中一点是为了和算法同学同频沟通,另一个很重要原因是为了验收产品。
|
||||
|
||||
因此,在转型初期,我们大可以以目的为导向只掌握和工作相关的数学知识,等后面工作稳定下来了,再适当去拓展自己的技术边界。
|
||||
|
||||
### 问题7:什么是数据特征、样本,以及标签?
|
||||
|
||||
我们先来看它们具体的定义,你可以结合下面的表格一块来理解:
|
||||
|
||||
- 标签:标签就是预测的结果,比如表格中的性别:“男”、“女”;
|
||||
- 特征:特征就是一系列的信息,可以作为人或事物特点的标识,用来描述标签;
|
||||
- 样本:样本是数据实例、特征的集合。样本可以带标签,也可以不带标签。带标签的样本用于模型的训练,不带标签的样本用于模型的预测。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/c9/84/c9e548d7917a9aa8488c44267445cc84.jpeg" alt="">
|
||||
|
||||
### 问题8:什么是特征归一化?
|
||||
|
||||
对特征进行归一化处理,是为了消除数据特征之间的量纲影响,让不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和千克(kg)作为单位,那么身高特征会在 1.5 ~ 2.0m 的数据范围内,体重特征会在 50 ~ 100kg 的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。
|
||||
|
||||
所以,为了得到更为准确的结果,我们需要对它们进行特征归一化处理,让每个指标处于同一数值量级。常用方法主要有两种:
|
||||
|
||||
<li>
|
||||
线性函数归一化:归一化后特征值 = (原值 - 特征最小值) / (特征最大值 - 特征最小值),在此方法的基础上,所有的特征值都会落在 [0, 1] 的区间里;
|
||||
</li>
|
||||
<li>
|
||||
标准差正态分布:归一化后特征值 = 特征平均值 / 特征标准差,使用此方法,转换后的特征有负有正,而且它们的均值为 0。
|
||||
</li>
|
||||
|
||||
## 关于项目流程
|
||||
|
||||
### 问题9:AI 产品 PRD 文档与传统产品 PRD 的不同
|
||||
|
||||
AI 产品 PRD 文档与传统产品 PRD 的不同主要有以下三方面的不同:
|
||||
|
||||
**第一,模型输出。**
|
||||
|
||||
即算法目标,你要解决的是一个分类问题还是一个回归问题(输出是一个概率还是一个连续值)。
|
||||
|
||||
如果是一个概率值,并且是用在分类场景中的,你还要确定是否需要进行二次加工,比如在做高潜用户预测,模型输出的是一个概率值,但这个概率值在业务场景无法使用,所以还需要映射成具体的用户等级。
|
||||
|
||||
**第二,数据接入。**
|
||||
|
||||
是否有数据依赖,注明已接入的数据,包括数据类型(Hive / MQ),数据量大小,更新频率,Hive表名及格式。
|
||||
|
||||
**第三,验收标准。**
|
||||
|
||||
除了如 KS、AUC 等强模型指标的确定。另外还要以目标为导向编写 PRD 的验收标准,不要拘泥形式。
|
||||
|
||||
举个例子,在推荐系统的排序环节中,产品经理要以目标为导向将模型的评估指标写到 PRD 中。如果产品是以提高 CTR(点击率) 为目标,就可以使用 CTR 作为衡量排序模型的指标。但在电商场景中,还存在 CVR、GMV、UV 等多个核心指标,所以并不是一个 CTR 指标就能决定的。这个时候,产品经理就要根据业务目标来优化排序模型的验收标准,如果公司追求的是 GMV,只单纯提升 CTR ,在一定程度上只能代表着用户体验的提升。
|
||||
|
||||
但算法工程师对这些点的考虑就会相对比较少,因为他们只对模型负责,不对产品负责。因此,这正是产品经理体现个人 PRD 的价值的好时机。
|
||||
|
||||
## 问答题
|
||||
|
||||
假如,你现在是一家电商平台的产品经理,负责点评系统的产品设计,现在有一个需求是要通过计算将海量评论中的垃圾评论(如,打广告的情况)过滤出来,你会怎么思考和设计产品呢?
|
||||
|
||||
好了,以上就是我们这次期中答疑的全部内容。我也希望这是一次我们共同交流和讨论的时间,你可以在这节课后把你的疑问分享给我,我会尽力帮助你扫清疑问,好让你赶上进度,顺利进入下一段征程!
|
Reference in New Issue
Block a user