weka分類器怎麼設定類別 類別不均衡問題

2021-10-11 02:38:12 字數 3018 閱讀 5412

類別不均衡就是指分類任務中不同類別的訓練樣例數目差別很大的情況。

一、應用場景

二、演算法

如果不同類別的訓練樣例數目稍有差別,通常影響不大,但若差別很大,則會對學習過程造成困擾。例如有998個反例,2個正例,那麼學習方法只需要返回乙個永遠將新樣本**為反例的學習器,就能達到99.8%的精度。但是這樣的學習器毫無價值。

下面介紹幾種解決類別不均衡問題的演算法。不失一般性,假設正類樣例較少,反類樣例較多。

1、欠取樣:去除一些反例使得正反例數目接近。

欠取樣的缺點是最終的訓練集丟失了資料,模型只學到了總體模式的一部分。

1)easyensemble

easyensemble是通過多次從多數類樣本有放回的隨機抽取一部分樣本生成多個子資料集,將每個子集與少數類資料聯合起來進行訓練生成多個模型,然後集合多個模型的結果進行判斷。這種方法看起來和隨機森林的原理很相似。

2)balancecascade

balancecascade是通過一次隨機欠取樣產生訓練集,訓練乙個分類器,對於那些分類正確的多數類樣本不放回,然後對這個剩下的多數類樣本再次進行欠取樣產生第二個訓練集,訓練第二個分類器,同樣把分類正確的樣本不放回,以此類推,直到滿足某個停止條件,最終的模型也是多個分類器的組合。

3)基於knn欠取樣

2、過取樣:增加一些正例使得正反例數目接近。

過取樣後的資料集中會反覆出現一些樣本,訓練出來的模型會有一定的過擬合。

1)smote

smote演算法是通過對訓練集中的少數類樣本進行插值來產生額外的樣本。smote 演算法是利用特徵空間中現存少數類樣本之間的相似性來建立人工資料的,也可以認為smote演算法假設了在相距較近的少數類樣本之間的樣本仍然是少數類。

具體過程如下:

該演算法主要存在兩方面的問題:一是在近鄰選擇時,存在一定的盲目性。從上面的演算法流程可以看出,在演算法執行過程中,需要確定k值,即選擇多少個近鄰樣本,這需要使用者自行解決。如何確定k值,才能使演算法達到最優這是未知的。

另外,該演算法無法克服非平衡資料集的資料分布問題,容易產生分布邊緣化問題。由於正樣本的分布決定了其可選擇的近鄰,如果乙個正樣本處在正樣本集的分布邊緣,則由此正樣本和相鄰樣本產生的「人造」樣本也會處在這個邊緣,且會越來越邊緣化,從而模糊了正類樣本和負類樣本的邊界,而且使邊界變得越來越模糊。這種邊界模糊性,雖然使資料集的平衡性得到了改善,但加大了分類演算法進行分類的難度.

2)borderline-smote演算法

smote 演算法對於每個原少數類樣本產生相同數量的合成資料樣本,而沒有考慮其鄰近樣本的分布特點,這就使得類間發生重複的可能性加大。

borderline-smote與原始smote不同的地方在於,原始的smote是對所有少數類樣本生成新樣本。而改進的方法則是先根據規則判斷出少數類的邊界樣本,再對這些樣本生成新樣本。

判斷邊界的乙個簡單的規則為:k近鄰中有一半以上多數類樣本的少數類為邊界樣本。直觀地講,只為那些周圍大部分是多數類樣本的少數類樣本生成新樣本。

假設a為少數類中的乙個樣本,此時少數類的樣本分為三類:

(i) 噪音樣本(noise), 該少數類的所有最近鄰樣本都來自於不同於樣本a的其他類別:

(ii) 危險樣本(in danger), 至少一半的最近鄰樣本來自於同一類(不同於a的類別);

(iii) 安全樣本(safe), 最近鄰樣本中,大多都來自於同乙個類。

因此,僅僅為危險樣本(邊界樣本)生成新樣本。

