Udacity MLND Project2 Find_donors - Summary

3天時間忙里偷閑,在項目導師的督促下終于將 Project2 完成了,值得慶幸的是 review 一次性通過。

image.png

通過項目的學習,著實有不少收獲,按照整個項目的進展流程總結如下:

Data Exploration

拿到數據第一步還是先做數據探索,對數據分布有一個整體把握,觀察是否存在數據傾斜等問題。在這里數據傾斜是指數據特征大多數分布在單點周圍,但也有部分數據分布在極大或極小值的附近,這種現象會極大降低學習器的學習效率(可以想象比如用Logistics回歸去建模這種數據,權重w的學習過程必然遭到強烈zig-zag形的擺動,因此學習受到影響)。解決這一問題的方法是采用 logarithmic transformation 變化將特征維度進行指數級的縮放。

通過可視化方法(項目提供的現成的模塊vs.distribution,直接捕捉并可視化出分布傾斜的數據),可以發現 capital-gain 和 capital-loss 特征確實存在嚴重的分布傾斜現象:

image.png
image.png

Naive Estimator

Naive Estimator 概念就是不利用特征信息,強行將所有數據判別為我們的目標類別。可以知道,該分類器必然將所有目標數據“蒙到”。因此Naive分類器的 Recall 是 1,在Recall=1的前提下,accuracy=precision。

Data Preprocessing

數據預處理階段,主要填補缺失數據、針對類型數據進行啞變量化。
這里我用到了列表推導式獲取所有的類型數據,然后用pd.get_dummies方法,簡單高效:

pd.get_dummies方法有很多參數可以使用,暫時還沒搞精通,只能現學現賣,解決以上燃眉之急。

接下來是將預測目標由字符串類型映射為0、1數值類型,用到了series類型的map方法和lamda表達式(lamda表達式被reviewer夸贊了:D):

特地弄清了map、apply、applymap三個方法的主要區別:map是series類型的方法,apply、applymap是dataframe的方法,而apply是作用于整個列,例如求列的min(),applymap是作用于整個列中的每個元素。

Shuffle and Split Data

引入隨機性,并設置種子為0.

Evaluating Model Performance

在評估標準方面,引入了F_beta指標(0-1之間,越大越好),該指標綜合考慮precision和recall,并引入參數beta來做二者的權衡。如下公式:beta越大,越偏重recall,beta越小,越偏重precision。(具體為什么beta能起到這種作用,看了wiki也沒搞精通,用到時再說吧)

image.png

Model Application

模型預測方面,我選用了三個模型為 Decision Tree, Adaboost, GaussianNB。
之所以算用這三個模型,DT是因為我覺得效果會比較好,Adaboost是因為學了課程以后覺得該ensemble learning的思維很強大,想體驗一下效果(事實證明確實優于DT),選GaussianNB并不是因為它適合數據,恰恰是因為它不適合數據,我想驗證下該模型具體會表現的多差勁:)。。結果如下:

image.png

在這個過程中,受益最大的是,項目提供的代碼非常規范,讓我對模型對比的實驗過程有了一個更規范的編碼方式,先編寫好train和test的pipeline,然后將不同模型作為learner參數傳入,即可一次性展示出不同模型的實驗結果(詳見review)。

Model Tuning

針對最優的Adaboost方法,繼續采用網格搜索尋找最優參數,通過項目我真是了解GridsearchCV方法的強大了,必須得研究透該方法啊,以前調參都是傻不拉幾的手動改參數:

Feature Selection

特征選擇,首先項目讓我根據直覺選取了top5的特征,然后用模型feature_importances_屬性選擇的top5特征進行對比,結果表明我的直覺分析還不錯!注意:feature_importances_屬性只有部分學習器有(e.g., adaboost, random forests)。

若只選取top5特征的話,學習性能略有下降,但是若對運行時間要求嚴格,進行特征選擇是很必要的。

這里只給出了運行精度,因為偷懶沒有給出運行時間的顯示:)。此外這里用到了clone模塊,個人猜測是克隆一個學習器的初始架構而不克隆學習結果。

Review 的收獲

  1. python 2.7 的除法默認是floor除法 (python 3.x 則是真正),通過future引入division模塊,可以實現便捷的真正除法,若要實現floor除法,只需要使用”\"就好了。
image.png
  1. Binary encoding is a great choice for cases where the number of categories for a given feature is very high.

  2. This map might help to give guidance when choosing an estimator.

  3. The two main weaknesses of Naive Bayes are the independence assumption among their features and the zero frequency problem. 貝葉斯方法的兩個主要缺點是1)樸素假設 2)0頻率問題,該問題可以通過貝塞爾校正改善。

  4. AdaBoost is one of the best estimators for this project! If you expand the parameter grid a little more, you can get a score higher than 0.74. Gradient Boosting also performs greatly here! 運氣比較好,一下子選的Adaboost是最適合該項目的方法,reviewer也讓嘗試對learn_rate進行網格搜索,可以達到0.74的scores! 也建議試試梯度boosing,boosting大法好~集成大法是王道!

  5. Besides the feature importance, an alternative is to use calculate the significance of each feature using the weights of a Logistic Regression (LR) model. The significance is calculated dividing the coefficients of the LR by their standard errors (also know as Z-score). You can check more details in the Chapter 4.4.2 of The Elements of Statistical Learning. According to the reference, a Z-score higher than 2 is significant at the 5% level. Reviewer也提示可以采用除了特種重要度的其他方法進行特征重要性評估,利用LR模型進行權重評價,該方法目前還沒仔細學習!

All in all, Pro2 收獲滿滿。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容