欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣)

 更新時(shí)間:2020年02月29日 09:27:48   作者:泛泛之素  
今天小編就為大家分享一篇python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

何為樣本分布不均:

樣本分布不均衡就是指樣本差異非常大,例如共1000條數(shù)據(jù)樣本的數(shù)據(jù)集中,其中占有10條樣本分類,其特征無(wú)論如何你和也無(wú)法實(shí)現(xiàn)完整特征值的覆蓋,此時(shí)屬于嚴(yán)重的樣本分布不均衡。

為何要解決樣本分布不均:

樣本分部不均衡的數(shù)據(jù)集也是很常見(jiàn)的:比如惡意刷單、黃牛訂單、信用卡欺詐、電力竊電、設(shè)備故障、大企業(yè)客戶流失等。

樣本不均衡將導(dǎo)致樣本量少的分類所包含的特征過(guò)少,很難從中提取規(guī)律,即使得到分類模型,也容易產(chǎn)生過(guò)度依賴于有限的數(shù)量樣本而導(dǎo)致過(guò)擬合問(wèn)題,當(dāng)模型應(yīng)用到新的數(shù)據(jù)上時(shí),模型的準(zhǔn)確性和健壯性將會(huì)很差。

樣本分布不均的解決方法:

過(guò)采樣 通過(guò)增加分類中樣本較少的類別的采樣數(shù)量來(lái)實(shí)現(xiàn)平衡,最直接的方法是簡(jiǎn)單復(fù)制小樣本數(shù)據(jù),缺點(diǎn)是如果特征少,會(huì)導(dǎo)致過(guò)擬合的問(wèn)題。經(jīng)過(guò)改進(jìn)的過(guò)抽樣方法通過(guò)在少數(shù)類中加入隨機(jī)噪聲、干擾數(shù)據(jù)或通過(guò)一定規(guī)則產(chǎn)生新的合成樣本。

欠采樣 通過(guò)減少分類中多數(shù)類樣本的數(shù)量來(lái)實(shí)現(xiàn)樣本均衡,最直接的方法是隨機(jī)去掉一些多數(shù)類樣本來(lái)減小多數(shù)類的規(guī)模,缺點(diǎn)是會(huì)丟失多數(shù)類中的一些重要信息。

設(shè)置權(quán)重 對(duì)不同樣本數(shù)量的類別賦予不同的權(quán)重(通常會(huì)設(shè)置為與樣本量成反比)

集成方法 每次生成訓(xùn)練集時(shí)使用所有分類中的小樣本量,同時(shí)從分類中的大樣本量中隨機(jī)抽取數(shù)據(jù)來(lái)與小樣本量合并構(gòu)成訓(xùn)練集,這樣反復(fù)多次會(huì)得到很多訓(xùn)練集和訓(xùn)練模型。最后在應(yīng)用時(shí),使用組合方法(例如投票、加權(quán)投票等)產(chǎn)生分類預(yù)測(cè)結(jié)果。這種方法類似于隨機(jī)森林。缺點(diǎn)是,比較吃計(jì)算資源,費(fèi)時(shí)。

python代碼:

# 生成不平衡分類數(shù)據(jù)集
from collections import Counter
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=3000, n_features=2, n_informative=2,
              n_redundant=0, n_repeated=0, n_classes=3,
              n_clusters_per_class=1,
              weights=[0.1, 0.05, 0.85],
              class_sep=0.8, random_state=2018)
Counter(y)
# Counter({2: 2532, 1: 163, 0: 305})

# 使用RandomOverSampler從少數(shù)類的樣本中進(jìn)行隨機(jī)采樣來(lái)增加新的樣本使各個(gè)分類均衡
from imblearn.over_sampling import RandomOverSampler
 
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_sample(X, y)
sorted(Counter(y_resampled).items())
# [(0, 2532), (1, 2532), (2, 2532)]

# SMOTE: 對(duì)于少數(shù)類樣本a, 隨機(jī)選擇一個(gè)最近鄰的樣本b, 然后從a與b的連線上隨機(jī)選取一個(gè)點(diǎn)c作為新的少數(shù)類樣本
from imblearn.over_sampling import SMOTE
 
X_resampled_smote, y_resampled_smote = SMOTE().fit_sample(X, y)
 
sorted(Counter(y_resampled_smote).items())
# [(0, 2532), (1, 2532), (2, 2532)]

# ADASYN: 關(guān)注的是在那些基于K最近鄰分類器被錯(cuò)誤分類的原始樣本附近生成新的少數(shù)類樣本
from imblearn.over_sampling import ADASYN

X_resampled_adasyn, y_resampled_adasyn = ADASYN().fit_sample(X, y)
 
sorted(Counter(y_resampled_adasyn).items())
# [(0, 2522), (1, 2520), (2, 2532)]

# RandomUnderSampler函數(shù)是一種快速并十分簡(jiǎn)單的方式來(lái)平衡各個(gè)類別的數(shù)據(jù): 隨機(jī)選取數(shù)據(jù)的子集.
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_sample(X, y)
 
sorted(Counter(y_resampled).items())
# [(0, 163), (1, 163), (2, 163)]

# 在之前的SMOTE方法中, 當(dāng)由邊界的樣本與其他樣本進(jìn)行過(guò)采樣差值時(shí), 很容易生成一些噪音數(shù)據(jù). 因此, 在過(guò)采樣之后需要對(duì)樣本進(jìn)行清洗. 
# 這樣TomekLink 與 EditedNearestNeighbours方法就能實(shí)現(xiàn)上述的要求.
from imblearn.combine import SMOTEENN
smote_enn = SMOTEENN(random_state=0)
X_resampled, y_resampled = smote_enn.fit_sample(X, y)
 
