python數(shù)據(jù)預(yù)處理:樣本分布不均怎么辦-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)python數(shù)據(jù)預(yù)處理 :樣本分布不均怎么辦的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元銅陵做網(wǎng)站,已為上家服務(wù),為銅陵各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

何為樣本分布不均:

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

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

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

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

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

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

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

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

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

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ù)類的樣本中進行隨機采樣來增加新的樣本使各個分類均衡
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: 對于少數(shù)類樣本a, 隨機選擇一個最近鄰的樣本b, 然后從a與b的連線上隨機選取一個點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最近鄰分類器被錯誤分類的原始樣本附近生成新的少數(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ù)是一種快速并十分簡單的方式來平衡各個類別的數(shù)據(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方法中, 當由邊界的樣本與其他樣本進行過采樣差值時, 很容易生成一些噪音數(shù)據(jù). 因此, 在過采樣之后需要對樣本進行清洗. 
# 這樣TomekLink 與 EditedNearestNeighbours方法就能實現(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 通過對原始的數(shù)據(jù)集進行隨機下采樣實現(xiàn)對數(shù)據(jù)集進行集成.
# EasyEnsemble 有兩個很重要的參數(shù): (i) n_subsets 控制的是子集的個數(shù) and (ii) replacement 決定是有放回還是無放回的隨機采樣.
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(級聯(lián)平衡)的方法通過使用分類器(estimator參數(shù))來確保那些被錯分類的樣本在下一次進行子集選取的時候也能被采樣到. 同樣, n_max_subset 參數(shù)控制子集的個數(shù), 以及可以通過設(shè)置bootstrap=True來使用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)練每個基學(xué)習器之前對每個子集進行重抽樣. 簡而言之, 該方法結(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)

感謝各位的閱讀!關(guān)于“python數(shù)據(jù)預(yù)處理 :樣本分布不均怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文題目:python數(shù)據(jù)預(yù)處理:樣本分布不均怎么辦-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article16/heggg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、網(wǎng)站導(dǎo)航網(wǎng)站改版、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司