經過前面兩篇的數據探索,咱們對教育精準資助的數據已經有所瞭解了,接下來咱們就要創建模型來進行機器學習了。對於機器學習這個事還真是挺有意思,寫的深了會讓你們以爲太難,打消你們學習的積極性;寫的太淺又沒辦法深刻本質真正進入到機器學習的世界裏,這也是本篇文章和前兩篇間隔時間這麼長的緣由之一。算法
思來想去仍是要照顧哪些真正想從事數據分析行業的人羣,以通俗易懂的方式結合精準資助的數據來介紹機器學習,創建他們對機器學習的信心,讓他們經過使用FEA,知道機器學習也就那麼回事!機器學習
若是你已是老司機,能夠繞道了。函數
1、機器學習之分類概況學習
大千世界中「人以類聚,物以羣分」,就是指具備相同(或相近)特徵的事物老是歸於一類或者說能聚在一塊兒的事物老是擁有相同(或相近)的特徵。優化
機器學習最基本的研究就是解決分類問題,好比哪些郵件是垃圾郵件,哪些郵件是正常郵件,哪些訪問(日誌)是正常的,哪些訪問是不正常的。對於咱們此次教育競賽來說就是要分出哪些人須要資助1000,哪些人須要資助1500,哪些人須要資助2000,哪些人不須要資助的問題。日誌
解決這些問題最常規的辦法是編寫規則條件,知足某個條件是什麼類,知足另外的條件是什麼類。當問題複雜到必定程度,即不能寫出明確的規則或者規則很複雜時就能夠考慮用機器學習的方法來解決。對象
那麼機器又是如何學習的呢?看下圖:索引
首先,機器學習是要數據的,並且是兩類數據:一類能標識人(和物)的特徵數據,如每一人的消費次數,消費總額,單筆最大等等;另外一類則是標記了人的分類的答案數據(或標記數據),就是須要人根據經驗來告訴機器哪些人是一類的,哪些物是一類的。這樣再選擇合適的算法,讓機器來學習。給的數據越多,機器就學習的越多,機器就會變得越」聰明「。咱們把這個機器學習的過程叫作訓練,訓練的結果就是模型。有了這個模型後,就能夠進行預測,看下圖:ip
首先是要預測的數據的格式和特徵數據的格式同樣,不能添加或減小特徵,也不能變動特徵的名稱和順序,而後使用模型來預測,最後就會獲得預測結果。部署
整個機器學習的過程就是這樣了,還簡單吧,下面咱們就用教育資助的數據操練起來。
2、機器學習過程
(一)數據準備
精準資助主要集中反映在平常的消費數據中,咱們先使用消費數據來構造特徵數據和標記數據(答案數據)。
特徵數據的一個要求是使用一行來描述一個對象(人或物),對象是不重複的,特徵數據均爲數字類型,不能出現其餘類型,若是是字典類型,如性別男女也應該用0,1表示。
標記數據的要求是和特徵數據一一對應,一樣一行表明一我的(或物),標記須要使用整數形,一個數表明了一個分類。這裏的專業叫法是標稱型(變量),取值是有限的整數,不能是小數(分類再多總有個最大值的,小數就不知道是哪一類的了,呵呵)。和標稱型對應的是數值型,若是標記的答案是數值型的,那就不是分類問題了,與之相對應的是機器學習的另外一類應用迴歸。
以同窗ID爲對象來計算消費特徵數據。
#加載一卡通訓練數據
card := load csv by match/fund/card_train.csv with (header=-1)
#修改列名
rename card as (0:"id",1:"pos",2:"address",3:"catalog",4:"time",5:"cost",6:"have")
#根據id進行分組
gt2 = group card by id
#計算每一個人的消費狀況,消費總額,單次最大消費,單詞最小消費,消費均值,消費中位數,消費次數
card_cost = agg gt2.cost by (cost_sum:sum,cost_max:max,cost_min:min,cost_mean:mean,cost_meidan:median,cost_count:count)
#而後卡內計算剩餘金額的,最大,最小,平均
card_have = agg gt2.have by (have_max:max,have_min:min,have_mean:mean,have_median:median)
#兩張合起來,一我的的消費情況就很是清晰了
card_money = join card_cost,card_have by index
#查查
dump card_money
計算資助金額標記數據
#加載助學金髮放訓練數據
stn = load csv by match/fund/subsidy_train.csv with (header=-1)
#修改列名
rename stn as (0:"id",1:"money")
#設置id列爲索引
stn = @udf stn by udf0.df_set_index with id
#查看數據
dump stn
(二)選擇算法
有了特徵數據和標記數據,接下來咱們就要選擇算法了,FEA支持的分類算法有如下幾種:
也許你該問了,這麼多算法我該使用哪一個呢?這就和你的數據息息相關了,這也是個經驗的問題。
而在實際的工程中,咱們每每會使用多種分類器,來比較一下分類的效果再作選擇。那你也許又該說了,這麼多算法一個一個試下來,不是很麻煩嗎。呵呵,FEA想你之所想,在新的版本中FEA將添加自動分類功能,自動進行多種分類器的訓練並打分,有你來選擇適合你的一款。
本次咱們使用gbdt分類器和svm來作下面的實驗。
(三)訓練模型
訓練數據構建模型
#設置工做區
use edu
#使用gbdt算法構建模型和訓練數據,一步完成
gbdt = @udf card_money,stn by ML.gbdt
#評估模型
score = @udf card_money,stn by ML.score with (gbdt@edu)
#查看結果
dump score
結果的取值在0到1之間,表明預測的準確度,最大爲1,準確度100%,千萬不要看到1就很開心哦,不少狀況下1表明了預測結果和你的數據徹底擬合,或者說擬合,當真的有新數據來預測時,反而很不許。
能夠換一個算法試試:
#設置工做區
use edu
#使用gbdt算法構建模型和訓練數據,一步完成
model = @udf card_money,stn by ML.svm
#評估模型
score = @udf card_money,stn by ML.score with (model@edu)
#查看結果
dump score
上述的過程當中有可能會失敗,必定要確保card_money的數據中沒有空值,card_money和stn的行一一對應(數量一致,關連一致)。由於有資助的不必定有消費,有消費的不必定出如今名單中。
簡單的處理辦法能夠採用以下方式:
#還原index爲id列
card_money= @udf card_money by udf0.df_reset_index
stn = @udf stn by udf0.df_reset_index
#以資助名單爲準關聯消費記錄
a = @udf stn,card_moneyby udf0.df_ljoin with (id,id)
#填充空值爲-1
a = @udf a by udf0.df_fillna with -1
#選出新的特徵數據和標記數據
stn = loc a by id,money
card_money= @udf a by udf0.df_drop_col with money
#重設index
stn = @udf stn by udf0.df_set_index with id
card_money= @udf card_moneyby udf0.df_set_index with id
(四)機器預測
模型構建訓練好後咱們就能夠來進行預測了,預測數據和特徵數據的計算方法同樣,我就不在這裏詳細描述了。
預測數據的文件爲match/fund/card_train.csv
預測的人員文件爲match/fund/studentID_test.csv
假定預測數據的DF標爲card_1,則預測過程以下:
#使用gbdt模型預測
stt = @udf card_1 by ML.predict with (gbdt@edu)
#使用svm模型預測
stt2 = @udf card_1 by ML.predict with (model@edu)
#查看結果
dump stt
dump stt2
是否是很簡單?
沒錯,照上面的步驟玩下來,你就完成了機器學習的基本過程,就對機器學習就有了初步的瞭解。
(五)保存模型
機器學習是否是每次都得通過上述步驟(準備數據、訓練模型、預測)才能應用呢?
不是的!
當咱們訓練好一個模型後,能夠將模型保存下來,能夠分發和部署到新的環境(機器)中直接進行預測,而不用重複訓練過程,具體的語句以下:
#保存gbdt模型預測
mfile = @udf df0@sys by ML.save_model with (gbdt@edu)
#保存svm模型預測
mfile2 = @udf df0@sys by ML.save_model with (model@edu)
#查看下載模型
dump mfile
而後就能夠到數據目錄裏下載此模型文件。
發佈模型和此相反,先上傳模型文件到數據目錄裏,而後執行load_model函數,具體以下:
#裝載模型
model = @udf df0@sys by ML.load_model with (8805e608-c841-11e6-9b72-780cb86c4f4e.zip)
3、小結
本文以通俗易懂的方式結合教育精準資助數據講解了機器學習的典型過程,爲還在機器學習大門口徘徊的人們點亮了一盞明燈,不要猶豫不要徘徊,機器學習,你能夠的!
對於機器學習的一些高級話題,如特徵選取,參數設置,過採樣等將在後續的系列中進行探討和交流,教你如何打造一個準確率和召回率等都知足實戰的模型。
在此也和你們叮囑一下,模型的優化是無止境的,要耗費大量的腦力和體力。
FEA準備好了,你準備好了嗎?