全國咨詢/投訴熱線:400-618-4000

如何解決分類中解決類別不平衡問題?

更新時間:2020年09月14日11時29分 來源:傳智播客 瀏覽次數:

什么是類別不平衡問題。其實,在現實環境中,采集的數據(建模樣本)往往是比例失衡的。比如網貸數據,逾期人數的比例是極低的(千分之幾的比例);奢侈品消費人群鑒定等。

1、類別不平衡數據集基本介紹

在這一節中,我們一起看一下,當遇到數據類別不平衡的時候,我們該如何處理。在Python中,有Imblearn包,它就是為處理數據比例失衡而生的。

pip3 install imbalanced-learn

第三方包鏈接:https://pypi.org/project/imbalanced-learn/

創造數據集

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt

#使用make_classification生成樣本數據
X, y = make_classification(n_samples=5000
                           n_features=2,  # 特征個數= n_informative() + n_redundant + n_repeated 
                           n_informative=2,  # 多信息特征的個數
                           n_redundant=0,   # 冗余信息,informative特征的隨機線性組合
                           n_repeated=0,  # 重復信息,隨機提取n_informative和n_redundant 特征 
                           n_classes=3,  # 分類類別
                           n_clusters_per_class=1,  # 某一個類別是由幾個cluster構成的
                           weights=[0.010.050.94],  # 列表類型,權重比
                           random_state=0)

查看各個標簽的樣本

#查看各個標簽的樣本量
from collections import Counter
Counter(y)

# Counter({2: 4674, 1: 262, 0: 64})

數據集可視化

# 數據集可視化
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

解決分類不均衡


可以看出樣本的三個標簽中,1,2的樣本量極少,樣本失衡。下面使用imblearn進行過采樣。


接下來,我們就要基于以上數據,進行相應的處理。

關于類別不平衡的問題,主要有兩種處理方式:

過采樣方法

增加數量較少那一類樣本的數量,使得正負樣本比例均衡。

欠采樣方法

減少數量較多那一類樣本的數量,使得正負樣本比例均衡。

2、解決類別不平衡數據方法介紹

2.1 過采樣方法

2.1.1 什么是過采樣方法

對訓練集里的少數類進行“過采樣”(oversampling),即增加一些少數類樣本使得正、反例數目接近,然后再進行學習。

2.1.2 隨機過采樣方法
解決不均衡問題

通過代碼實現隨機過采樣方法:

# 使用imblearn進行隨機過采樣
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
#查看結果
Counter(y_resampled)
#過采樣后樣本結果
# Counter({2: 4674, 1: 4674, 0: 4674})

# 數據集可視化
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()

不平衡02


缺點:

·對于隨機過采樣,由于需要對少數類樣本進行復制來擴大數據集,造成模型訓練復雜度加大。

·另一方面也容易造成模型的過擬合問題,因為隨機過采樣是簡單的對初始樣本進行復制采樣,這就使得學習器學得的規則過于具體化,不利于學習器的泛化性能,造成過擬合問題。

為了解決隨機過采樣中造成模型過擬合問題,又能保證實現數據集均衡的目的,出現了過采樣法代表性的算法SMOTE算法。

2.1.3 過采樣代表性算法-SMOTE

SMOTE全稱是Synthetic Minority Oversampling即合成少數類過采樣技術。

SMOTE算法是對隨機過采樣方法的一個改進算法,由于隨機過采樣方法是直接對少數類進行重采用,會使訓練集中有很多重復的樣本,容易造成產生的模型過擬合問題。而SMOTE算法的基本思想:

不平衡03

不平衡04
不平衡05

代碼實現:

# SMOTE過采樣
from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE().fit_resample(X, y)
Counter(y_resampled)

# 采樣后樣本結果
# [(0, 4674), (1, 4674), (2, 4674)]

# 數據集可視化
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()
不均衡問題6

2.2 欠采樣方法

2.2.1 什么是欠采樣方法

直接對訓練集中多數類樣本進行“欠采樣”(undersampling),即去除一些多數類中的樣本使得正例、反例數目接近,然后再進行學習。

不平衡07

# 隨機欠采樣
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_resample(X, y)
Counter(y_resampled)

# 采樣后結果
[(064), (164), (264)]

# 數據集可視化
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()
不均衡問題8

缺點:

隨機欠采樣方法通過改變多數類樣本比例以達到修改樣本分布的目的,從而使樣本分布較為均衡,但是這也存在一些問題。對于隨機欠采樣,由于采樣的樣本集合要少于原來的樣本集合,因此會造成一些信息缺失,即將多數類樣本刪除有可能會導致分類器丟失有關多數類的重要信息。

官網鏈接:https://imbalanced-learn.readthedocs.io/en/stable/ensemble.html


猜你喜歡:

語言模型-BERT:bert算法介紹

如何成為頂級開源項目的貢獻者

美國限制中國人工智能發展?被限技術傳智播客早已有相關課程在授

人妻系列无码专区_漂亮人妻被中出中文字幕_人妻中文制服巨乳中文