3)adasyn

adasyn名為自適應合成抽樣(adaptive synthetic sampling),其最大的特點是採用某種機制自動決定每個少數類樣本需要產生多少合成樣本,而不是像smote那樣對每個少數類樣本合成同數量的樣本。

adasyn為每個少數類樣本施加了乙個權重,周圍的多數類樣本越多則權重越高。adasyn的缺點是易受離群點的影響,如果乙個少數類樣本的k近鄰都是多數類樣本,則其權重會變得相當大,進而會在其周圍生成較多的樣本。

4)基於聚類的過取樣方法

以二分類為例,該方法是首先分別對正負例進行聚類,在聚類之後進行再進行上述的過取樣方法。

例如:有乙個二分類資料集,其正負模擬例為:1000:50。首先通過kmeans演算法對正負類分別聚類,得到正類:600,300,100;負類:30,20。然後使用過取樣的方法分別對所有類別進行過取樣得到正類:600,600,600;對於負類的上取樣個數為:(600+600+600)/2 = 900,即負類為:900,900。最終得到的資料集為正類1800,負類1800。

基於聚類的過取樣方法的優點是不僅可以解決類間不平衡問題,而且還能解決類內部不平衡問題。

3、閾值移動

常在乙個二分類的問題中,我們經常將0.5作為**結果的分類標準,比如將**概率大於0.5分為a類,**概率小於0.5分為b類,這裡的0.5就是分類閾值。

在二分類問題中,假如**乙個樣本為a的概率為p,那麼它為b的概率為1-p,而p/(1-p)表示兩類可能性的比,即機率(odds),或稱為優勢比。如果p/(1-p)>1,我們認為該樣本是a類的機率大於b。然而,在乙個資料集中正負樣本比例不相同時,此時會有乙個觀測機率,假設在資料集中有m個a樣本,n個b樣本,那麼觀測機率為m/n(樣本均衡的情況下觀測機率為1)。

在演算法分類過程中,如果**機率p/(1-p)大於實際的觀測機率m/n,此時我們才把樣本分類為a,而不是以0.5作為分類閾值(樣本均衡情況下以0.5作為閾值)

用公式表示:p/(1-p)>m/n

計算結果得到p>m/(m+n)

此時只有當p大於m/(m+n)時,**結果為a類,這裡m/(m+n) 取代0.5成為新的分類閾值。

借助以上的原理,在分類學習中面對樣本不均衡時,我們可以採用原有不均衡的樣本進行學習,然後通過改變決策規則來做分類,比如在樣本均衡時我們0.5作為分類閾值,而在樣本不均衡的情況下我們可以規定**概率需要達到0.8才能被**為多數類。

三、實現

在**實現方面,可以使用第三方庫imblearn實現不平衡樣本的樣本均衡問題。

迭代器類別

輸入迭代器 可以讀取序列中的元素。乙個輸入迭代器必須支援 1 用於比較兩個迭代器的相等和不相等運算子 2 用於推進迭代器的前置和後置遞增運算子 3 用於讀取元素的解引用運算子 解引用只會出現在賦值運算子的右側 4 箭頭運算子 解引用迭代器,並提取物件的成員 輸出迭代器 可以看作輸入迭代器功能上的補集...

類別(分類)和 類拓展

一 分類 類別 作用 擴充套件已有類的功能 1 分類是原來的類增加方法 2 在方法內部可以訪問原有類的成員變數 定義標頭檔案中 步驟 1 為原有類建立乙個分類 2 在分類中增加新的方法的宣告和實現 注意點 1 分類中不能擴充套件原有類的成員變數 2 property在分類中只能生成getter se...

邏輯回歸 多類別分類

多分類問題 二分類問題的示意圖如下 多分類問題如下 生成三個假的資料集 定義乙個函式 h theta right left x right p left right 處理過的資料集就是二分類問題,通過邏輯回歸可能得到紅線區分不同類別 同理 定義函式 定義函式 h theta right left x...