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)容。
套用一下大神們對機(jī)器學(xué)習(xí)的定義愉烙,機(jī)器學(xué)習(xí)研究的是計(jì)算機(jī)怎樣模擬人類的學(xué)習(xí)行為讨盒,以獲取新的知識(shí)或技能,并重新組織已有的知識(shí)結(jié)構(gòu)使之不斷改善自身步责。簡單一點(diǎn)說返顺,就是計(jì)算機(jī)從數(shù)據(jù)中學(xué)習(xí)出規(guī)律和模式,以應(yīng)用在新數(shù)據(jù)上做預(yù)測的任務(wù)勺择。近年來互聯(lián)網(wǎng)數(shù)據(jù)大爆炸创南,數(shù)據(jù)的豐富度和覆蓋面遠(yuǎn)遠(yuǎn)超出人工可以觀察和總結(jié)的范疇,而機(jī)器學(xué)習(xí)的算法能指引計(jì)算機(jī)在海量數(shù)據(jù)中省核,挖掘出有用的價(jià)值稿辙,也使得無數(shù)學(xué)習(xí)者為之著迷。
但是越說越覺得機(jī)器學(xué)習(xí)有距離感气忠,云里霧里高深莫測邻储,我們不是專家,但說起算有一些從業(yè)經(jīng)驗(yàn)旧噪,做過一些項(xiàng)目在實(shí)際數(shù)據(jù)上應(yīng)用機(jī)器學(xué)習(xí)吨娜。這一篇就我們的經(jīng)驗(yàn)和各位同仁的分享,總結(jié)一些對于初學(xué)者入門有幫助的方法和對進(jìn)階有用的資料淘钟。
2. 機(jī)器學(xué)習(xí)關(guān)注問題
并非所有的問題都適合用機(jī)器學(xué)習(xí)解決(很多邏輯清晰的問題用規(guī)則能很高效和準(zhǔn)確地處理)宦赠,也沒有一個(gè)機(jī)器學(xué)習(xí)算法可以通用于所有問題。咱們先來了解了解米母,機(jī)器學(xué)習(xí)勾扭,到底關(guān)心和解決什么樣的問題。
從功能的角度分類铁瞒,機(jī)器學(xué)習(xí)在一定量級(jí)的數(shù)據(jù)上妙色,可以解決下列問題:
1.分類問題
根據(jù)數(shù)據(jù)樣本上抽取出的特征,判定其屬于有限個(gè)類別中的哪一個(gè)慧耍。比如:
垃圾郵件識(shí)別(結(jié)果類別:1身辨、垃圾郵件 2、正常郵件)
文本情感褒貶分析(結(jié)果類別:1芍碧、褒 2煌珊、貶)
圖像內(nèi)容識(shí)別識(shí)別(結(jié)果類別:1、喵星人 2泌豆、汪星人 3定庵、人類 4、草泥馬 5、都不是)洗贰。
2.回歸問題
根據(jù)數(shù)據(jù)樣本上抽取出的特征,預(yù)測一個(gè)連續(xù)值的結(jié)果陨倡。比如:
星爺《美人魚》票房
大帝都2個(gè)月后的房價(jià)
隔壁熊孩子一天來你家?guī)状瘟沧蹋瑢櫺夷愣嗌偻婢?/p>
3.聚類問題
根據(jù)數(shù)據(jù)樣本上抽取出的特征,讓樣本抱抱團(tuán)(相近/相關(guān)的樣本在一團(tuán)內(nèi))兴革。比如:
google的新聞分類
用戶群體劃分
我們再把上述常見問題劃到機(jī)器學(xué)習(xí)最典型的2個(gè)分類上绎晃。
分類與回歸問題需要用已知結(jié)果的數(shù)據(jù)做訓(xùn)練,屬于“監(jiān)督學(xué)習(xí)”
聚類的問題不需要已知標(biāo)簽杂曲,屬于“非監(jiān)督學(xué)習(xí)”庶艾。
如果在IT行業(yè)(尤其是互聯(lián)網(wǎng))里溜達(dá)一圈,你會(huì)發(fā)現(xiàn)機(jī)器學(xué)習(xí)在以下熱點(diǎn)問題中有廣泛應(yīng)用:
1).計(jì)算機(jī)視覺
典型的應(yīng)用包括:人臉識(shí)別擎勘、車牌識(shí)別咱揍、掃描文字識(shí)別、圖片內(nèi)容識(shí)別棚饵、圖片搜索等等煤裙。
2).自然語言處理
典型的應(yīng)用包括:搜索引擎智能匹配、文本內(nèi)容理解噪漾、文本情緒判斷硼砰,語音識(shí)別、輸入法欣硼、機(jī)器翻譯等等题翰。
3).社會(huì)網(wǎng)絡(luò)分析
典型的應(yīng)用包括:用戶畫像、網(wǎng)絡(luò)關(guān)聯(lián)分析诈胜、欺詐作弊發(fā)現(xiàn)豹障、熱點(diǎn)發(fā)現(xiàn)等等。
4).推薦
典型的應(yīng)用包括:蝦米音樂的“歌曲推薦”耘斩,某寶的“猜你喜歡”等等沼填。3. 入門方法與學(xué)習(xí)路徑
OK,不廢話括授,直接切重點(diǎn)丟干貨了坞笙。看似學(xué)習(xí)難度大荚虚,曲線陡的機(jī)器學(xué)習(xí)薛夜,對大多數(shù)入門者也有一個(gè)比較通用的學(xué)習(xí)路徑,也有一些優(yōu)秀的入門資料可以降低大家的學(xué)習(xí)門檻版述,同時(shí)激發(fā)我們的學(xué)習(xí)樂趣梯澜。
簡單說來,大概的一個(gè)學(xué)習(xí)路徑如下:
簡單說一點(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ù)咆疗。
需要多說一句的是漓帚,在互聯(lián)網(wǎng)領(lǐng)域從事機(jī)器學(xué)習(xí)的人,有2類背景的人比較多午磁,其中一部分(很大一部分)是程序員出身尝抖,這類同學(xué)工程經(jīng)驗(yàn)相對會(huì)多一些,另一部分是學(xué)數(shù)學(xué)統(tǒng)計(jì)領(lǐng)域的同學(xué)迅皇,這部分同學(xué)理論基礎(chǔ)相對扎實(shí)一些昧辽。因此對比上圖,2類同學(xué)入門機(jī)器學(xué)習(xí)登颓,所欠缺和需要加強(qiáng)的部分是不一樣的搅荞。
下面就上述圖中的部分,展開來分別扯幾句:
3.1 數(shù)學(xué)基礎(chǔ)
有無數(shù)激情滿滿大步向前挺据,誓要在機(jī)器學(xué)習(xí)領(lǐng)域有一番作為的同學(xué)取具,在看到公式的一刻突然就覺得自己狗帶了。是啊扁耐,機(jī)器學(xué)習(xí)之所以相對于其他開發(fā)工作暇检,更有門檻的根本原因就是數(shù)學(xué)。每一個(gè)算法婉称,要在訓(xùn)練集上最大程度擬合同時(shí)又保證泛化能力块仆,需要不斷分析結(jié)果和數(shù)據(jù),調(diào)優(yōu)參數(shù)王暗,這需要我們對數(shù)據(jù)分布和模型底層的數(shù)學(xué)原理有一定的理解悔据。所幸的是如果只是想合理應(yīng)用機(jī)器學(xué)習(xí),而不是做相關(guān)方向高精尖的research俗壹,需要的數(shù)學(xué)知識(shí)啃一啃還是基本能理解下來的科汗。至于更高深的部分,恩绷雏,博主非常愿意承認(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 微積分
微分的計(jì)算及其幾何早歇、物理含義,是機(jī)器學(xué)習(xí)中大多數(shù)算法的求解過程的核心。比如算法中運(yùn)用到梯度下降法箭跳、牛頓法等晨另。如果對其幾何意義有充分的理解,就能理解“梯度下降是用平面來逼近局部谱姓,牛頓法是用曲面逼近局部”拯刁,能夠更好地理解運(yùn)用這樣的方法。
凸優(yōu)化和條件最優(yōu)化 的相關(guān)知識(shí)在算法中的應(yīng)用隨處可見逝段,如果能有系統(tǒng)的學(xué)習(xí)將使得你對算法的認(rèn)識(shí)達(dá)到一個(gè)新高度。
3.1.2 線性代數(shù)
大多數(shù)機(jī)器學(xué)習(xí)的算法要應(yīng)用起來割捅,依賴于高效的計(jì)算奶躯,這種場景下,程序員GG們習(xí)慣的多層for循環(huán)通常就行不通了亿驾,而大多數(shù)的循環(huán)操作可轉(zhuǎn)化成矩陣之間的乘法運(yùn)算嘹黔,這就和線性代數(shù)有莫大的關(guān)系了
向量的內(nèi)積運(yùn)算更是隨處可見。
矩陣乘法與分解在機(jī)器學(xué)習(xí)的主成分分析(PCA)和奇異值分解(SVD) 等部分呈現(xiàn)刷屏狀地出現(xiàn)莫瞬。
3.1.3 概率與統(tǒng)計(jì)
從廣義來說儡蔓,機(jī)器學(xué)習(xí)在做的很多事情,和統(tǒng)計(jì)層面數(shù)據(jù)分析和發(fā)掘隱藏的模式疼邀,是非常類似的喂江。
極大似然思想、貝葉斯模型 是理論基礎(chǔ)旁振,樸素貝葉斯(Na?ve Bayes )获询、語言模型(N-gram)、隱馬爾科夫(HMM)拐袜、隱變量混合概率模型是他們的高級(jí)形態(tài)吉嚣。
常見分布如高斯分布是混合高斯模型(GMM)等的基礎(chǔ)。
3.2 典型算法
絕大多數(shù)問題用典型機(jī)器學(xué)習(xí)的算法都能解決蹬铺,粗略地列舉一下這些方法如下:
處理分類問題的常用算法包括:邏輯回歸(工業(yè)界最常用)尝哆,支持向量機(jī),隨機(jī)森林甜攀,樸素貝葉斯(NLP中常用)秋泄,深度神經(jīng)網(wǎng)絡(luò)(視頻、圖片赴邻、語音等多媒體數(shù)據(jù)中使用)印衔。
處理回歸問題的常用算法包括:線性回歸,普通最小二乘回歸(Ordinary Least Squares Regression)姥敛,逐步回歸(Stepwise Regression)奸焙,多元自適應(yīng)回歸樣條(Multivariate Adaptive Regression Splines)
處理聚類問題的常用算法包括:K均值(K-means),基于密度聚類,LDA等等与帆。
降維的常用算法包括:主成分分析(PCA),奇異值分解(SVD) 等了赌。
推薦系統(tǒng)的常用算法:協(xié)同過濾算法
模型融合(model ensemble)和提升(boosting)的算法包括:bagging,adaboost玄糟,GBDT勿她,GBRT
其他很重要的算法包括:EM算法等等。
我們多插一句阵翎,機(jī)器學(xué)習(xí)里所說的“算法”與程序員所說的“數(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í)問題中词疼,對效率和資源占用的考量是不可或缺的俯树。
3.3 編程語言、工具和環(huán)境
看了無數(shù)的理論與知識(shí)贰盗,總歸要落到實(shí)際動(dòng)手實(shí)現(xiàn)和解決問題上许饿。而沒有工具所有的材料和框架、邏輯舵盈、思路都給你米辐,也寸步難行。因此我們還是得需要合適的編程語言书释、工具和環(huán)境幫助自己在數(shù)據(jù)集上應(yīng)用機(jī)器學(xué)習(xí)算法翘贮,或者實(shí)現(xiàn)自己的想法。對初學(xué)者而言爆惧,Python和R語言是很好的入門語言狸页,很容易上手,同時(shí)又活躍的社區(qū)支持扯再,豐富的工具包幫助我們完成想法芍耘。相對而言,似乎計(jì)算機(jī)相關(guān)的同學(xué)用Python多一些熄阻,而數(shù)學(xué)統(tǒng)計(jì)出身的同學(xué)更喜歡R一些斋竞。我們對編程語言、工具和環(huán)境稍加介紹:
3.3.1 python
python有著全品類的數(shù)據(jù)科學(xué)工具秃殉,從數(shù)據(jù)獲取坝初、數(shù)據(jù)清洗到整合各種算法都做得非常全面浸剩。
網(wǎng)頁爬蟲:scrapy
數(shù)據(jù)挖掘:
??1.pandas:模擬R,進(jìn)行數(shù)據(jù)瀏覽與預(yù)處理鳄袍。
??2.numpy:數(shù)組運(yùn)算绢要。
??3.scipy:高效的科學(xué)計(jì)算。
??4.matplotlib:非常方便的數(shù)據(jù)可視化工具拗小。
機(jī)器學(xué)習(xí):
1.scikit-learn:遠(yuǎn)近聞名的機(jī)器學(xué)習(xí)package重罪。未必是最高效的,但是接口真心封裝得好哀九,幾乎所有的機(jī)器學(xué)習(xí)算法輸入輸出部分格式都一致剿配。而它的支持文檔甚至可以直接當(dāng)做教程來學(xué)習(xí),非常用心阅束。對于不是非常高緯度惨篱、高量級(jí)的數(shù)據(jù),scikit-learn勝任得非常好(有興趣可以看看sklearn的源碼围俘,也很有意思)。
2.libsvm:高效率的svm模型實(shí)現(xiàn)(了解一下很有好處琢融,libsvm的系數(shù)數(shù)據(jù)輸入格式界牡,在各處都非常常見)
3.keras/TensorFlow:對深度學(xué)習(xí)感興趣的同學(xué),也能很方便地搭建自己的神經(jīng)網(wǎng)絡(luò)了漾抬。
自然語言處理:
1.nltk:自然語言處理的相關(guān)功能做得非常全面宿亡,有典型語料庫,而且上手也非常容??易纳令。
交互式環(huán)境:
1.ipython notebook:能直接打通數(shù)據(jù)到結(jié)果的通道挽荠,方便至極。強(qiáng)力推薦平绩。
3.3.2 R
R最大的優(yōu)勢是開源社區(qū)圈匆,聚集了非常多功能強(qiáng)大可直接使用的包,絕大多數(shù)的機(jī)器學(xué)習(xí)算法在R中都有完善的包可直接使用捏雌,同時(shí)文檔也非常齊全跃赚。常見的package包括:RGtk2, pmml, colorspace, ada, amap, arules, biclust, cba, descr, doBy, e1071, ellipse等等。另外性湿,值得一提的是R的可視化效果做得非常不錯(cuò)纬傲,而這對于機(jī)器學(xué)習(xí)是非常有幫助的。
3.3.3 其他語言
相應(yīng)資深程序員GG的要求肤频,再補(bǔ)充一下java和C++相關(guān)機(jī)器學(xué)習(xí)package叹括。
Java系列
WEKA Machine Learning Workbench 相當(dāng)于java中的scikit-learn
其他的工具如Massive Online Analysis(MOA)、MEKA 宵荒、 Mallet 等也非常有名汁雷。
更多詳細(xì)的應(yīng)用請參考這篇文章《25個(gè)Java機(jī)器學(xué)習(xí)工具&庫》
C++系列
mlpack净嘀,高效同時(shí)可擴(kuò)充性非常好的機(jī)器學(xué)習(xí)庫。
Shark:文檔齊全的老牌C++機(jī)器學(xué)習(xí)庫摔竿。
3.3.4 大數(shù)據(jù)相關(guān)
Hadoop:基本上是工業(yè)界的標(biāo)配了面粮。一般用來做特征清洗、特征處理的相關(guān)工作继低。
spark:提供了MLlib這樣的大數(shù)據(jù)機(jī)器學(xué)習(xí)平臺(tái)熬苍,實(shí)現(xiàn)了很多常用算法。但可靠性袁翁、穩(wěn)定性上有待提高柴底。
3.3.5 操作系統(tǒng)
mac和linux會(huì)方便一些,而windows在開發(fā)中略顯力不從心粱胜。所謂方便柄驻,主要是指的mac和linux在下載安裝軟件、配置環(huán)境更快捷焙压。
對于只習(xí)慣windows的同學(xué)鸿脓,推薦anaconda,一步到位安裝完python的全品類數(shù)據(jù)科學(xué)工具包涯曲。
3.4 基本工作流程
以上我們基本具備了機(jī)器學(xué)習(xí)的必要條件野哭,剩下的就是怎么運(yùn)用它們?nèi)プ鲆粋€(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目。其工作流程如下:
3.4.1 抽象成數(shù)學(xué)問題
明確問題是進(jìn)行機(jī)器學(xué)習(xí)的第一步幻件。機(jī)器學(xué)習(xí)的訓(xùn)練過程通常都是一件非常耗時(shí)的事情拨黔,胡亂嘗試時(shí)間成本是非常高的。
這里的抽象成數(shù)學(xué)問題绰沥,指的我們明確我們可以獲得什么樣的數(shù)據(jù)篱蝇,目標(biāo)是一個(gè)分類還是回歸或者是聚類的問題,如果都不是的話徽曲,如果劃歸為其中的某類問題零截。
3.4.2 獲取數(shù)據(jù)
數(shù)據(jù)決定了機(jī)器學(xué)習(xí)結(jié)果的上限,而算法只是盡可能逼近這個(gè)上限秃臣。
數(shù)據(jù)要有代表性瞻润,否則必然會(huì)過擬合。
而且對于分類問題甜刻,數(shù)據(jù)偏斜不能過于嚴(yán)重绍撞,不同類別的數(shù)據(jù)數(shù)量不要有數(shù)個(gè)數(shù)量級(jí)的差距。
而且還要對數(shù)據(jù)的量級(jí)有一個(gè)評估得院,多少個(gè)樣本傻铣,多少個(gè)特征,可以估算出其對內(nèi)存的消耗程度祥绞,判斷訓(xùn)練過程中內(nèi)存是否能夠放得下非洲。如果放不下就得考慮改進(jìn)算法或者使用一些降維的技巧了鸭限。如果數(shù)據(jù)量實(shí)在太大,那就要考慮分布式了两踏。
3.4.3 特征預(yù)處理與特征選擇
良好的數(shù)據(jù)要能夠提取出良好的特征才能真正發(fā)揮效力败京。
特征預(yù)處理、數(shù)據(jù)清洗是很關(guān)鍵的步驟梦染,往往能夠使得算法的效果和性能得到顯著提高赡麦。歸一化、離散化帕识、因子化泛粹、缺失值處理、去除共線性等肮疗,數(shù)據(jù)挖掘過程中很多時(shí)間就花在它們上面晶姊。這些工作簡單可復(fù)制,收益穩(wěn)定可預(yù)期伪货,是機(jī)器學(xué)習(xí)的基礎(chǔ)必備步驟们衙。
篩選出顯著特征、摒棄非顯著特征碱呼,需要機(jī)器學(xué)習(xí)工程師反復(fù)理解業(yè)務(wù)蒙挑。這對很多結(jié)果有決定性的影響。特征選擇好了巍举,非常簡單的算法也能得出良好、穩(wěn)定的結(jié)果凝垛。這需要運(yùn)用特征有效性分析的相關(guān)技術(shù)懊悯,如相關(guān)系數(shù)、卡方檢驗(yàn)梦皮、平均互信息炭分、條件熵、后驗(yàn)概率剑肯、邏輯回歸權(quán)重等方法捧毛。
3.4.4 訓(xùn)練模型與調(diào)優(yōu)
直到這一步才用到我們上面說的算法進(jìn)行訓(xùn)練。現(xiàn)在很多算法都能夠封裝成黑盒供人使用让网。但是真正考驗(yàn)水平的是調(diào)整這些算法的(超)參數(shù)呀忧,使得結(jié)果變得更加優(yōu)良。這需要我們對算法的原理有深入的理解溃睹。理解越深入而账,就越能發(fā)現(xiàn)問題的癥結(jié),提出良好的調(diào)優(yōu)方案因篇。
3.4.5 模型診斷
如何確定模型調(diào)優(yōu)的方向與思路呢泞辐?這就需要對模型進(jìn)行診斷的技術(shù)笔横。
過擬合、欠擬合 判斷是模型診斷中至關(guān)重要的一步咐吼。常見的方法如交叉驗(yàn)證吹缔,繪制學(xué)習(xí)曲線等。過擬合的基本調(diào)優(yōu)思路是增加數(shù)據(jù)量锯茄,降低模型復(fù)雜度厢塘。欠擬合的基本調(diào)優(yōu)思路是提高特征數(shù)量和質(zhì)量,增加模型復(fù)雜度撇吞。
誤差分析 也是機(jī)器學(xué)習(xí)至關(guān)重要的步驟俗冻。通過觀察誤差樣本,全面分析誤差產(chǎn)生誤差的原因:是參數(shù)的問題還是算法選擇的問題牍颈,是特征的問題還是數(shù)據(jù)本身的問題……
診斷后的模型需要進(jìn)行調(diào)優(yōu)迄薄,調(diào)優(yōu)后的新模型需要重新進(jìn)行診斷,這是一個(gè)反復(fù)迭代不斷逼近的過程煮岁,需要不斷地嘗試讥蔽, 進(jìn)而達(dá)到最優(yōu)狀態(tài)。
3.4.6 模型融合
一般來說画机,模型融合后都能使得效果有一定提升冶伞。而且效果很好。
工程上步氏,主要提升算法準(zhǔn)確度的方法是分別在模型的前端(特征清洗和預(yù)處理响禽,不同的采樣模式)與后端(模型融合)上下功夫。因?yàn)樗麄儽容^標(biāo)準(zhǔn)可復(fù)制荚醒,效果比較穩(wěn)定芋类。而直接調(diào)參的工作不會(huì)很多,畢竟大量數(shù)據(jù)訓(xùn)練起來太慢了界阁,而且效果難以保證侯繁。
3.4.7 上線運(yùn)行
這一部分內(nèi)容主要跟工程實(shí)現(xiàn)的相關(guān)性比較大。工程上是結(jié)果導(dǎo)向泡躯,模型在線上運(yùn)行的效果直接決定模型的成敗贮竟。 不單純包括其準(zhǔn)確程度、誤差等情況较剃,還包括其運(yùn)行的速度(時(shí)間復(fù)雜度)咕别、資源消耗程度(空間復(fù)雜度)、穩(wěn)定性是否可接受写穴。
這些工作流程主要是工程實(shí)踐上總結(jié)出的一些經(jīng)驗(yàn)顷级。并不是每個(gè)項(xiàng)目都包含完整的一個(gè)流程。這里的部分只是一個(gè)指導(dǎo)性的說明确垫,只有大家自己多實(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ū)翔冀,就是一上來就陷入到對各種高大上算法的追逐當(dāng)中导街。動(dòng)不動(dòng)就我能不能用深度學(xué)習(xí)去解決這個(gè)問題啊纤子?我是不是要用boosting算法做一些模型融合鞍峁濉?我一直持有一個(gè)觀點(diǎn)控硼,『脫離業(yè)務(wù)和數(shù)據(jù)的算法討論是毫無意義的』泽论。
實(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è)捷徑就是積極參加國內(nèi)外各種數(shù)據(jù)挖掘競賽,數(shù)據(jù)直接下載下來揽思,按照競賽的要求去不斷優(yōu)化悉抵,積累經(jīng)驗(yàn)肩狂。國外的Kaggle和國內(nèi)的DataCastle 以及阿里天池比賽都是很好的平臺(tái),你可以在上面獲取真實(shí)的數(shù)據(jù)和數(shù)據(jù)科學(xué)家們一起學(xué)習(xí)和進(jìn)行競賽基跑,嘗試使用已經(jīng)學(xué)過的所有知識(shí)來完成這個(gè)比賽本身也是一件很有樂趣的事情婚温。和其他數(shù)據(jù)科學(xué)家的討論能開闊視野描焰,對機(jī)器學(xué)習(xí)算法有更深層次的認(rèn)識(shí)媳否。
有意思的是,有些平臺(tái)荆秦,比如阿里天池比賽篱竭,甚至給出了從數(shù)據(jù)處理到模型訓(xùn)練到模型評估、可視化到模型融合增強(qiáng)的全部組件步绸,你要做的事情只是參與比賽掺逼,獲取數(shù)據(jù),然后使用這些組件去實(shí)現(xiàn)自己的idea即可瓤介。具體內(nèi)容可以參見阿里云機(jī)器學(xué)習(xí)文檔吕喘。
3.6 自主學(xué)習(xí)能力
多幾句嘴赘那,這部分內(nèi)容和機(jī)器學(xué)習(xí)本身沒有關(guān)系,但是我們覺得這方面的能力對于任何一種新知識(shí)和技能的學(xué)習(xí)來說都是至關(guān)重要的氯质。 自主學(xué)習(xí)能力提升后募舟,意味著你能夠跟據(jù)自己的情況,找到最合適的學(xué)習(xí)資料和最快學(xué)習(xí)成長路徑闻察。
3.6.1 信息檢索過濾與整合能力
對于初學(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ǔ)充搜索來用拾并。各種搜索引擎都可以交叉著使用效果更好。
學(xué)會(huì)去常見的高質(zhì)量信息源中搜索東西:stackoverflow(程序相關(guān))鹏浅、quora(高質(zhì)量回答)嗅义、wikipedia(系統(tǒng)化知識(shí),比某某百科不知道好太多)隐砸、知乎(中文之碗、有料)、網(wǎng)盤搜索(免費(fèi)資源一大把)等季希。
將搜集到的網(wǎng)頁放到分類齊全的云端收藏夾里褪那,并經(jīng)常整理。這樣無論在公司還是在家里式塌,在電腦前還是在手機(jī)上博敬,都能夠找到自己喜歡的東西。
搜集到的文件峰尝、代碼偏窝、電子書等等也放到云端網(wǎng)盤里,并經(jīng)常整理。
3.6.2 提煉與總結(jié)能力
經(jīng)常作筆記祭往,并總結(jié)自己學(xué)到的知識(shí)是成長的不二法門伦意。其實(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ù)場景和業(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)容祥款。” 分享能夠最充分地提升自己的學(xué)習(xí)水平执赡。這也是我們堅(jiān)持長期分享最重要的原因镰踏。
分享還有一個(gè)副產(chǎn)品函筋,就是自己在求助的時(shí)候能夠獲得更多的幫助機(jī)會(huì)沙合,這也非常重要。
4. 相關(guān)資源推薦
文章的最后部分跌帐,我們繼續(xù)放送干貨首懈。其實(shí)機(jī)器學(xué)習(xí)的優(yōu)質(zhì)資源非常多绊率。博主也是翻遍瀏覽器收藏夾,也問同事取了取經(jīng)究履,整合了一部分資源羅列如下:
4.1 入門資源
首先coursera(https://www.coursera.org/)是一個(gè)非常好的學(xué)習(xí)網(wǎng)站滤否,集中了全球的精品課程。上述知識(shí)學(xué)習(xí)的過程都可以在上面找到合適的課程最仑。也有很多其他的課程網(wǎng)站藐俺,這里我們就需要學(xué)習(xí)的數(shù)學(xué)和機(jī)器學(xué)習(xí)算法推薦一些課程(有一些課程有中文字幕,有一些只有英文字幕泥彤,有一些甚至沒有字幕欲芹,大家根據(jù)自己的情況調(diào)整,如果不習(xí)慣英文吟吝,基礎(chǔ)部分有很多國內(nèi)的課程也非常優(yōu)質(zhì)):
微積分相關(guān)
Calculus: Single Variable (https://www.coursera.org/learn/single-variable-calculus)
Multivariable Calculus(http://ocw.mit.edu/courses/mathe ... calculus-fall-2010/)
線性代數(shù)
Linear Algebra(http://ocw.mit.edu/courses/mathe ... lgebra-spring-2010/)
概率統(tǒng)計(jì)
Introduction to Statistics: Descriptive Statistics(https://www.edx.org/course/intro ... -berkeleyx-stat2-1x)?
Probabilistic Systems Analysis and Applied Probability(http://ocw.mit.edu/courses/elect ... bability-fall-2010/)
編程語言
Programming for Everybody
ython(https://www.coursera.org/learn/python)?
DataCamp: Learn R with R tutorials and coding challenges:R(https://www.datacamp.com/)
機(jī)器學(xué)習(xí)方法
Statistical Learning(R) (https://lagunita.stanford.edu/co ... ng/Winter2015/about)
machine learning(https://www.coursera.org/learn/machine-learning):強(qiáng)烈推薦菱父,Andrew Ng老師的課程?
機(jī)器學(xué)習(xí)基石(https://www.coursera.org/course/ntumlone)
機(jī)器學(xué)習(xí)技術(shù)(https://www.coursera.org/course/ntumltwo):林軒田老師的課相對更有深度一些,把作業(yè)做完會(huì)對提升對機(jī)器學(xué)習(xí)的認(rèn)識(shí)剑逃。?
自然語言處理(https://class.coursera.org/nlp/lecture):斯坦福大學(xué)課程
日常閱讀的資源
@愛可可-愛生活的微博(http://weibo.com/fly51fly?from=myfollow_all)?
機(jī)器學(xué)習(xí)日報(bào)的郵件訂閱(http://ml.memect.com/)等浙宜。
4.2 進(jìn)階資源
有源代碼的教程
scikit-learn(http://scikit-learn.org/stable/auto_examples/index.html)中各個(gè)算法的例子?
《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》 有中文版,并附有python源代碼蛹磺。?
《The Elements of Statistical Learning (豆瓣)》(http://book.douban.com/subject/3294335/) 這本書有對應(yīng)的中文版:《統(tǒng)計(jì)學(xué)習(xí)基礎(chǔ) (豆瓣)》(http://book.douban.com/subject/1152126/)粟瞬。書中配有R包∮├Γ可以參照著代碼學(xué)習(xí)算法亩钟。網(wǎng)盤中有中文版。?
《Natural Language Processing with Python (豆瓣)》(http://book.douban.com/subject/3696989/) NLP 經(jīng)典鳖轰,其實(shí)主要是講 python的NLTK 這個(gè)包清酥。網(wǎng)盤中有中文版。?
《Neural Networks and Deep Learning》(http://neuralnetworksanddeeplearning.com/) Michael Nielsen的神經(jīng)網(wǎng)絡(luò)教材蕴侣,淺顯易懂焰轻。國內(nèi)有部分翻譯,不全昆雀,建議直接看原版辱志。
圖書與教材
《數(shù)學(xué)之美》:入門讀起來很不錯(cuò)。?
《統(tǒng)計(jì)學(xué)習(xí)方法 (豆瓣) 》(http://book.douban.com/subject/10590856/):李航經(jīng)典教材狞膘。?
《Pattern Recognition And Machine Learning (豆瓣) 》(http://book.douban.com/subject/2061116/):經(jīng)典中教材揩懒。?
《統(tǒng)計(jì)自然語言處理》自然語言處理經(jīng)典教材?
《Applied predictive modeling》:英文版,注重工程實(shí)踐的機(jī)器學(xué)習(xí)教材?
《UFLDL教程》(http://ufldl.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B):神經(jīng)網(wǎng)絡(luò)經(jīng)典教材?
《deeplearningbook》(http://www.deeplearningbook.org/):深度學(xué)習(xí)經(jīng)典教材挽封。
工具書
《SciPy and NumPy (豆瓣) 》?(http://book.douban.com/subject/10561724/)
《Python for Data Analysis (豆瓣) 》作者是Pandas這個(gè)包的作者(http://book.douban.com/subject/10760444/)
其他網(wǎng)絡(luò)資料
機(jī)器學(xué)習(xí)(Machine Learning)與深度學(xué)習(xí)(Deep Learning)資料匯總(http://blog.csdn.net/zhongwen7710/article/details/45331915): 作者太給力已球,量大干貨多,有興趣的同學(xué)可以看看,博主至今只看了一小部分智亮。