【恢复更新】写给大家看的机器学习书(第八篇)——线性回归(下)

【恢复更新】写给大家看的机器学习书(第八篇)——线性回归(下)

1. 前言

《写给大家看的机器学习书(第七篇)——线性回归(上)》中,我们开始了这个系列文章中第一个回归模型的学习——线性回归,我们试图用它来进行成交额的预测。

在上篇,我们首先了解了线性回归的Hypothesis Set,掌握了线性回归Hypothesis Set的直观理解。然后学习了机器学习中的重量级概念 —— 损失函数 (Loss Function or Cost Function)。正是 Loss Function 定义了模型的好坏评估标准,我们说学习算法从 Hypothesis Set 中选出最优的那个模型,其实就是找出另 Loss Function 最小的 Hypothesis。

具体到线性回归的讨论中,我们希望从Hypothesis Set h(x) = w^Tx 中找到最优的那组参数 w ,继而得到最终的模型,其实就是要求得另 Loss Function 最小的 w

(如上篇所述,线性回归的Loss Function定义如下图所示)

2. 线性回归的最优参数估计

那怎么求得另 Loss Function 最小的 w 呢?最小二乘法正是用于解这样问题的优化方法。

根据最小二乘法,求解 Loss Function 的最小值以及最优参数 w ,可以分别对Loss Function求 w_0w_1w_2 、... 、 w_n 的偏导数,然后另它们等于零得到,即另:

即可求得最优的参数 w 以及 Loss 的最小值。这个过程称为线性回归的最小二乘参数估计(Parameter estimation)

更一般地,对于一般的线性情况,最小二乘法的解为 X^\dagger Y

维基百科给出了证明过程,也可以参考机器学习基石课程的推导过程,周志华的西瓜书也给出了 X^TX 是满秩矩阵情况的证明 )

其中 X^\daggerX广义逆矩阵(Generalized inverse),也叫伪逆矩阵(pseudo inverse)X 为特征矩阵, Y 为标注矩阵,他们的定义如下图所示( \Vert ... \Vert 表示向量的模长)。

当然你其实不用自己去实现计算 X 的广义逆矩阵,因为有很多函数库提供了现成实现,不仅方便而且比你自己实现的还要更高效,比如Python numpy库提供的这个实现

3. 线性回归实践

好,上一小节我们介绍了最优化参数估计的原理和推导,其中涉及偏导和矩阵运算可能会让初次接触的同学需要一点时间消化一下。

但这里我要说的是,在实际的应用中并不要求你能够自己进行上一小节那样的推导。实际使用线性回归非常简单,仅有三步:

  • Step 1:根据训练数据,构造特征矩阵 X 和标注矩阵 Y ,即令:

X= \left\{ \begin{matrix} {X_1}^\top \\ {X_2}^\top \\ ... \\ {X_N}^\top \end{matrix} \right\} Y= \left\{ \begin{matrix} y_1 \\ y_2 \\ ... \\ y_N \end{matrix} \right\}

  • Step 2:调用合适的函数库计算 X 的广义逆矩阵 X^\dagger
  • Step 3:计算得到最优参数 w=X^\dagger Y ,即学得最终模型 g(x)=w^T x

就是这么简单 :)

4. 线性回归 vs PLA

好,至此,我们已经学会了两种机器学习算法——PLA和线性回归,这一小节我们简单的做个比较,如上表所示:

  • PLA用于解决分类问题,分类问题的标注是离散值。线性回归用于解决回归问题,回归问题的标注是连续值,通常是实数域 R
  • 它们的Hypothesis Set很像,一个有 sign() 函数,一个没有。
  • PLA 的误差度量为预测值与标注不相等的数量,线性回归则是使用均方误差。
  • 至于在最优参数估计这方面,我们在讲解PLA的时候,提到过经典的PLA要求训练数据必须线性可分,而且哪怕线性可分PLA需要计算多久也不知道。于是我们提出了升级版的 PLA 去近似的求得一个“还不错”的解。事实上,一个“还不错”的解意味着我们其实无法求得PLA的最优解,PLA的最优解求解是一个NP难问题。而线性回归的最优解是可以求得的,上面已经给出了证明。

最后,给大家留个思考题,既然我们说线性回归可以求得最优解而PLA难以做到这点,而且这两个算法的Hypothesis Set的直观理解都是一条直线或者一个平面或者一个超平面,那么有没有可能使用线性回归去求解二分类问题呢?能想清楚这个问题,对PLA和线性回归的理解都能够加强 :)

5. 招聘

感谢您阅读,我是八汰。

我所在的快手商业化产品技术团队招聘独挡一面的工程师,如果你或者你的朋友是一流的

  • 算法工程师(广告/推荐/搜索/计算视觉)
  • 系统工程师
  • 数据工程师

非常希望有幸与您交流并成为伙伴。

