1. 說明
?開賽第一周掙扎在前100的邊緣,第二周掙扎在前20的邊緣突颊,第三周懶得弄了鲁豪,坐等換數(shù)據(jù)。初賽的前100名可進復賽律秃,所以在前100中排名前后也沒啥意義爬橡,開始的時候覺得自己分數(shù)蒙的成份很高,換了數(shù)據(jù)就完蛋棒动,然后不斷改進糙申,坐實;后來就有點瞎叫勁了船惨。又傲嬌又膽小柜裸,也沒結交到隊友,至今還是孤軍作戰(zhàn)粱锐。記錄一下本周收獲疙挺,也不知這些都公開之后會不會被打出排行榜[哭臉]。
2. 分類與回歸
?所有回歸都可以抽象成分類卜范,比如訓練集有100個數(shù)衔统,最差的情況下就是分成100個類鹿榜,或者處理成99次二分類海雪。而對于具體數(shù)值的回歸,可通過其所屬類別中的元素計算舱殿,比如:中值奥裸,均值,期望值沪袭,評估函數(shù)最佳值等等湾宙。
?細數(shù)參與過的幾個比賽:醫(yī)療大賽是切分正常和糖尿病,微博互動是切分正常和巨量互動冈绊,淘寶穿搭是切分普通組合和常見的組合侠鳄,人品預測是切分普通和人品不好的,股票是切分普通和大漲的死宣∥岸瘢基本都是從正常中尋找反常數(shù)據(jù),幾乎都可以當成不均衡的分類問題處理毅该,而且它們有個共同的特點博秫,就是越特殊的值權重越大潦牛,比如說預測對一個高血糖值對評分的貢獻多過上百個普通值。
?把分類理解成數(shù)據(jù)的抽象挡育,可簡化問題巴碗,也可以在其上運用復雜的計算。同樣是使用GBDT類的算法即寒,分類就比回歸靈活很多橡淆,尤其是二分類。
3. 排序(Rank)
?排序可以視為一種算法母赵,或者算法中的一個實用的小工具明垢。比如特征工程中的排序特征,排序更常見的是用在評價函數(shù)之中市咽。
?比如本題原本是一個回歸問題痊银,我們把它當成分類處理,分類的邊界劃在哪施绎?是界定正常值的6.1溯革,還是界定糖尿病的11.1,還是中值谷醉?問題的核心是:把從黑到白的柔和過渡通過劃邊界描述成了非黑即白的二元對立——人通常也是這么做的致稀,比如,把人分為好人與壞人俱尼。
?排序提供了一種輔助的方法:它把所有人排了序抖单,越靠前是好人的可能性越大。如果越靠前越容易是反常數(shù)據(jù)遇八,那么取前N個就可以輕松地過濾數(shù)據(jù)和分類矛绘,搜索引擎也是類似的排序原理。
?具體到本題刃永,我是先對所有數(shù)據(jù)做回歸货矮,然后用不同邊界分類篩出各個檔位的特殊數(shù)據(jù),用該檔的均值預測特殊數(shù)據(jù)斯够,其中用排序控制特殊數(shù)據(jù)的多少囚玫。原理非常簡單,不過還需要調整算法读规,比如在分類中想要找可能性最大的前N個抓督,不考慮其它,和把所有數(shù)據(jù)都盡量正常分類束亏,做法肯定不同铃在,詳見后面“基于排序的評價函數(shù)”。
4. 正常與反常
?上面說到枪汪,本題我用了分類加回歸涌穆,分類那么好怔昨,為什么還加回歸呢?像上面“分類與回歸”中說到的100個數(shù)回歸等99次二分類宿稀,從這個角度看分類和回歸本來是一個東西趁舀,只是粒度不同。也就是說處理任何問題祝沸,都需要在不同粒度下分析矮烹。
?舉個例子,追漲殺跌和低買高賣明顯是不同的操作策略罩锐。
在藍色點賣出奉狈,綠色點買入,相對于黑色的趨勢線是低買高賣(細粒度)涩惑,而根據(jù)黑色上升趨勢線操作又是追漲行為(組粒度)仁期。這里趨勢就是常態(tài),請注意:常態(tài)不僅是不動的狀態(tài)竭恬,一條橫線跛蛋,也有可能是斜線或者曲線,它可以是用回歸擬合出來的模型痊硕;而藍色和綠色點就是反常赊级,反常沒有一定之規(guī),主要看常態(tài)是什么岔绸。比如大家都上輔導班理逊,你不上就反常了。
5. 基于排序的評價函數(shù)
?這里主要基于xgboost工具盒揉,它提供排序的評價函數(shù)有:ams晋被,auc,pre预烙,ndcg墨微,map。其中大多數(shù)找不到相應的中文說明扁掸,建議看源碼:xgboost/src/metric/rank_metric.cc
(1) xgboost相關說明
i. 評價函數(shù)
xgboost中,一般通過eval_metric設置軟件自帶的評價函數(shù)最域,也可以通過feval自定義評價函數(shù)谴分。評價函數(shù)包括回歸相關的,分類相關的镀脂,這里主要介紹排序相關的牺蹄。一般評價函數(shù)的輸入變量是訓練數(shù)據(jù)和預測值。輸出是評價函數(shù)名稱和評價分值薄翅。
ii. 參數(shù)
有些評價函數(shù)可以帶參數(shù)沙兰,形如:ndcg@2氓奈,ndcg@,ndcg@2-鼎天。一般是從1-0的排序舀奶,如果設置了減號,可以支持從0向1的排序斋射。
iii. weight
權重是通過scale_pos_weight或者作為DMatrix參數(shù)設置的育勺,比如正例和反例的比例為1:4,將scale_pos_weight設為4罗岖,在計算時正例將乘權重4涧至。weight在有些評估函數(shù)中也發(fā)揮作用,比如ams和auc桑包。
2) xgboost提供的評價函數(shù)
i. PRE
PRE全稱是Precision南蓬,即準確率。根據(jù)實際和預測的不同哑了,一般有四種情況:tp蓖康,fn,fp垒手,tn蒜焊,如下圖所示:
實圈代表實際為真,空圈代表實際為假科贬,tp是預測成真實際也是真的泳梆;tn為預測是假實際也是假的,fp是實際是假預測成了真榜掌,fn是實際是真預測成了假优妙。精確率Precision和召回率Recall是常用的技術指標。
Precision指的是在所有預測成真的實例中實際為真的比例憎账,也就是綠占圓的比例套硼。該評價可以加參數(shù),即只計算排序后前N個實例的精確率胞皱。
ii. MAP
MAP全稱是Mean Average Precision邪意。翻成中文是平均精度均值,即對均值再求均值反砌,求的是所有類的average precision的平均雾鬼,公式如下:
其中Q是類數(shù),AveP(q)是q類的精度均值宴树。
iii. MDCG
MDCG全稱是Normalized Discounted Cumulative Gain策菜。公式如下:
其中p是數(shù)據(jù)項數(shù),reli是第i項的評分結果,分子表示評級越高分值越高又憨,分母是排名越靠前分母值越小分值越高翠霍。DCG是當前所有條目的評分,而IDCG是對當前所有評級評分蠢莺。
NDCG是一種源自搜索引擎的算法寒匙,越靠前權重越大,單項評級越高權值越大浪秘,求最累加得分蒋情。
具體說明見:https://en.wikipedia.org/wiki/Discounted_cumulative_gain
iv. AUC
AUC全稱是Area Under Curve,曲線下面積耸携,其中曲線指的是ROC曲線棵癣,ROC的橫軸是假陽率fpr,縱軸是tpr真陽率夺衍,公式如下:
利用tpr和fpr畫出的曲線狈谊,形如:
ROC曲線上的每個位置描述了在不同分界點上tpr和fpr的大小,而曲線下面積描述了該模式對各種分界的綜合成績沟沙。
AUC對類別是否均衡并不敏感河劝,幾乎是分類常用的評估算法。
v. AMS
AMS全稱是Approximate Median Significance矛紫,公式如下:
其中s,b分別是未經正則化的真正例(TP)和假正例(FP)赎瞎,br是常數(shù)化正則項設為10,log是自然對數(shù)颊咬。
它的格式是ams@k务甥,其中參數(shù)k是個百分比,指定topn占數(shù)據(jù)的百分比喳篇,它主要評估序列的前n項敞临。評價函數(shù)求出的是序列中最大的ams值,及它所在的位置麸澜。
AMS是Kaggle的Higgs Boson比賽中的評價函數(shù)挺尿,詳見源碼:xgboost/demo/kaggle-higgs。這種評分標準用得不太多炊邦。
6. 一些想法
?我覺得寫算法和寫應用有個明顯的不同:寫應用可以大量借鑒別人的代碼编矾,API都是一樣的,你能做的我也能做铣耘,但算法比賽不同洽沟,照抄照搬還想超過人家基本不可能。
?在看別人代碼的時候蜗细,最終成果可能只有幾百行,但是推理和嘗試的代碼量比成果多得多,這部分最終并沒呈現(xiàn)出來炉媒,看似簡單的答案只是冰山一角踪区。因此,有時看了人家的答案吊骤,覺得每句都能理解缎岗,到了自己做的時候,還是照貓畫虎白粉,只能微調传泊。
?我覺得恐怕還是要在實戰(zhàn)中磨煉自己的套路。