PU-learing:解決正負樣本不足利器(R語言)
原文連結:PU-learing:解決正負樣本不足利器(R語言)
微信公眾號
:機器學習養成記
在實際分類場景中,經常會遇到類似這樣的問題:
只有標記了的正樣本,和未標記的樣本
。比如金融風控場景,有一部分使用者被標記為欺詐使用者,剩下的使用者未被標記,雖然這其中大多數信用良好,但仍有少量可能為欺詐使用者。雖然為了方便操作,可以將未標記的樣本都作為負樣本進行訓練,但會降低準確度,如何辨別未標記樣本中的正負樣本,提升模型準確度,就成為一個值得思考的問題。PU-learning演算法於2002年提出,最早用來解決文字分類問題,並延伸到基因識別、反欺詐等諸多領域,是解決樣本未標記問題的利器,本文將對此演算法進行介紹,並透過R語言進行例項演示。
PU-learning演算法
我們通常進行的分類學習,一般是有監督學習,即從確定的正負樣本中學習規律,對新資料進行預測。在實際業務場景中,可能會因為資料積累不夠、標註資料成本高等問題,使得資料樣本不豐富。PU-learning是一種
半監督
學習演算法,主要用來解決可以清晰確定正樣本但不能確定負樣本的問題。
建立PU分類器的
基本思想
是兩步法:1、從未標註樣本中找到可靠負例(RN)。2、用確定的正例和可靠負例訓練分類器。
確定可靠負例(RN)
尋找可靠負例的方法有樸素貝葉斯、Spy、1-DNF等,下面選取Spy方法進行介紹並演示。
其中,一般從P中選擇15%樣本作為S,tr指判斷為正例的機率。閾值tr的選擇上,
應滿足S中正例錯誤率低於1-r的條件下,最小化U中正例數目
。
訓練分類器
在得到RN後,用P和RN透過傳統機器學習分類演算法,訓練分類器,預測新樣本。
R語言實現
step1:匯入資料,並劃分P和U集合。
step2:隨機抽取p中15%樣本作為集合s,並建立ps和us集合。
step3:使用樸素貝葉斯分類,對ps和us訓練分類器,並作用到u集合上,計算每個樣本的分類機率。樸素貝葉斯分類可用e1071包中的naiveBays函式。
step4:使用s確定閾值tr,並將分類機率小於tr的u中樣本加入rn。這裡為了簡化操作,選擇s中所有樣本分類機率的10%分位點作為tr。
step5:使用p和rn訓練svm分類器,並對測試集test進行預測,透過混淆矩陣觀察分類效果。svm分類器可用e1071包中對svm函式實現。
最終混淆矩陣效果為:
推薦文章
·
Bagging演算法(R語言)
·
靜態爬蟲與地址經緯度轉換(python)
·
特徵工程(一):前向逐步迴歸(R語言)
·
聚類(三):KNN演算法(R語言)
·
小案例(六):預測小偷行為(python)
·
ggplot2:正負區分條形圖及美化
掃描二維碼,關注我們。
如需轉載,請在開篇顯著位置註明作者和出處,並在文末放置機器學習養成記二維碼和新增原文連結。
快來關注我們吧!