如果您在计算广告、个性化推荐、搜索方面有过扎实的架构或者算法经历,或者具有非凡的才华、激情和学习力,非常期待与您成为伙伴,可将您的简历发至我的邮箱:hancyxhx@gmail.com,或者找我聊聊都非常欢迎。之前文章中我有提到过的引发猜你喜欢爆炸腾飞的算法工程师、2015双十一老A,还有我和一票伙伴,期待A Player的你加入。

(附录1有部分职位的Job Description,当然我知道A Player经常都是1个打10个的选手,突破条条框框的边界,对于这样的选手,请自动忽略缛节)

6. 附录一:部分 Job Description

广告算法工程师:

工作职责:

  1. 负责快手商业化投放算法的研究及开发工作
  2. 负责快手商业化投放控制及流量预估系统的研发
  3. 负责快手商业化CXR预估算法及相关机器学习/深度学习平台研发
  4. 负责快手短视频广告的模式、机制的探索
  5. 负责快手广告反作弊系统及策略研发

岗位要求 :

  • 211或985计算机或相关专业本科以上学历,具备在线广告及相关领域一年以上工作经验
  • 熟练掌握linux下面向对象编程;(熟悉Java or C++)
  • 熟悉机器学习、数据挖掘知识;
  • 对数据敏感,有较强数据分析和解决问题能力;
  • 有创业者基因:你渴望一个能够共同成长的团队,而不是找一份养家糊口的工作
  • 有开发高品质产品、编写高质量代码的自我要求

加分项:
1、理解广告算法&业务&技术架构,具备一年以上搜索广告或展示广告相关经验;
2、对技术有热情,动手能力强,参加过各类竞赛并取得较好成绩;
3、有高并发情况下的系统设计及实践经验;


广告系统研发工程师(C++):

  1. 负责快手核心商业产品功能和架构研发
  2. 负责快手高性能广告引擎的设计、研发及持续优化
  3. 负责快手广告数据平台、排序服务及机器学习/深度学习平台研发
  4. 与广告算法团队一起,研发和优化广告机制、召回、排序、竞价、频率/流量控制等核心投放策略;
  5. 负责前瞻技术的跟踪调研和技术创新

岗位要求 :

  • 211或985计算机或相关专业本科以上学历,具备在线广告或者相关领域一年以上工作经验
  • 熟悉分布式系统,数据存储及网络通信技术
  • 深入理解算法与常用数据结构
  • 熟悉linux开发环境,熟练使用C++
  • 了解统计模型,有机器学习,数据挖掘等相关技术工作经验的优先
  • 有过大规模(千万级在线用户以上)AdExchange,DSP系统开发经验的优先
  • 有创业者基因:你渴望一个能够共同成长的团队,而不是找一份养家糊口的工作
  • 有开发高品质产品、编写高质量代码的自我要求


广告系统研发工程师(Java):

  1. 负责快手高性能广告交易平台的设计、研发及持续优化;
  2. 负责快手广告营销平台后端、结算系统等开发及持续优化
  3. 参与解决海量商业数据分布式处理、高效查询、数据一致性、准确性等方面带来的各种技术难题和挑战
  4. 负责前瞻技术的跟踪调研和技术创新

岗位要求 :

  • 211或985计算机或相关专业本科以上学历,具备1年以上的大型Web应用开发和架构经验;
  • 熟悉linux开发环境,熟练使用Java和面向对象设计开发
  • 熟悉主流Web应用相关的框架,对至少两个主流框架有深入理解
  • 对设计模式、软件工程等有较深入的理解;
  • 熟悉大型分布式、高并发、高可用性系统设计开发;
  • 了解统计模型,有机器学习,数据挖掘等相关技术工作经验的优先
  • 有过大规模(千万级在线用户以上)AdExchange,DSP系统开发经验的优先
  • 有创业者基因:你渴望一个能够共同成长的团队,而不是找一份养家糊口的工作
  • 有开发高品质产品、编写高质量代码的自我要求


广告数据研发工程师:

1、负责快手广告结算计费系统开发、维护和优化
2、负责快手离线数据统计、广告报表产出分析、效果监测、归因分析和商务支持
3、负责快手DMP系统研发和算法
4、负责快手广告业务商业分析

岗位要求:
- 熟悉机器学习、数据挖掘知识;
- 对数据敏感,有较强数据分析、逻辑推理能力和解决问题能力;
- 有耐心,能冷静的分析和解决问题
- 有广告数据分析经验优先
- 有创业者基因:你渴望一个能够共同成长的团队,而不是找一份养家糊口的工作
- 有开发高品质产品、编写高质量代码的自我要求


计算视觉算法工程师

  1. 具备丰富的机器学习(深度学习)相关领域经验,有代表性的成果或论文;
  2. 熟悉图像视频NLP等领域相关技术和从业经验,熟悉对抗生成/强化学习等技术者优先;
  3. 具有扎实的工程实现能力,熟悉分布式计算Hadoop/Spark/MPI者优先;
  4. 有技术,能创新、敢承担、可实战,团队合作、沟通能力佳。
发布于 2017-11-06