<tbody id="fuft6"><noscript id="fuft6"><video id="fuft6"></video></noscript></tbody>
    <tbody id="fuft6"><noscript id="fuft6"></noscript></tbody>
    <em id="fuft6"><acronym id="fuft6"></acronym></em>
          <button id="fuft6"><acronym id="fuft6"><u id="fuft6"></u></acronym></button>
          首頁人工智能技術資訊正文

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

          更新時間:2020-09-14 來源:黑馬程序員 瀏覽量:

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

          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

          猜你喜歡:

          python人工智能之人臉識別綜合應用與實踐

          傳智播客與百度云智學院達成人工智能&大數據課程共建合作

          人工智能之如何使用Python集合

          在線咨詢 我要報名
          和我們在線交談!

          黄色网站片

          <tbody id="fuft6"><noscript id="fuft6"><video id="fuft6"></video></noscript></tbody>
            <tbody id="fuft6"><noscript id="fuft6"></noscript></tbody>
            <em id="fuft6"><acronym id="fuft6"></acronym></em>
                  <button id="fuft6"><acronym id="fuft6"><u id="fuft6"></u></acronym></button>