1. 程式人生 > >機器學習第三練:為慈善機構尋找捐助者

機器學習第三練:為慈善機構尋找捐助者

alt earch .get 變量 照相 標簽 log 比較 random

這個任務同樣是在Jupyter Notebook中完成,

項目目的是通過前面的所有特征列,當然去掉序號列,然後預測最後一列,收入‘income‘,究竟是大於50K,還是小於等於50K.

第一步,探索數據,像探索性統計裏經常涉及到的頻數,均值,眾數或者眾位數相關的計算,我們通過這些統計指標,使用python來看一下數據的大概情況

這塊主要還是涉及pandas, numpy, visuals相關的內容來進行操作

比如查看一下數據都有哪些特征,標簽,因為本身是監督學習

技術分享

技術分享

同時,機器學習本身,雖然對各種算法,它們的邏輯步驟,參數,涉及到的數學公式,優缺點等等這些內容涉及的更多一些,但是之前的這個數據預處理,其實涉及到的是特征工程的內容更多,也就是數據分析的相關內容更多一些,

第二步,數據相關處理,

這裏涉及到兩個變量,資本利得和資本損失,這其實是管理會計相關的概念,利得是指買了一支股票,5塊的買的,1000股,漲到10塊,賣掉,收益5000(假設沒除去其他費用),利得就是5000,同樣,假如賣的價格是3塊,那麽損失就是2000. 其實扯的這個概念在分析特征與標簽的關聯時才可能用到。

下圖,是兩個變量原始的分布情況:比如利得的數據看著分散,偏左,如果是期望值是正態分布的話,數據需要轉化一下,

技術分享

使用對數進行轉化,可以把極值變小,下圖是轉換後效果,看著是不是利得和損失的均值都更接近一些了。

技術分享

這時數據的分布好一些,但仍需要對數據進行規一化操作,從而在下面使用監督學習器的時候能夠被平等的對待

規一化操作的結果使得特征的範圍被圈在一個極值範圍之內,比如0,1之間,這裏的規一化操作就是特征縮放。

沒有規一化之前是這個樣子

技術分享

規一化之後是這個樣子,可以對比一下上下兩幅圖的數據,

技術分享

對標簽進行啞編碼:(從定性變量轉化成定量)

使用pandas.get_dummies()對‘features_raw‘數據來施加一個獨熱編碼

轉換之前:

技術分享

轉換之後:

技術分享

第三步,進行訓練集和測試集的分割,

技術分享

技術分享

第三步,模型性能評估

混淆矩陣的相關模型評價指標,比如說準確度,Fbeta指標(混合指標,準確率和召回率的混合,beta=0.5時,會強調準確率)

要想了解這個,其實可以先找個使用樸素貝葉斯預測瘟疫的例子,來了解什麽假陽性,真陰性什麽的。統計學概念,這裏不累述,嚴格按照相關公式定義進行計算就可以。

技術分享

第四步,選擇一個監督模型來做學習器,並闡述其優缺點, 需要舉例,並寫出引用出處,

個人答案,可能不是太嚴格,也參考了很多網上的資料,

技術分享

技術分享

第五步,創建一個pipline來評估上面三個模型,選擇最優

有條件限制:

1,比如選擇數據的部分內容做預測,使用不同的size來做訓練,包括樣本的.01,.1和1

2,還是使用sklearn.metrics中的fbeta_scoreaccuracy_score來進行判定

下面是訓練集的結果:

技術分享

下面是測試集的結果:

技術分享

第六步,選擇最優模型和調參

最優的話,從測試集的比例為1的結果來判斷,邏輯回歸勝出。

調優的話使用 sklearn的網格搜索,配置好對應的參數值,

在調用學習器的時候,grid_obj = GridSearchCV(estimator=clf,param_grid=parameters,scoring=scorer)

參數random_state可以讓網格搜索每次劃分訓練集和驗證集的時候都是完全一樣的

邏輯回歸的參數C,主要是控制模型在過擬合和欠擬合之間保持一個平衡。

結果如下,還是參數調優對模型本身是有幫助的。

技術分享

第七步,提取特征重要性:

技術分享

從下圖可以看出,其實如果在提取特征這一步之前做主觀推測的話,最重要的特征應該會跟下面五項有偏離,

但是下圖顯示,資本利得和資本損失的權重就比較高,原因應該是在於在此練習過程中,其他的特征都沒有被數字化,

技術分享

機器學習第三練:為慈善機構尋找捐助者