◆ ◆ ◆ 1. 引言也許你和這個叫『機器學習』的家伙一點也不熟,但是你舉起iphone手機拍照的時候,早已習慣它幫你框出人臉;也自然而然點開今日頭條推給你的新聞;也習慣逛淘寶點了找相似之后貨比三家;亦或喜聞樂見微軟的年齡識別網站結果刷爆朋友圈。恩,這些功能的核心算法就是機器學習領域的內容。 套用一下大神們對機器學習的定義,機器學習研究的是計算機怎樣模擬人類的學習行為,以獲取新的知識或技能,并重新組織已有的知識結構使之不斷改善自身。簡單一點說,就是計算機從數據中學習出規律和模式,以應用在新數據上做預測的任務。近年來互聯網數據大爆炸,數據的豐富度和覆蓋面遠遠超出人工可以觀察和總結的范疇,而機器學習的算法能指引計算機在海量數據中,挖掘出有用的價值,也使得無數學習者為之著迷。 但是越說越覺得機器學習有距離感,云里霧里高深莫測,我們不是專家,但說起算有一些從業經驗,做過一些項目在實際數據上應用機器學習。這一篇就我們的經驗和各位同仁的分享,總結一些對于初學者入門有幫助的方法和對進階有用的資料。 ◆ ◆ ◆2. 機器學習關注問題并非所有的問題都適合用機器學習解決(很多邏輯清晰的問題用規則能很高效和準確地處理),也沒有一個機器學習算法可以通用于所有問題。咱們先來了解了解,機器學習,到底關心和解決什么樣的問題。 從功能的角度分類,機器學習在一定量級的數據上,可以解決下列問題: 1.分類問題
2.回歸問題
3.聚類問題
我們再把上述常見問題劃到機器學習最典型的2個分類上。
如果在IT行業(尤其是互聯網)里溜達一圈,你會發現機器學習在以下熱點問題中有廣泛應用: 1.計算機視覺
2.自然語言處理
3.社會網絡分析
4.推薦
◆ ◆ ◆3. 入門方法與學習路徑OK,不廢話,直接切重點丟干貨了。看似學習難度大,曲線陡的機器學習,對大多數入門者也有一個比較通用的學習路徑,也有一些優秀的入門資料可以降低大家的學習門檻,同時激發我們的學習樂趣。 簡單說來,大概的一個學習路徑如下:
簡單說一點,之所以最左邊寫了『數學基礎』『典型機器學習算法』『編程基礎』三個并行的部分,是因為機器學習是一個將數學/算法理論和工程實踐緊密結合的領域,需要扎實的理論基礎幫助引導數據分析與模型調優,同時也需要精湛的工程開發能力去高效化地訓練和部署模型和服務。 需要多說一句的是,在互聯網領域從事機器學習的人,有2類背景的人比較多,其中一部分(很大一部分)是程序員出身,這類同學工程經驗相對會多一些,另一部分是學數學統計領域的同學,這部分同學理論基礎相對扎實一些。因此對比上圖,2類同學入門機器學習,所欠缺和需要加強的部分是不一樣的。 下面就上述圖中的部分,展開來分別扯幾句: 3.1 數學基礎有無數激情滿滿大步向前,誓要在機器學習領域有一番作為的同學,在看到公式的一刻突然就覺得自己狗帶了。是啊,機器學習之所以相對于其他開發工作,更有門檻的根本原因就是數學。每一個算法,要在訓練集上最大程度擬合同時又保證泛化能力,需要不斷分析結果和數據,調優參數,這需要我們對數據分布和模型底層的數學原理有一定的理解。所幸的是如果只是想合理應用機器學習,而不是做相關方向高精尖的research,需要的數學知識啃一啃還是基本能理解下來的。至于更高深的部分,恩,博主非常愿意承認自己是『數學渣』。 基本所有常見機器學習算法需要的數學基礎,都集中在微積分、線性代數和概率與統計當中。下面我們先過一過知識重點,文章的后部分會介紹一些幫助學習和鞏固這些知識的資料。 3.1.1 微積分
3.1.2 線性代數
3.1.3 概率與統計從廣義來說,機器學習在做的很多事情,和統計層面數據分析和發掘隱藏的模式,是非常類似的。
3.2 典型算法絕大多數問題用典型機器學習的算法都能解決,粗略地列舉一下這些方法如下:
我們多插一句,機器學習里所說的“算法”與程序員所說的“數據結構與算法分析”里的“算法”略有區別。前者更關注結果數據的召回率、精確度、準確性等方面,后者更關注執行過程的時間復雜度、空間復雜度等方面。 。當然,實際機器學習問題中,對效率和資源占用的考量是不可或缺的。 3.3 編程語言、工具和環境看了無數的理論與知識,總歸要落到實際動手實現和解決問題上。而沒有工具所有的材料和框架、邏輯、思路都給你,也寸步難行。因此我們還是得需要合適的編程語言、工具和環境幫助自己在數據集上應用機器學習算法,或者實現自己的想法。對初學者而言,Python和R語言是很好的入門語言,很容易上手,同時又活躍的社區支持,豐富的工具包幫助我們完成想法。相對而言,似乎計算機相關的同學用Python多一些,而數學統計出身的同學更喜歡R一些。我們對編程語言、工具和環境稍加介紹: 3.3.1 pythonpython有著全品類的數據科學工具,從數據獲取、數據清洗到整合各種算法都做得非常全面。
3.3.2 RR最大的優勢是開源社區,聚集了非常多功能強大可直接使用的包,絕大多數的機器學習算法在R中都有完善的包可直接使用,同時文檔也非常齊全。常見的package包括:RGtk2, pmml, colorspace, ada, amap, arules, biclust, cba, descr, doBy, e1071, ellipse等等。另外,值得一提的是R的可視化效果做得非常不錯,而這對于機器學習是非常有幫助的。 3.3.3 其他語言相應資深程序員GG的要求,再補充一下java和C 相關機器學習package。
3.3.4 大數據相關3.3.5 操作系統
3.4 基本工作流程以上我們基本具備了機器學習的必要條件,剩下的就是怎么運用它們去做一個完整的機器學習項目。其工作流程如下: 3.4.1 抽象成數學問題
3.4.2 獲取數據
3.4.3 特征預處理與特征選擇
3.4.4 訓練模型與調優
3.4.5 模型診斷如何確定模型調優的方向與思路呢?這就需要對模型進行診斷的技術。
3.4.6 模型融合
3.4.7 上線運行
這些工作流程主要是工程實踐上總結出的一些經驗。并不是每個項目都包含完整的一個流程。這里的部分只是一個指導性的說明,只有大家自己多實踐,多積累項目經驗,才會有自己更深刻的認識。 3.5 關于積累項目經驗初學機器學習可能有一個誤區,就是一上來就陷入到對各種高大上算法的追逐當中。動不動就我能不能用深度學習去解決這個問題啊?我是不是要用boosting算法做一些模型融合啊?我一直持有一個觀點,『脫離業務和數據的算法討論是毫無意義的』。 實際上按我們的學習經驗,從一個數據源開始,即使是用最傳統,已經應用多年的機器學習算法,先完整地走完機器學習的整個工作流程,不斷嘗試各種算法深挖這些數據的價值,在運用過程中把數據、特征和算法搞透,真正積累出項目經驗 才是最快、最靠譜的學習路徑。 那如何獲取數據和項目呢?一個捷徑就是積極參加國內外各種數據挖掘競賽,數據直接下載下來,按照競賽的要求去不斷優化,積累經驗。國外的Kaggle和國內的DataCastle 以及阿里天池比賽都是很好的平臺,你可以在上面獲取真實的數據和數據科學家們一起學習和進行競賽,嘗試使用已經學過的所有知識來完成這個比賽本身也是一件很有樂趣的事情。和其他數據科學家的討論能開闊視野,對機器學習算法有更深層次的認識。 有意思的是,有些平臺,比如阿里天池比賽,甚至給出了從數據處理到模型訓練到模型評 估、可視化到模型融合增強的全部組件,你要做的事情只是參與比賽,獲取數據,然后使用這些組件去實現自己的idea即可。具體內容可以參見阿里云機器學習文檔。 3.6 自主學習能力多幾句嘴,這部分內容和機器學習本身沒有關系,但是我們覺得這方面的能力對于任何一種新知識和技能的學習來說都是至關重要的。 自主學習能力提升后,意味著你能夠跟據自己的情況,找到最合適的學習資料和最快學習成長路徑。 3.6.1 信息檢索過濾與整合能力對于初學者,絕大部分需要的知識通過網絡就可以找到了。 google搜索引擎技巧——組合替換搜索關鍵詞、站內搜索、學術文獻搜索、PDF搜索等——都是必備的。 一個比較好的習慣是找到信息的原始出處,如個人站、公眾號、博客、專業網站、書籍等等。這樣就能夠找到系統化、不失真的高質量信息。 百度搜到的技術類信息不夠好,建議只作為補充搜索來用。各種搜索引擎都可以交叉著使用效果更好。 學會去常見的高質量信息源中搜索東西:stackoverflow(程序相關)、quora(高質量回答)、wikipedia(系統化知識,比某某百科不知道好太多)、知乎(中文、有料)、網盤搜索(免費資源一大把)等。 將搜集到的網頁放到分類齊全的云端收藏夾里,并經常整理。這樣無論在公司還是在家里,在電腦前還是在手機上,都能夠找到自己喜歡的東西。 搜集到的文件、代碼、電子書等等也放到云端網盤里,并經常整理。 3.6.2 提煉與總結能力經常作筆記,并總結自己學到的知識是成長的不二法門。其實主要的困難是懶,但是堅持 之后總能發現知識的共性,就能少記一些東西,掌握得更多。 筆記建議放到云端筆記里,印象筆記、為知筆記都還不錯。這樣在坐地鐵、排隊等零碎的時間都能看到筆記并繼續思考。 3.6.3 提問與求助能力機器學習的相關QQ群、論壇、社區一大堆。總有人知道你問題的答案。 但是大多數同學都很忙,沒法像家庭教師那樣手把手告訴你怎么做。 為了讓回答者最快明白你的問題,最好該學會正確的問問題的方式:陳述清楚你的業務場景和業務需求是什么,有什么已知條件,在哪個具體的節點上遇到困難了,并做過哪些努力。 有一篇經典的文章告訴你怎樣通過提問獲得幫助:《提問的智慧》,強力推薦。 話鋒犀利了些,但里面的干貨還是很好的。 別人幫助你的可能性與你提問題的具體程度和重要性呈指數相關。 3.6.4 分享的習慣我們深信:“證明自己真的透徹理解一個知識,最好的方法,是給一個想了解這個內容的人,講清楚這個內容。”分享能夠最充分地提升自己的學習水平。這也是我們堅持長期分享最重要的原因。 分享還有一個副產品,就是自己在求助的時候能夠獲得更多的幫助機會,這也非常重要。 ◆ ◆ ◆4. 相關資源推薦文章的最后部分,我們繼續放送干貨。其實機器學習的優質資源非常多。博主也是翻遍瀏覽器收藏夾,也問同事取了取經,整合了一部分資源羅列如下: 4.1 入門資源首先coursera 是一個非常好的學習網站,集中了全球的精品課程。上述知識學習的過程都可以在上面找到合適的課程。也有很多其他的課程網站,這里我們就需要學習的數學和機器學習算法推薦一些課程(有一些課程有中文字幕,有一些只有英文字幕,有一些甚至沒有字幕,大家根據自己的情況調整,如果不習慣英文,基礎部分有很多國內的課程也非常優質):
4.2 進階資源
◆ ◆ ◆ 作者介紹 龍心塵和寒小陽:從事機器學習/數據挖掘相關應用工作,熱愛機器學習/數據挖掘
|
|
來自: Mr.Zhou... > 《我的圖書館》