sorted(Counter(y_resampled).items())
# [(0, 2111), (1, 2099), (2, 1893)]

from imblearn.combine import SMOTETomek
smote_tomek = SMOTETomek(random_state=0)
X_resampled, y_resampled = smote_tomek.fit_sample(X, y)
 
sorted(Counter(y_resampled).items())
# [(0, 2412), (1, 2414), (2, 2396)]

# 使用SVM的權(quán)重調(diào)節(jié)處理不均衡樣本 權(quán)重為balanced 意味著權(quán)重為各分類數(shù)據(jù)量的反比
from sklearn.svm import SVC 
svm_model = SVC(class_weight='balanced')
svm_model.fit(X, y)

# # EasyEnsemble 通過(guò)對(duì)原始的數(shù)據(jù)集進(jìn)行隨機(jī)下采樣實(shí)現(xiàn)對(duì)數(shù)據(jù)集進(jìn)行集成.
# EasyEnsemble 有兩個(gè)很重要的參數(shù): (i) n_subsets 控制的是子集的個(gè)數(shù) and (ii) replacement 決定是有放回還是無(wú)放回的隨機(jī)采樣.
from imblearn.ensemble import EasyEnsemble
ee = EasyEnsemble(random_state=0, n_subsets=10)
X_resampled, y_resampled = ee.fit_sample(X, y)
sorted(Counter(y_resampled[0]).items())
# [(0, 163), (1, 163), (2, 163)]

# BalanceCascade(級(jí)聯(lián)平衡)的方法通過(guò)使用分類器(estimator參數(shù))來(lái)確保那些被錯(cuò)分類的樣本在下一次進(jìn)行子集選取的時(shí)候也能被采樣到. 同樣, n_max_subset 參數(shù)控制子集的個(gè)數(shù), 以及可以通過(guò)設(shè)置bootstrap=True來(lái)使用bootstraping(自助法).
from imblearn.ensemble import BalanceCascade
from sklearn.linear_model import LogisticRegression
bc = BalanceCascade(random_state=0,
          estimator=LogisticRegression(random_state=0),
          n_max_subset=4)
X_resampled, y_resampled = bc.fit_sample(X, y)
 
sorted(Counter(y_resampled[0]).items())
# [(0, 163), (1, 163), (2, 163)]

# BalancedBaggingClassifier 允許在訓(xùn)練每個(gè)基學(xué)習(xí)器之前對(duì)每個(gè)子集進(jìn)行重抽樣. 簡(jiǎn)而言之, 該方法結(jié)合了EasyEnsemble采樣器與分類器(如BaggingClassifier)的結(jié)果.
from sklearn.tree import DecisionTreeClassifier
from imblearn.ensemble import BalancedBaggingClassifier
bbc = BalancedBaggingClassifier(base_estimator=DecisionTreeClassifier(),
                ratio='auto',
                replacement=False,
                random_state=0)
bbc.fit(X, y) 

以上這篇python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • PyCharm取消波浪線、下劃線和中劃線的實(shí)現(xiàn)

    PyCharm取消波浪線、下劃線和中劃線的實(shí)現(xiàn)

    這篇文章主要介紹了PyCharm取消波浪線、下劃線和中劃線的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python的virtualenv虛擬環(huán)境常見(jiàn)問(wèn)題和命令

    python的virtualenv虛擬環(huán)境常見(jiàn)問(wèn)題和命令

    在Python中,venv是一個(gè)用于創(chuàng)建和管理虛擬環(huán)境的模塊,虛擬環(huán)境可以幫助你在項(xiàng)目之間隔離不同的Python包和依賴關(guān)系,這篇文章主要介紹了python的virtualenv虛擬環(huán)境常見(jiàn)問(wèn)題和命令,需要的朋友可以參考下
    2024-07-07
  • Jupyter notebook遠(yuǎn)程訪問(wèn)服務(wù)器的方法

    Jupyter notebook遠(yuǎn)程訪問(wèn)服務(wù)器的方法

    今天小編就為大家分享一篇Jupyter notebook遠(yuǎn)程訪問(wèn)服務(wù)器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Matplotlib 折線圖plot()所有用法詳解

    Matplotlib 折線圖plot()所有用法詳解

    這篇文章主要介紹了Matplotlib 折線圖plot()所有用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 為什么python比較流行

    為什么python比較流行

    在本篇文章里小編給大家分析了關(guān)于python比較流行的原因以及優(yōu)勢(shì)等,需要的朋友們可以參考下。
    2020-06-06
  • Python的ini配置文件你了解嗎

    Python的ini配置文件你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python的ini配置文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 攻擊者是如何將PHP Phar包偽裝成圖像以繞過(guò)文件類型檢測(cè)的(推薦)

    攻擊者是如何將PHP Phar包偽裝成圖像以繞過(guò)文件類型檢測(cè)的(推薦)

    這篇文章主要介紹了攻擊者是如何將PHP Phar包偽裝成圖像以繞過(guò)文件類型檢測(cè)的,需要的朋友可以參考下
    2018-10-10
  • python正則表達(dá)式之對(duì)號(hào)入座篇

    python正則表達(dá)式之對(duì)號(hào)入座篇

    正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯
    2018-07-07
  • Python使用CMD模塊更優(yōu)雅的運(yùn)行腳本

    Python使用CMD模塊更優(yōu)雅的運(yùn)行腳本

    這篇文章主要介紹了Python使用CMD模塊更優(yōu)雅的運(yùn)行腳本的方法,實(shí)例分析了Python中cmd模塊的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • python 把列表轉(zhuǎn)化為字符串的方法

    python 把列表轉(zhuǎn)化為字符串的方法

    今天小編就為大家分享一篇python 把列表轉(zhuǎn)化為字符串的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10

最新評(píng)論