上一章《02 機器學(xué)習(xí)理性認(rèn)識》讓大家對機器學(xué)習(xí)的相關(guān)算法有了一個初步的認(rèn)識和了解。
筆者的寫作思路是先把機器學(xué)習(xí)的每個大分類,以及大分類下的中小分類做一個總體介紹。當(dāng)后續(xù)對具體的算法模型講解后,大家再回過頭對照今天講過的這些分類,你們會發(fā)現(xiàn)整個文集提供給你們的是一個完整的知識體系。
昨天的內(nèi)容發(fā)布后有些朋友給了反饋,雖然筆者認(rèn)為已經(jīng)講得很通俗易懂,但是很多人希望更細(xì)致一些。所以一方面昨天晚上對《02 機器學(xué)習(xí)理性認(rèn)識》一文又做了更新,另一方面筆者決定再花一章的時間,對讀者們的問題進行解答。
本章內(nèi)容針對大家提出的問題,對以下知識點進行深入探討:
1、機器學(xué)習(xí)的開發(fā)流程具體有哪些步驟?
2、不會爬蟲的話數(shù)據(jù)從何而來?
3、遇到某一些特定數(shù)據(jù)應(yīng)該做哪些處理?
4、我們?nèi)绾卧u價一個模型的好壞?
=== 機器學(xué)習(xí)開發(fā)流程 ===
1、數(shù)據(jù)收集
機器學(xué)習(xí)最關(guān)鍵的是數(shù)據(jù),有了數(shù)據(jù)我們才能知道選擇什么樣的模型,選擇什么樣的參數(shù),怎么對模型進行調(diào)優(yōu),得到我們最后想要的結(jié)果。因此數(shù)據(jù)搜集是一件相對比較關(guān)鍵的任務(wù),一般需要我們從企業(yè)現(xiàn)有的數(shù)據(jù)中找出有用的數(shù)據(jù)。
我們也不能在拿到數(shù)據(jù)后什么都不做,第一時間就將數(shù)據(jù)扔給機器進行處理(直接用API對數(shù)據(jù)進行分析)。這樣的處理結(jié)果會非常差。一般而言做完數(shù)據(jù)分析后,工程師需要寫一份報告,其中涉及:為什么選這些模型,為什么要選這些數(shù)據(jù)。所以當(dāng)我們拿到數(shù)據(jù)后,首先一定要去閱讀這些數(shù)據(jù)集的數(shù)據(jù)描述(Data Description)。數(shù)據(jù)描述會對每一個數(shù)據(jù)的特征以及目標(biāo)做一個詳細(xì)的解釋。如果是參加比賽,那么比賽的數(shù)據(jù)一定會把需要預(yù)測的目標(biāo)Targer告訴你。而在實際的工作中,我們要人為得從繁雜的數(shù)據(jù)庫中找到需要的特征和目標(biāo)作為最終的預(yù)測值。所以如果不讀數(shù)據(jù)描述,連目標(biāo)都不確定,如何能建立起一個合適的模型?
數(shù)據(jù)搜集不是簡單獲取數(shù)據(jù)的步驟,更重要的是你要了解這批數(shù)據(jù)。
2、 數(shù)據(jù)預(yù)處理
企業(yè)中一般有一些數(shù)據(jù)庫維護的運維人員,他們對于數(shù)據(jù)的定義和專門做機器學(xué)習(xí)的人不一樣。數(shù)據(jù)庫中的數(shù)據(jù)往往會存在很多缺失值,甚至是一些邏輯混亂的數(shù)據(jù)。我們必須對這些數(shù)據(jù)的異常充分了解后,才能算完成了數(shù)據(jù)收集的操作。
比如我們設(shè)姓別屬性,0代表男,1代表女。數(shù)據(jù)庫中有時會出現(xiàn)00或01這樣的數(shù)據(jù)。如果人為得去看,很明顯可以識別出00代表男,01代表女。而如果是機器拿來學(xué)習(xí),它會以為目標(biāo)有4個分類(0,1,00,01)。我們要將數(shù)據(jù)都轉(zhuǎn)化成0和1,再交給機器處理。
3、特征提取
特征提取分為兩個步驟:第一、特征選擇,第二、特征降維。PS:對于特征的定義在《02 機器學(xué)習(xí)理性認(rèn)識》中詳細(xì)說明過,不再贅述。
特征選擇:數(shù)據(jù)集中可能包含n個特征,從中選出k個我們覺得比較重要的特征。
特征降維:為了徹底說明白這個問題,我繞一個圈。
----- 插入一段高能 ------
假如我們已經(jīng)獲取到了一個造物主公式,對于每一個輸入,我們都能夠得到一個完美的輸出,和實際情況百分百得匹配。
假設(shè)這個造物主公式中:y = θ0+θ1x1+ … + θnxn;
目標(biāo)值y = 預(yù)測某肥宅少年的一生是否能夠迎娶白富美。
在造物主的世界中有無數(shù)位肥宅少年,為了預(yù)測他們的人生最終是否能夠迎娶了白富美,造物主搜集了他們一生的所有的特征。比如:肥宅少年的健康程度、皮囊好看的程度、家境富有的程度等等,甚至連肥宅少年是否喜歡吃榴蓮這一微不足道的特征也搜集在內(nèi)。這些特征就是造物主公式中的 x1,x2…xn。
造物主隨機取出大量的肥宅少年樣本(包含特征值和結(jié)果),投入到機器學(xué)習(xí)的模型中進行分析,最后計算機經(jīng)過長時間的運算,最終得出了θ0~θn的值,假設(shè)θ1>θ2>…>θn ,即條件影響因子逐漸變小,整理每個條件因子對應(yīng)的特征有了如下的報告:
x1:肥宅少年健康的程度。最重要的考慮因素。
x2:肥宅少年皮囊好看的程度。第二重要的考慮因素。
x3:肥宅少年家境富有的程度。第三重要的考慮因素。
x4:肥宅少年自身才華的程度。第四重要的考慮因素。
...
xn:肥宅少年是否喜歡吃榴蓮。最不重要的因素。
雖然機器學(xué)習(xí)分析出了特征的重要性排序,同時計算出了他們對應(yīng)的θ值。但是造物主也不確定本次得到的公式是好是壞,于是造物主決定再測試一下。
造物主又從世界中隨機取出大量的肥宅少年測試樣本(測試集),將他們輸入到公式:y = θ0+θ1x1+ … + θnxn中,如果輸出的結(jié)果和他們最終是否贏取了白富美的結(jié)果擬合度很高,說明這個公式很成功。
將造物主公式進行泰勒展開可以得到如下的線性特征:
z1=α11x1+α12x2+ … + α1nxn肥宅少年健康的程度
z2=α12x1+α22x2+ … + α2nxn 肥宅少年皮囊好看的程度
…
zn=αn1x1+αn2x2+ … + αnnxn 肥宅少年是否喜歡吃榴蓮
-----------------------
最后回到特征降維的問題中,顯然對于“預(yù)測某肥宅少年是否能夠贏取白富美”這個模型來說, “肥宅少年是否喜歡吃榴蓮” 這個特征對于模型的預(yù)測結(jié)果可以忽略不計,造物主決定把該特征從分析中刪除。
即刪除了造物主公式中的 θnxn項 , θn是所有影響因子中最小的值,小到無限趨向于0。
也刪除了泰勒展開中的 zn=αn1x1+αn2x2+ … + αnnxn 這一項。如果將線性代數(shù)轉(zhuǎn)化成矩陣來看,就等于少了一維。
這種操作稱為降維。
很多企業(yè)在特征處理中遇到了一些問題,由于數(shù)據(jù)量大,其中特征可能有上千個,企業(yè)能力有限數(shù)據(jù)清洗不過來。于是他們將所有的特征全部放入機器中進行學(xué)習(xí),這樣一來最大的問題就是運算速度會無比緩慢。根據(jù)經(jīng)驗,如果跑2000個特征需要跑1~2天,而且處理分類的時候會特別痛苦,估計會花個5天左右。所以要形成一種自己的特征處理風(fēng)格,這種風(fēng)格的形成需要靠大量的實戰(zhàn)去積累,日后再說。
4、模型構(gòu)建
模型構(gòu)建的第一步,是保證輸入機器的數(shù)據(jù)不會報錯,否則需要返回數(shù)據(jù)預(yù)處理的步驟。
模型構(gòu)建這步需要選擇合適的算法。重新舉一下建造金茂大廈的例子:
算法就是圖紙,數(shù)據(jù)是蓋樓的磚,最終模型是建立出來的房子。我們希望建立出來的模型是金茂大廈,如果圖紙蓋出來的模型是平房,那么我們需要調(diào)正圖紙的結(jié)構(gòu),直到蓋出來的模型是高樓為止。此后我們就選擇這張能夠蓋出高樓的圖紙去建立金茂大廈。
實際工作中最耗時的是數(shù)據(jù)預(yù)處理和特征提取的步驟,也許會占用50%到70%的時間。而模型構(gòu)建的耗時主要在于你使用API來處理數(shù)據(jù)的速度,即取決于你對API熟練運用的程度。
5、模型測試
模型構(gòu)建完成以后,我們要對模型不斷得調(diào)優(yōu)。此時的數(shù)據(jù)在模型訓(xùn)練和模型測試上形成了一個閉環(huán)。
如果我們分析的數(shù)據(jù)來自一個接觸AI領(lǐng)域的新興行業(yè),我們對行業(yè)里的數(shù)據(jù)沒有一個大致的認(rèn)知,這種情況下我們需要盡早得進入這個閉環(huán)的步驟。因為我們無法知道會跑出什么樣的數(shù)據(jù),那么在做了簡單的數(shù)據(jù)預(yù)處理及特征提取后,我們就要讓數(shù)據(jù)盡快跑出來形成一個最初的模型,然后交給測試機和模型訓(xùn)練不斷調(diào)優(yōu)。
如果我們分析的數(shù)據(jù)來自一個成熟的行業(yè),比如金融行業(yè),金融行業(yè)的風(fēng)控部門對模型建立得已經(jīng)相當(dāng)完善了。當(dāng)我們?nèi)胧忠唤M特征數(shù)據(jù)后,我們對這些特征相當(dāng)熟悉,我們知道跑出來的結(jié)果肯定在95%~97%之間。這種情況下為了讓模型更好得調(diào)優(yōu),就要花更多時間在數(shù)據(jù)預(yù)處理和特征提取這兩個環(huán)節(jié)。
=== 機器學(xué)習(xí)的數(shù)據(jù)集 ===
如果不懂得爬蟲,又想盡快進入機器學(xué)習(xí)的研究,那么可以從以下網(wǎng)站中獲取數(shù)據(jù)。
https://tianchi.aliyun.com/datalab/index.htm 天池數(shù)據(jù)首頁。
https://tianchi.aliyun.com/competition/gameList.htm 天池比賽數(shù)據(jù)。定個小目標(biāo),參加3~5次比賽,能進入前10%就算合格了。
https://www.kaggle.com/competition kaggle比賽數(shù)據(jù)。
https://aws.amazon.com/cn/public-datasets/ 亞馬遜數(shù)據(jù)。
http://www.sogou.com/labs/resource/list_pingce.php 搜狗實驗室
重點介紹:
http://archive.ics.uci.edu/ml/dataset.html
加州大學(xué)提供的機器學(xué)習(xí)入門級數(shù)據(jù),基本都清洗好了,可以直接放到機器里跑。
Default Tasks:基于目標(biāo)提出的任務(wù)。 其中Classification是做分類的數(shù)據(jù)(數(shù)據(jù)是離散的),Regression是做回歸的數(shù)據(jù)(數(shù)據(jù)是連續(xù)的),Clustering是做聚類的數(shù)據(jù)。對應(yīng)的是Y值。
Attribute Type:屬性特征。其中Categorical是經(jīng)過分類的數(shù)據(jù), Numerical是數(shù)值類型數(shù)據(jù),Mixed是混合類型數(shù)據(jù)。對應(yīng)的是x1,x2…xn的值。
=== 結(jié)語 ===
開篇提到的4個問題:
1、機器學(xué)習(xí)的開發(fā)流程具體有哪些步驟?
2、不會爬蟲的話數(shù)據(jù)從何而來?
3、遇到某一些特定數(shù)據(jù)應(yīng)該做哪些處理?
4、我們?nèi)绾卧u價一個模型的好壞?
本章解答了前兩個,后兩個留到下一章詳細(xì)討論。時間不早了,大家晚安。