【恢復更新】寫給大家看的機器學習書(第八篇)——線性回歸(下)
1. 前言
在《寫給大家看的機器學習書(第七篇)——線性回歸(上)》中,我們開始了這個系列文章中第一個回歸模型的學習——線性回歸,我們試圖用它來進行成交額的預測。
在上篇,我們首先了解了線性回歸的Hypothesis Set,掌握了線性回歸Hypothesis Set的直觀理解。然後學習了機器學習中的重量級概念 —— 損失函數 (Loss Function or Cost Function)。正是 Loss Function 定義了模型的好壞評估標準,我們說學習演算法從 Hypothesis Set 中選出最優的那個模型,其實就是找出另 Loss Function 最小的 Hypothesis。
具體到線性回歸的討論中,我們希望從Hypothesis Set 中找到最優的那組參數 ,繼而得到最終的模型,其實就是要求得另 Loss Function 最小的 。
(如上篇所述,線性回歸的Loss Function定義如下圖所示)
?
2. 線性回歸的最優參數估計
那怎麼求得另 Loss Function 最小的 呢?最小二乘法正是用於解這樣問題的優化方法。
根據最小二乘法,求解 Loss Function 的最小值以及最優參數 ,可以分別對Loss Function求 、 、 、... 、 的偏導數,然後另它們等於零得到,即另:
即可求得最優的參數 以及 Loss 的最小值。這個過程稱為線性回歸的最小二乘參數估計(Parameter estimation)。
更一般地,對於一般的線性情況,最小二乘法的解為 。
( 維基百科給出了證明過程,也可以參考機器學習基石課程的推導過程,周志華的西瓜書也給出了 是滿秩矩陣情況的證明 )
其中 是 的廣義逆矩陣(Generalized inverse),也叫偽逆矩陣(pseudo inverse)。 為特徵矩陣, 為標註矩陣,他們的定義如下圖所示( 表示向量的模長)。
當然你其實不用自己去實現計算 的廣義逆矩陣,因為有很多函數庫提供了現成實現,不僅方便而且比你自己實現的還要更高效,比如Python numpy庫提供的這個實現。
3. 線性回歸實踐
好,上一小節我們介紹了最優化參數估計的原理和推導,其中涉及偏導和矩陣運算可能會讓初次接觸的同學需要一點時間消化一下。
但這裡我要說的是,在實際的應用中並不要求你能夠自己進行上一小節那樣的推導。實際使用線性回歸非常簡單,僅有三步:
- Step 1:根據訓練數據,構造特徵矩陣 和標註矩陣 ,即令:
- Step 2:調用合適的函數庫計算 的廣義逆矩陣
- Step 3:計算得到最優參數 ,即學得最終模型
就是這麼簡單 :)
4. 線性回歸 vs PLA
好,至此,我們已經學會了兩種機器學習演算法——PLA和線性回歸,這一小節我們簡單的做個比較,如上表所示:
- PLA用於解決分類問題,分類問題的標註是離散值。線性回歸用於解決回歸問題,回歸問題的標註是連續值,通常是實數域 。
- 它們的Hypothesis Set很像,一個有 函數,一個沒有。
- 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
廣告演算法工程師:
工作職責:
- 負責快手商業化投放演算法的研究及開發工作
- 負責快手商業化投放控制及流量預估系統的研發
- 負責快手商業化CXR預估演算法及相關機器學習/深度學習平台研發
- 負責快手短視頻廣告的模式、機制的探索
- 負責快手廣告反作弊系統及策略研發
崗位要求 :
- 211或985計算機或相關專業本科以上學歷,具備在線廣告及相關領域一年以上工作經驗
- 熟練掌握linux下面向對象編程;(熟悉Java or C++)
- 熟悉機器學習、數據挖掘知識;
- 對數據敏感,有較強數據分析和解決問題能力;
- 有創業者基因:你渴望一個能夠共同成長的團隊,而不是找一份養家糊口的工作
- 有開發高品質產品、編寫高質量代碼的自我要求
加分項:
1、理解廣告演算法&業務&技術架構,具備一年以上搜索廣告或展示廣告相關經驗;2、對技術有熱情,動手能力強,參加過各類競賽並取得較好成績;3、有高並發情況下的系統設計及實踐經驗;廣告系統研發工程師(C++):
- 負責快手核心商業產品功能和架構研發
- 負責快手高性能廣告引擎的設計、研發及持續優化
- 負責快手廣告數據平台、排序服務及機器學習/深度學習平台研發
- 與廣告演算法團隊一起,研發和優化廣告機制、召回、排序、競價、頻率/流量控制等核心投放策略;
- 負責前瞻技術的跟蹤調研和技術創新
崗位要求 :
- 211或985計算機或相關專業本科以上學歷,具備在線廣告或者相關領域一年以上工作經驗
- 熟悉分散式系統,數據存儲及網路通信技術
- 深入理解演算法與常用數據結構
- 熟悉linux開發環境,熟練使用C++
- 了解統計模型,有機器學習,數據挖掘等相關技術工作經驗的優先
- 有過大規模(千萬級在線用戶以上)AdExchange,DSP系統開發經驗的優先
- 有創業者基因:你渴望一個能夠共同成長的團隊,而不是找一份養家糊口的工作
- 有開發高品質產品、編寫高質量代碼的自我要求
廣告系統研發工程師(Java):
- 負責快手高性能廣告交易平台的設計、研發及持續優化;
- 負責快手廣告營銷平台後端、結算系統等開發及持續優化
- 參與解決海量商業數據分散式處理、高效查詢、數據一致性、準確性等方面帶來的各種技術難題和挑戰
- 負責前瞻技術的跟蹤調研和技術創新
崗位要求 :
- 211或985計算機或相關專業本科以上學歷,具備1年以上的大型Web應用開發和架構經驗;
- 熟悉linux開發環境,熟練使用Java和面向對象設計開發
- 熟悉主流Web應用相關的框架,對至少兩個主流框架有深入理解
- 對設計模式、軟體工程等有較深入的理解;
- 熟悉大型分散式、高並發、高可用性系統設計開發;
- 了解統計模型,有機器學習,數據挖掘等相關技術工作經驗的優先
- 有過大規模(千萬級在線用戶以上)AdExchange,DSP系統開發經驗的優先
- 有創業者基因:你渴望一個能夠共同成長的團隊,而不是找一份養家糊口的工作
- 有開發高品質產品、編寫高質量代碼的自我要求
廣告數據研發工程師:
1、負責快手廣告結算計費系統開發、維護和優化
2、負責快手離線數據統計、廣告報表產出分析、效果監測、歸因分析和商務支持3、負責快手DMP系統研發和演算法
4、負責快手廣告業務商業分析崗位要求:
- 熟悉機器學習、數據挖掘知識;- 對數據敏感,有較強數據分析、邏輯推理能力和解決問題能力;- 有耐心,能冷靜的分析和解決問題- 有廣告數據分析經驗優先- 有創業者基因:你渴望一個能夠共同成長的團隊,而不是找一份養家糊口的工作- 有開發高品質產品、編寫高質量代碼的自我要求計算視覺演算法工程師
- 具備豐富的機器學習(深度學習)相關領域經驗,有代表性的成果或論文;
- 熟悉圖像視頻NLP等領域相關技術和從業經驗,熟悉對抗生成/強化學習等技術者優先;
- 具有紮實的工程實現能力,熟悉分散式計算Hadoop/Spark/MPI者優先;
- 有技術,能創新、敢承擔、可實戰,團隊合作、溝通能力佳。
推薦閱讀:
※cs.CL weekly 2016.09.26-2016.09.30
※從高斯分布、機器人誤差、EM演算法到小球檢測
※機器學習系列-word2vec篇
※機器學習43條軍規:解密谷歌機器學習工程最佳實踐(上)