一種調loss控制特徵權重的方法
訓完了模型不是我想要的樣,我覺得重要的特徵權重低,咋整?調樣本,調特徵,調模型,調認知。
調樣本啊,費勁巴拉的;調特徵啊,我就要這個特徵,不想動它,那動其它特徵吧,好像也挺麻煩的;調模型啊,模型選型,loss,訓練方法,超參,可調的也太多了;調認知啊,我又不是啥數據沒看瞎拍的,不想調。這把咱來看看調loss的吧。
一個樸素粗暴的想法
考慮一個非常基礎的擬合方法,最小二乘法,它的loss可以表示成
,求導,=0,解出來
如果第k個特徵是個正向特徵(xk越大則score越大),它的權重wk覺得太小了,比如x從0變到1,score才從0.4變到0.6,但我想讓它的權重變大點,讓score能從0.4變到2.6,該咋整呢?簡單地想,我給wk加上一個數,原來是0.2,我給它+2,讓它變成2.2,這不就得了嘛。注意到對每個xk,score的期望值(0.4~2.6)和實際值(0.4~0.6)之差和x的值成正比,比率先記成c,這麼看來上面這個粗暴的思路好像還有點道理哈,只是咱不能等模型訓完了之後再手調,最好讓它直接學出來wk=2.2。那也不是沒有辦法,把loss中的w改一下就行了,改成這樣
,還是求導,=0,解出來
第k維權重增加了c,其它維權重沒動,是不是很機(齷)智(齪)。
可以證明,這個方法不光對最小二乘法有效,對其它常見的線性模型也都有效,比如LR,SVM,以及pairwise的ranksvm。
如果模型是樹呢
就以常見的梯度樹為例吧,讓這個特徵作用更大,要體現在兩個方面,一個是這個特徵會搶到更多的分裂點,一個是分裂完了之後葉結點的權重得更大。
假設,交叉熵loss,pointwise訓練,目標特徵是正向特徵。則梯度
假設樹的分裂已經完成,由葉結點上權重=平均負梯度,可知葉結點權重增大,且是x和c的增函數。葉結點權重是c的增函數說明c越大,區分度越大。
接下來看這種調法對樹分裂的影響。先想想極端情況,如果影響是讓樹不分裂了,那c再大也沒區分度;如果影響是讓樹分裂得更細了,一個x值對應一個結點,那區分度應該就達到最大了。我們自然是希望它能讓樹分裂得更細,更愛用特徵x分裂,那就可以先看看啥情況下特徵x的分裂收益會比較大。分裂收益是啥含義呢?衡量分裂之後混亂程度降低了多少,那怎樣降低得最多呢?分裂完了最有序,比如按x=x0分裂,左結點上全是x<=x0的樣本,右結點上全是x>x0的樣本,那理想情況就是左結點上全是負例,右結點上全是正例嘍。那我們就猜想吧,對於梯度樹來說,梯度相對於特徵值更有序,則樹更容易按這個特徵分裂,即分裂收益更大。
假設有n條樣本,按x排序,考察一個候選分裂點v,x1<x2<..xk<v<xk+1<..<xn,對應梯度的序中存在i<=k<j,使gi>gj,記gi-gj=d。如果交換gi和gj,則g更有序,分裂收益應該變大。來試試看,
交換gi和gi之後
gain的變化
由樹結構的對稱性,不妨假設左結點的平均梯度小於右結點,則
至此,我們證明了梯度相對於特徵值更有序,則分裂收益越大。接下來我們要看看這種調loss的方式會不會讓梯度相對於目標特徵更有序。比較兩條樣本s和t,特徵值xs<xt,我們希望gs<gt的概率更大,即
就是這麼個事兒。現在可以說了,這麼調loss可以讓目標特徵的分裂收益更大,從而更容易搶到分裂點。
總結一下,這麼調loss可以
1.讓目標特徵更容易搶到分裂點,原因在
a.它可以讓梯度相對目標特徵更有序,
b.梯度相對於目標特徵越有序,分裂收益越大。
2.讓目標特徵分裂之後權重更有區分度。
所以,這麼干有用。
第1條的a好像能用歸納法證,當已經有了n條數據的時候,來了一條比它們都大的數據n+1,對於任一左小右大的分法,把第n+1條數據放到右邊的收益大於放到左邊。。
第1條的b好像能用(ys-cxs)/(yt-cxt),當c=0時比值是ys/yt,然後單調趨向xs/xt。。
我他媽為啥整得這麼麻煩。。
推薦閱讀:
※[貝葉斯五]之樸素貝葉斯
※cs231n筆記1-用KNN演算法進行圖像分類
※Python基礎_103.數據結構與演算法_查找
※【最優化】無約束優化方法-阻尼牛頓法
※Theano (1)
TAG:機器學習 |