【kaggle案例實戰】實戰過程筆記_知識點補充

  • 版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

1.在做kaggle比賽時,要注意使用kaggle wiki,kaggle wiki列舉了比賽使用的一些評判標準以及歷史上使用該評判標準的比賽供我們參考。(tips:將評判標準優化爲loss function)

2.工業上一些用機器學習的例子:1) 互聯網用戶行爲:CTR預測;2) 銷量預測:比如阿里菜鳥對存貨數量的預測;3) 圖像內容在比賽中一般用DL壟斷;4) 推薦系統相關:電商推薦 等。

3.強化學習主要在機器人領域。

4.一些方法講解:1) Naive_Bayes:當數據集處理的很好時,且數據分佈均勻時,這個方法雖然簡單但處理NLP能有很好的效果;2) SVM:在DL出現前壟斷classification,在小數據集上表現好;3) SVD,PCA,K-means:工業上多用這些方法進行輔助,比如先用K-means對用戶做聚類,將cluster_id作爲新的特徵加入到模型中;4) 關聯規則方法有Apriori,FP-Growth; 5) 隱馬在RNN之後用的很少;6) 數據太多的情況下使用SGD,需要根據數據量級去選擇方法。

5.實戰常用工具:1) sklearn: 全,但是速度不一定最快;2)gensim: NLP;3)XGBoost: 主要是boosting; 4) pandas: 數據清洗,產出特徵; 5)Natural Language Toolkit: 英文NLP(中文用的不多,因爲中文要做分詞);  6)Tensorflow: 佔內存多,速度不是很快; 7)Caffe: 主要是圖像處理;8)MxNet: 和 XGBoost一家; 9)Keras: DL, 接口簡單。

6.在處理問題這個過程中,處理數據和特徵佔據70%(包括認識數據(當數據維度很高,難以可視化時,可以使用t-SNE這個高維可視化方式,或者使用PCA等方法降維)、數據預處理(清洗、調權,這包括去除離羣點和bad點,看數據分佈是否均勻等)、特徵工程),而模型建立佔據30%。

7.數據預處理:1)數據清洗: 不可信樣本丟掉(根據實際問題)、缺失值極多字段考慮不用;2) 數據採樣:上採樣/下采樣(是爲了保證樣本均衡,比如正負樣本比例爲1:10,而評判標準爲正確率,那麼我們將所有樣本判爲負的,正確率就有90%,這樣的分類器沒有意義)、保證樣本均衡(樣本比例1:2,2:3都ok,不像1:10甚至再往上那種程度就可以)。

保證樣本均衡的方法如下:1) 上採樣:加大正樣本權重(把正樣本重複若干次);2)loss 函數中加大正樣本的權重;3)將負樣本平均分爲10份,和正樣本結合做10個分類器,最後再對這10個分類器做一個ensemble。

8.載入數據工具:若數據量不是那麼大,可以載入內存,那麼使用pandas(數據量很大時,不要批量操作特徵,可以抽取單個特徵做轉換);數據量很大時,可以使用hive sql, spark sql。

9.特徵工程: 1)填補缺失值:對於缺失值很少的,一般可以使用mode或mean去填補;對於缺失值不是那麼多的,或者缺失值代表某種意義(代表沒有),可以將缺失值作爲一個特徵,比如顏色這個特徵有三種顏色,用onehot編碼時,可以編成4位,最後一位表示是否有顏色,0表示有,而1表示無。

                2)數據變換:可以採取log、指數、box-cox對數據做變換,使變換完的數據分佈更加明顯。

                3)特徵處理:對於不同的特徵有不同的處理方法,比如時間類,根據具體問題,可以有間隔型(每個日子離雙11還有幾天)、組合型(每週點擊率)、離散化(將每天時間段分爲飯點和非飯點,可以將飯點標爲1,非飯點標爲0);對於文本型,可以使用n-gram, bag of words, TF-IDF(編碼體現每個詞是否出現以及其影響力)。

                4)特徵抽取:sklearn.feature_extraction(文本型);scaling表示特徵縮放,並不要求每個特徵範圍一致,他的區間可以是[0,3],不像normalization那麼嚴格在[0,1]上;對於連續變量離散化可以用binarization(二段切分)或pandas.cut作多段切分。

                5)特徵選擇:點擊打開鏈接 ①過濾型:sklearn.feature_selection.SelectKBest (少用,評估相似度,一般用於LR,實際情況中多用方差,因爲方差大直觀有作用,方差爲0表示數值都相同,那麼這個特徵可能沒那麼大作用);②包裹型:sklearn.feature_selection.RFE ( RFE爲Recursive feature elimination縮寫,將特徵按重要程度排序剔除末尾一部分變量);③嵌入型: sklearn.feature_selection.SelectFromModel (有些模型提供coef或者feature_importance_供選擇特徵,比如tree或者xgboost ),L1正則化(多用於LinearSVC & LogitR)。

10.模型選擇:用CV選擇模型,用GS在模型中調參。可使用sklearn.grid_search.GridSearchCV,但GS和CV一起用時效果很慢,K_fold可以優化用來做特徵選擇。

11.學習狀態評估:通過畫learning_curve評判模型是過擬合還是欠擬合,根據不同狀態對模型進行修正。plot learning curve

12.模型融合:model ensemble stacking:用多種predictor結果作爲特徵訓練(神經網絡就是這樣);若使用GBDT不要使用sklearn,很慢,建議使用XGBoost或者LightGBM。

13.XGBoost庫使用:基本應用:xgboost/demo/guide-python/basic_walkthrough.py (包括可載入數據類型及給數據加權);高級應用:自己設定objective函數(xgboost/demo/guide-python/custom_objective.py),注意在定義函數時,函數要求可導,且要告訴xgboost該函數的一階導(grad)和二階導(hess)。除了XGBoost,還有百度開源的一個基於RF算法的庫(在大數據集上使用),效果比XGBoost好一些,還有Google的LightGBM。







 

                    





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章