Follow me!百万奖金由你拿 | 精准资助机器学习(三)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
通過前面兩篇的數(shù)據(jù)探索,我們對(duì)教育精準(zhǔn)資助的數(shù)據(jù)已經(jīng)有所了解了,接下來我們就要建立模型來進(jìn)行機(jī)器學(xué)習(xí)了。
一、機(jī)器學(xué)習(xí)之分類概況
大千世界中“人以類聚,物以群分”,就是指具有相同(或相近)特征的事物總是歸于一類或者說能聚在一起的事物總是擁有相同(或相近)的特征。
機(jī)器學(xué)習(xí)最基本的研究就是解決分類問題,比如哪些郵件是垃圾郵件,哪些郵件是正常郵件,哪些訪問(日志)是正常的,哪些訪問是不正常的。對(duì)于我們這次教育競(jìng)賽來講就是要分出哪些人需要資助1000,哪些人需要資助1500,哪些人需要資助2000,哪些人不需要資助的問題。
解決這些問題最常規(guī)的辦法是編寫規(guī)則條件,滿足某個(gè)條件是什么類,滿足另外的條件是什么類。當(dāng)問題復(fù)雜到一定程度,即不能寫出明確的規(guī)則或者規(guī)則很復(fù)雜時(shí)就可以考慮用機(jī)器學(xué)習(xí)的方法來解決。
那么機(jī)器又是如何學(xué)習(xí)的呢?看下圖:
首先,機(jī)器學(xué)習(xí)是要數(shù)據(jù)的,而且是兩類數(shù)據(jù):一類能標(biāo)識(shí)人(和物)的特征數(shù)據(jù),如每一人的消費(fèi)次數(shù),消費(fèi)總額,單筆最大等等;另一類則是標(biāo)記了人的分類的答案數(shù)據(jù)(或標(biāo)記數(shù)據(jù)),就是需要人根據(jù)經(jīng)驗(yàn)來告訴機(jī)器哪些人是一類的,哪些物是一類的。這樣再選擇合適的算法,讓機(jī)器來學(xué)習(xí)。給的數(shù)據(jù)越多,機(jī)器就學(xué)習(xí)的越多,機(jī)器就會(huì)變得越”聰明“。我們把這個(gè)機(jī)器學(xué)習(xí)的過程叫做訓(xùn)練,訓(xùn)練的結(jié)果就是模型。有了這個(gè)模型后,就可以進(jìn)行預(yù)測(cè),看下圖:
首先是要預(yù)測(cè)的數(shù)據(jù)的格式和特征數(shù)據(jù)的格式一樣,不能添加或減少特征,也不能變更特征的名稱和順序,然后使用模型來預(yù)測(cè),最后就會(huì)得到預(yù)測(cè)結(jié)果。
整個(gè)機(jī)器學(xué)習(xí)的過程就是這樣了,還簡(jiǎn)單吧,下面我們就用教育資助的數(shù)據(jù)操練起來。
二、機(jī)器學(xué)習(xí)過程
(一)數(shù)據(jù)準(zhǔn)備
精準(zhǔn)資助主要集中反映在日常的消費(fèi)數(shù)據(jù)中,我們先使用消費(fèi)數(shù)據(jù)來構(gòu)造特征數(shù)據(jù)和標(biāo)記數(shù)據(jù)(答案數(shù)據(jù))。
特征數(shù)據(jù)的一個(gè)要求是使用一行來描述一個(gè)對(duì)象(人或物),對(duì)象是不重復(fù)的,特征數(shù)據(jù)均為數(shù)字類型,不能出現(xiàn)其他類型,如果是字典類型,如性別男女也應(yīng)該用0,1表示。
標(biāo)記數(shù)據(jù)的要求是和特征數(shù)據(jù)一一對(duì)應(yīng),同樣一行代表一個(gè)人(或物),標(biāo)記需要使用整數(shù)形,一個(gè)數(shù)代表了一個(gè)分類。這里的專業(yè)叫法是標(biāo)稱型(變量),取值是有限的整數(shù),不能是小數(shù)(分類再多總有個(gè)最大值的,小數(shù)就不知道是哪一類的了,呵呵)。和標(biāo)稱型對(duì)應(yīng)的是數(shù)值型,如果標(biāo)記的答案是數(shù)值型的,那就不是分類問題了,與之相對(duì)應(yīng)的是機(jī)器學(xué)習(xí)的另一類應(yīng)用回歸。
Part one:以同學(xué)ID為對(duì)象來計(jì)算消費(fèi)特征數(shù)據(jù)
1、加載一卡通訓(xùn)練數(shù)據(jù)
2、修改列名
分別修改字段0、1、2、3、4、5、6為id、pos、address、catalog、time、cost、have
3、根據(jù)id進(jìn)行分組,然后根據(jù)cost字段計(jì)算每個(gè)人的消費(fèi)情況(消費(fèi)總額,單次最大消費(fèi),單詞最小消費(fèi),消費(fèi)均值,消費(fèi)中位數(shù),消費(fèi)次數(shù)),結(jié)果保存到df表card_cost。
輸入以下統(tǒng)計(jì)函數(shù):
cost_sum:sum,cost_max:max,cost_min:min,cost_mean:mean,cost_meidan:median,cost_count:count
4、然后計(jì)算卡內(nèi)余額(最大值,最小值,平均值),結(jié)果保存到df表card_have
輸入以下統(tǒng)計(jì)函數(shù):
have_max:max,have_min:min,have_mean:mean,have_median:median
5、兩張合起來,一個(gè)人的消費(fèi)狀況就非常清晰了
6、查看關(guān)聯(lián)后的表?
Part two:計(jì)算資助金額標(biāo)記數(shù)據(jù)
1、加載助學(xué)金發(fā)放訓(xùn)練數(shù)據(jù)
2、修改列名。分別修改字段0、1為id、money
由于有資助的不一定有消費(fèi),有消費(fèi)的不一定出現(xiàn)在資助名單中,所以card_money和stn的行不一定是一一對(duì)應(yīng)的,我們一定要確保card_money的數(shù)據(jù)中沒有空值,card_money和stn的行一一對(duì)應(yīng)(數(shù)量一致,關(guān)連一致)。
可以采用如下方式:
1、還原card_money的index為id列?
2、以資助名單為準(zhǔn)關(guān)聯(lián)消費(fèi)記錄
3、用-1填充a的空值
4、選出新的特征數(shù)據(jù)
5、修改card_money中id列的類型為int
6、設(shè)置id列為索引
(二)選擇算法
有了特征數(shù)據(jù)和標(biāo)記數(shù)據(jù),接下來我們就要選擇算法了,FEA支持的分類算法有以下幾種:
也許你該問了,這么多算法我該使用哪個(gè)呢?這就和你的數(shù)據(jù)息息相關(guān)了,這也是經(jīng)驗(yàn)的問題。
而在實(shí)際的工程中,我們往往會(huì)使用多種分類器,來比較一下分類的效果再做選擇。那你也許又該說了,這么多算法一個(gè)一個(gè)試下來,不是很麻煩嗎。呵呵,FEA想你之所想,在新的版本中FEA將添加自動(dòng)分類功能,自動(dòng)進(jìn)行多種分類器的訓(xùn)練并打分,有你來選擇適合你的一款。
本次我們使用gbdt分類器和svm來做下面的實(shí)驗(yàn)。
(三)訓(xùn)練模型
訓(xùn)練數(shù)據(jù)構(gòu)建模型
1、設(shè)置工作區(qū)
2、使用迭代決策樹分類算法gbdt,構(gòu)建模型和訓(xùn)練數(shù)據(jù),一步完成,模型名稱命名為gbdt
3、評(píng)估模型,給模型打分,結(jié)果保存到DF表score
?4、查看結(jié)果
結(jié)果的取值在0到1之間,代表預(yù)測(cè)的準(zhǔn)確度,最大為1,準(zhǔn)確度100%,千萬不要看到1就很開心哦,很多情況下1代表了預(yù)測(cè)結(jié)果和你的數(shù)據(jù)完全擬合,或者說擬合,當(dāng)真的有新數(shù)據(jù)來預(yù)測(cè)時(shí),反而很不準(zhǔn)。可以換一個(gè)算法試試。
5、使用向量機(jī)分類算法svm構(gòu)建模型和訓(xùn)練數(shù)據(jù),一步完成,模型名稱命名為model
6、評(píng)估模型,給模型打分,結(jié)果保存到DF表score
7、查看結(jié)果
(四)機(jī)器預(yù)測(cè)
模型構(gòu)建訓(xùn)練好后,我們就可以來進(jìn)行預(yù)測(cè)了,預(yù)測(cè)數(shù)據(jù)和特征數(shù)據(jù)的計(jì)算方法一樣,就不在這里詳細(xì)描述了。
預(yù)測(cè)數(shù)據(jù)的文件為match/fund/card_test.csv
預(yù)測(cè)人員的文件為match/fund/studentID_test.csv
假定預(yù)測(cè)數(shù)據(jù)的DF表為card_money1,則預(yù)測(cè)過程如下:
1、使用gbdt模型預(yù)測(cè)
2、使用svm模型預(yù)測(cè)
3、查看結(jié)果
是不是很簡(jiǎn)單?
沒錯(cuò),照上面的步驟玩下來,你就完成了機(jī)器學(xué)習(xí)的基本過程,就對(duì)機(jī)器學(xué)習(xí)有了初步的了解。
(五)保存模型
機(jī)器學(xué)習(xí)是不是每次都得經(jīng)過上述步驟(準(zhǔn)備數(shù)據(jù)、訓(xùn)練模型、預(yù)測(cè))才能應(yīng)用呢?
不是的!
當(dāng)我們訓(xùn)練好一個(gè)模型后,可以將模型保存下來,可以分發(fā)和部署到新的環(huán)境(機(jī)器)中直接進(jìn)行預(yù)測(cè),而不用重復(fù)訓(xùn)練過程,具體的語句如下:
1、保存gbdt模型預(yù)測(cè)
?2、保存svm模型預(yù)測(cè)
3、查看保存的模型
其中0列存儲(chǔ)的就是模型文件的名稱,然后就可以到數(shù)據(jù)目錄里下載此模型文件。
發(fā)布模型和此相反,先上傳模型文件到數(shù)據(jù)目錄,然后加載模型。
三、小結(jié)
本文以可視化操作的方式結(jié)合教育精準(zhǔn)資助數(shù)據(jù)講解了機(jī)器學(xué)習(xí)的典型過程,為還在機(jī)器學(xué)習(xí)大門口徘徊的人們點(diǎn)亮了一盞明燈,不要猶豫不要徘徊,機(jī)器學(xué)習(xí),你可以的!
對(duì)于機(jī)器學(xué)習(xí)的一些高級(jí)話題,如特征選取,參數(shù)設(shè)置,過采樣等將在后續(xù)的系列中進(jìn)行探討和交流,教你如何打造一個(gè)準(zhǔn)確率和召回率等都滿足實(shí)戰(zhàn)的模型。
在此也和大家叮囑一下,模型的優(yōu)化是無止境的,要耗費(fèi)大量的腦力和體力。
FEA準(zhǔn)備好了,你準(zhǔn)備好了嗎?
轉(zhuǎn)載于:https://my.oschina.net/u/3115904/blog/839513
總結(jié)
以上是生活随笔為你收集整理的Follow me!百万奖金由你拿 | 精准资助机器学习(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring解决ajax跨域问题
- 下一篇: bootstrap 标签页tab切换js