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