機器學習中的非均衡分類問題

2021-07-07 06:53:54 字數 2188 閱讀 7413

非均衡分類問題是指在分類器訓練時,正例數目和反例數目不相等(相差很大),或者錯分正反例導致的代價不同(可從代價矩陣觀測)時存在的問題。

而大多數情況下,不同類別的分類代價並不相等,而諸如信用卡欺詐等場景中,正反例的樣本數目相差巨大,這就需要一些新的分類器效能度量方法和技術,來處理上述非均衡問題。

分類器學習常用的錯誤率指標會掩蓋樣例如何被錯分的細節,可以採用更好的效能度量指標1 ——正確率tp/(tp+fp)和召回率tp/(tp+fn)。

實際上,單獨滿足其中乙個指標高效能較容易,但構造乙個同時高正確率有高召回率的分類器很難。至於具體選擇正確率還是召回率,關鍵在於場景或者說研究問題,例如在購物刷單問題中,正確率遠比召回率更重要。

此外可以採用效能度量指標2 ——roc曲線,即接收者操作特徵曲線。

roc曲線給出的是當閾值變化時,假陽率和真陽率之間的變化情況。因此,我們可以通過觀察roc曲線來調節分類器的閾值,使得分類器的效能最好處於roc曲線的左上角。由roc曲線衍生的auc(曲線下的面積)指標給出了分類器的平均效能值。

def plotroc(predstrengths, classlabels):

import matplotlib.pyplot as plt

cur = (1.0,1.0) # current plot node

ysum = 0.0 # for auc

numposclas = sum(numpy.array(classlabels)==1.0)

numnegclas = len(classlabels) - numposclas

ystep = 1/float(numposclas)

xstep = 1/float(numnegclas)

sortedindicies = predstrengths.argsort()

fig = plt.figure()

fig.clf()

ax = plt.subplot(111)

for index in sortedindicies.tolist()[0]:

if classlabels[index] == 1.0:

delx = 0; dely = ystep;

else:

delx = xstep; dely = 0;

ysum += cur[1]

ax.plot([cur[0],cur[0]-delx],[cur[1],cur[1]-dely], c='b')

cur = (cur[0]-delx,cur[1]-dely)

ax.plot([0,1],[0,1],'b--')

plt.xlabel('false positive rate'); plt.ylabel('true positive rate')

plt.title('roc curve for adaboost horse colic detection system')

ax.axis([0,1,0,1])

plt.show()

print "the area under the curve is: ",ysum*xstep

一方面,重構訓練資料集。即不改變已有演算法,而是根據樣本的不同錯分代價給訓練集中的每乙個樣本賦乙個權值,接著按權重對原始樣本集進行重構。

另一方面,引入代價敏感因子,設計出代價敏感的分類演算法。通常可以將各分類器學習時的目標函式改造成最小化代價函式,即對小樣本賦予較高的代價,大樣本賦予較小的代價,期望以此來平衡樣本之間的數目差異。

過抽樣,即保留樣本數目小的類別的所有樣本同時,再進行複製或者進行插值,擴大規模。注意對小樣本數目的類別的樣本們進行插值有可能造成過擬合。

欠抽樣,即欠抽樣或者剔除樣本數目大的類別中的部分樣本,縮小規模。進行剔除時,盡量選擇那些離決策邊界較遠的樣例。

機器學習 非均衡分類問題

在機器學習的分類問題中,我們都假設所有類別的分類代價是一樣的。但是事實上,不同分類的代價是不一樣的,比如我們通過乙個用於檢測患病的系統來檢測馬匹是否能繼續存活,如果我們把能存活的馬匹檢測成患病,那麼這匹馬可能就會被執行安樂死 如果我們把不能存活的馬匹檢測成健康,那麼就會繼續餵養這匹馬。乙個代價是錯殺...

在機器學習中如何應對不均衡分類問題?

在處理機器學習等資料科學問題時,經常會碰到不均衡種類分布的情況,即在樣本資料中乙個或多個種類的觀察值明顯少於其他種類的觀察值的現象。在我們更關心少數類的問題時這個現象會非常突出,例如竊電問題 銀行詐騙 易 罕見病鑑定等。在這種情況下,運用常規的機器學習演算法的 模型可能會無法準確 這是因為機器學習演...

機器學習處理分類問題時的類別均衡問題

舉個例子,在極端情況下,在總體為1000的樣本,若中有999個樣本標記為a類,有1個樣本標記為b類。則很明顯,a類與b類的樣本數偏差極大。一般認為當類別比例超過4 1時,則認為類別不均衡。主要分為以下這兩種方式 1.從資料集入手改變樣本分佈,降低不平衡程度 2.從學習演算法入手,修改演算法來適應不平...