0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是非均勻數(shù)據(jù)重采樣?哪種非均勻數(shù)據(jù)重采樣方法更適合你?

冬至子 ? 來(lái)源:菜J數(shù)據(jù)分析 ? 作者:菜J數(shù)據(jù)分析 ? 2023-06-20 15:21 ? 次閱讀

在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)領(lǐng)域,我們常常需要處理非均勻數(shù)據(jù)。非均勻數(shù)據(jù)是指具有不平衡分布或樣本數(shù)量不均等的數(shù)據(jù)集。為了準(zhǔn)確建模和預(yù)測(cè),我們需要對(duì)這些非均勻數(shù)據(jù)進(jìn)行重采樣。本文將詳細(xì)介紹什么是非均勻數(shù)據(jù)重采樣以及如何應(yīng)用不同的方法來(lái)解決這一問(wèn)題。

一、什么是非均勻數(shù)據(jù)重采樣?

非均勻數(shù)據(jù)重采樣是一種數(shù)據(jù)處理技術(shù),用于解決數(shù)據(jù)集中存在的類(lèi)別不平衡或樣本數(shù)量不均等的問(wèn)題。在非均勻數(shù)據(jù)中,某些類(lèi)別的樣本數(shù)量很少,而其他類(lèi)別的樣本數(shù)量很多。這種不平衡會(huì)導(dǎo)致建模和預(yù)測(cè)過(guò)程中的偏差,影響結(jié)果的準(zhǔn)確性。

非均勻數(shù)據(jù)重采樣的目標(biāo)是通過(guò)增加少數(shù)類(lèi)別的樣本數(shù)量或減少多數(shù)類(lèi)別的樣本數(shù)量,使得數(shù)據(jù)集更加平衡。通過(guò)重采樣,我們可以在保持?jǐn)?shù)據(jù)分布特征的前提下,增加較少樣本的可用性,從而提高模型的性能。

二、常見(jiàn)的非均勻數(shù)據(jù)重采樣方法和Python示例

(1)過(guò)采樣(Oversampling):過(guò)采樣方法通過(guò)增加少數(shù)類(lèi)別的樣本數(shù)量來(lái)平衡數(shù)據(jù)集。其中一種常見(jiàn)的方法是復(fù)制少數(shù)類(lèi)別的樣本,使其在數(shù)據(jù)集中出現(xiàn)多次。然而,簡(jiǎn)單復(fù)制樣本可能會(huì)導(dǎo)致過(guò)擬合問(wèn)題。因此,一些改進(jìn)的過(guò)采樣方法被提出,如SMOTE(合成少數(shù)類(lèi)過(guò)采樣技術(shù))和ADASYN(自適應(yīng)合成)等,它們根據(jù)少數(shù)類(lèi)別樣本之間的距離關(guān)系合成新的樣本。

使用imbalanced-learn庫(kù)中的RandomOverSampler方法進(jìn)行過(guò)采樣:

from imblearn.over_sampling import RandomOverSampler 
X_resampled, y_resampled = RandomOverSampler().fit_resample(X, y)

使用imbalanced-learn庫(kù)中的SMOTE方法進(jìn)行合成少數(shù)類(lèi)過(guò)采樣:

from imblearn.over_sampling import SMOTE 
X_resampled, y_resampled = SMOTE().fit_resample(X, y)

完整示例:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from imblearn.over_sampling import RandomOverSampler
from sklearn.metrics import classification_report


# 加載數(shù)據(jù)集
data = pd.read_csv('your_dataset.csv')


# 分割特征和目標(biāo)變量
X = data.drop('target', axis=1)
y = data['target']


# 將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


# 方法1.創(chuàng)建RandomOverSampler對(duì)象
ros = RandomOverSampler(random_state=42)
# 對(duì)訓(xùn)練集進(jìn)行過(guò)采樣
X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)


# 方法2創(chuàng)建SMOTE對(duì)象
# smote = SMOTE(random_state=42)
# 對(duì)訓(xùn)練集進(jìn)行過(guò)采樣
# X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train)


# 使用過(guò)采樣后的數(shù)據(jù)訓(xùn)練模型
model = LogisticRegression()
model.fit(X_train_resampled, y_train_resampled)


# 在測(cè)試集上進(jìn)行預(yù)測(cè)
y_pred = model.predict(X_test)


# 輸出分類(lèi)報(bào)告
print(classification_report(y_test, y_pred))

(2)欠采樣(Undersampling):欠采樣方法通過(guò)減少多數(shù)類(lèi)別的樣本數(shù)量來(lái)平衡數(shù)據(jù)集。最簡(jiǎn)單的欠采樣方法是隨機(jī)地刪除多數(shù)類(lèi)別的樣本。然而,這種方法可能會(huì)丟失一些重要的信息。因此,一些更高級(jí)的欠采樣方法被提出,如NearMiss和ClusterCentroids等,它們通過(guò)保留具有代表性的多數(shù)類(lèi)別樣本來(lái)減少樣本數(shù)量。

使用imbalanced-learn庫(kù)中的RandomUnderSampler方法進(jìn)行欠采樣:

from imblearn.under_sampling import RandomUnderSampler 
X_resampled, y_resampled = RandomUnderSampler().fit_resample(X, y)

使用imbalanced-learn庫(kù)中的NearMiss方法進(jìn)行近鄰欠采樣:

from imblearn.under_sampling import NearMiss 
X_resampled, y_resampled = NearMiss().fit_resample(X, y)

(3)混合采樣(Combination Sampling):混合采樣方法是過(guò)采樣和欠采樣的結(jié)合。它同時(shí)對(duì)多數(shù)和少數(shù)類(lèi)別進(jìn)行處理,以達(dá)到數(shù)據(jù)集平衡的效果。其中一種常見(jiàn)的混合

混采樣方法是SMOTEENN(SMOTE + Edited Nearest Neighbors)方法。它首先使用SMOTE方法對(duì)少數(shù)類(lèi)別進(jìn)行過(guò)采樣,生成一些合成樣本。然后,使用Edited Nearest Neighbors(ENN)方法對(duì)多數(shù)類(lèi)別進(jìn)行欠采樣,刪除一些樣本。通過(guò)這種方式,混合采樣方法能夠克服簡(jiǎn)單過(guò)采樣和欠采樣方法的一些問(wèn)題,同時(shí)平衡數(shù)據(jù)集。

使用imbalanced-learn庫(kù)中的SMOTEENN方法進(jìn)行SMOTE + Edited Nearest Neighbors采樣:

from imblearn.combine import SMOTEENN 
X_resampled, y_resampled = SMOTEENN().fit_resample(X, y)

(4)加權(quán)重采樣(Weighted Resampling):加權(quán)重采樣方法通過(guò)為不同類(lèi)別的樣本賦予不同的權(quán)重來(lái)平衡數(shù)據(jù)集。它可以用于訓(xùn)練模型時(shí)調(diào)整樣本的重要性。常見(jiàn)的加權(quán)重采樣方法包括基于頻率的加權(quán)和基于錯(cuò)誤率的加權(quán)?;陬l率的加權(quán)根據(jù)每個(gè)類(lèi)別的樣本數(shù)量設(shè)置權(quán)重,使得樣本數(shù)量少的類(lèi)別具有更高的權(quán)重。基于錯(cuò)誤率的加權(quán)根據(jù)每個(gè)類(lèi)別的錯(cuò)誤率來(lái)調(diào)整權(quán)重,使得錯(cuò)誤率高的類(lèi)別具有更高的權(quán)重。

import torch
from torch.utils.data import DataLoader, WeightedRandomSampler


# 假設(shè)有一個(gè)不均衡的數(shù)據(jù)集,包含10個(gè)樣本和對(duì)應(yīng)的類(lèi)別標(biāo)簽
data = [
    ([1, 2, 3], 0),
    ([4, 5, 6], 1),
    ([7, 8, 9], 1),
    ([10, 11, 12], 0),
    ([13, 14, 15], 1),
    ([16, 17, 18], 0),
    ([19, 20, 21], 1),
    ([22, 23, 24], 0),
    ([25, 26, 27], 1),
    ([28, 29, 30], 1)
]


# 分割特征和目標(biāo)變量
X = [sample[0] for sample in data]
y = [sample[1] for sample in data]


# 創(chuàng)建權(quán)重列表,根據(jù)類(lèi)別進(jìn)行加權(quán)
class_counts = torch.tensor([y.count(0), y.count(1)])
weights = 1.0 / class_counts.float()


# 創(chuàng)建WeightedRandomSampler對(duì)象
sampler = WeightedRandomSampler(weights, len(weights))


# 創(chuàng)建數(shù)據(jù)加載器,使用加權(quán)重采樣
dataset = list(zip(X, y))
dataloader = DataLoader(dataset, batch_size=2, sampler=sampler)


# 遍歷數(shù)據(jù)加載器獲取批次數(shù)據(jù)
for batch_X, batch_y in dataloader:
    print("Batch X:", batch_X)
    print("Batch y:", batch_y)

三、選擇適當(dāng)?shù)闹夭蓸臃椒?/strong>

選擇適當(dāng)?shù)闹夭蓸臃椒ㄐ枰紤]數(shù)據(jù)集的特點(diǎn)和具體問(wèn)題的需求。以下是一些建議:

(1)數(shù)據(jù)分析:在重采樣之前,首先對(duì)數(shù)據(jù)集進(jìn)行分析,了解每個(gè)類(lèi)別的樣本分布情況和特征。這有助于確定哪些類(lèi)別是少數(shù)類(lèi)別,哪些類(lèi)別是多數(shù)類(lèi)別,以及是否存在其他特殊情況(如噪聲數(shù)據(jù))。

(2)重采樣策略:根據(jù)數(shù)據(jù)分析的結(jié)果選擇合適的重采樣策略。如果少數(shù)類(lèi)別的樣本數(shù)量很少,可以考慮過(guò)采樣方法;如果多數(shù)類(lèi)別的樣本數(shù)量較多,可以考慮欠采樣方法;如果兩者都存在問(wèn)題,可以考慮混合采樣方法或加權(quán)重采樣方法。

(3)驗(yàn)證效果:在應(yīng)用重采樣方法后,需要評(píng)估重采樣對(duì)模型性能的影響。可以使用交叉驗(yàn)證或保持獨(dú)立測(cè)試集的方法來(lái)評(píng)估模型的準(zhǔn)確性、召回率、精確度等指標(biāo),并與未經(jīng)過(guò)重采樣的結(jié)果進(jìn)行對(duì)比。

四、總結(jié)

非均勻數(shù)據(jù)重采樣是解決非均勻數(shù)據(jù)集問(wèn)題的重要步驟。通過(guò)過(guò)采樣、欠采樣、混合采樣和加權(quán)重采樣等方法,我們可以調(diào)整數(shù)據(jù)集的分布,提高模型的性能和準(zhǔn)確性。選擇適當(dāng)?shù)闹夭蓸臃椒ㄐ枰跀?shù)據(jù)分析的結(jié)果,并進(jìn)行有效的評(píng)估。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    以遠(yuǎn)場(chǎng)模型(平面波)為例,講解時(shí)空采樣定理!

    可以看出均勻線(xiàn)陣的相位無(wú)模糊對(duì)應(yīng)時(shí)域均勻采樣的奈奎斯特定理。多說(shuō)一句,如果是非均勻線(xiàn)陣、圓陣等形式,可以理解成對(duì)應(yīng)維度的
    的頭像 發(fā)表于 09-30 07:16 ?7208次閱讀
    以遠(yuǎn)場(chǎng)模型(平面波)為例,講解時(shí)空<b class='flag-5'>采樣</b>定理!

    labview能否對(duì)均勻采樣數(shù)據(jù)進(jìn)行處理

    labview能不能恢復(fù)均勻采樣數(shù)據(jù)的波形,進(jìn)而對(duì)其進(jìn)行頻譜測(cè)量、FFT?
    發(fā)表于 01-15 13:31

    如何實(shí)現(xiàn)均勻采樣

    用NI數(shù)據(jù)采集卡,如何用LabVIEW進(jìn)行均勻采樣,并且對(duì)所得到的數(shù)據(jù)進(jìn)行運(yùn)算~請(qǐng)高手指點(diǎn)
    發(fā)表于 04-16 20:26

    labview 等角度采樣

    振動(dòng)數(shù)據(jù),想實(shí)現(xiàn)從等時(shí)間間隔采樣到等角度采樣,labview怎樣實(shí)現(xiàn)等角度采樣,有具體算法嗎?謝謝啦,聲音與振動(dòng)的工具包我也下了。
    發(fā)表于 04-20 22:47

    請(qǐng)問(wèn)PSpice仿真瞬態(tài)分析Transient如何設(shè)置輸出的Excel文件的采樣時(shí)刻為均勻采樣時(shí)刻?

    every: 1u s,但是導(dǎo)出的Excel文件發(fā)現(xiàn)采樣時(shí)刻之間的間隔并不是嚴(yán)格的1us,請(qǐng)問(wèn)怎么才能設(shè)置輸出文件的時(shí)間點(diǎn)是均勻的?設(shè)置界面:采樣時(shí)間點(diǎn)數(shù)據(jù)畫(huà)的圖:
    發(fā)表于 03-03 12:58

    關(guān)于labview中xy圖中波形采樣的問(wèn)題

    比如在xy圖中顯示歷史數(shù)據(jù)五萬(wàn)個(gè)點(diǎn),但是由于數(shù)據(jù)量過(guò)大,在設(shè)置游標(biāo)的過(guò)程中會(huì)出現(xiàn)卡頓,因此想到了利用采樣方法,整體范圍顯示大間隔
    發(fā)表于 08-06 16:17

    請(qǐng)問(wèn)怎么利用單片機(jī)io口實(shí)現(xiàn)均勻采樣

    怎么利用單片機(jī)io口實(shí)現(xiàn)均勻采樣?
    發(fā)表于 10-19 07:47

    均勻采樣的頻譜研究

    均勻采樣的一個(gè)很大的優(yōu)點(diǎn)就是它具有抗頻率混疊的性能[ ],首先從均勻采樣討論由采樣而引起的頻譜
    發(fā)表于 03-13 16:18 ?18次下載
    <b class='flag-5'>非</b><b class='flag-5'>均勻</b><b class='flag-5'>采樣</b>的頻譜研究

    基于采樣技術(shù)改進(jìn)的粒子濾波算法

    基于采樣技術(shù)改進(jìn)的粒子濾波算法_李小婷
    發(fā)表于 01-07 20:49 ?1次下載

    一種新的均勻采樣信號(hào)的離散傅里葉變換方法

    針對(duì)偽隨機(jī)(PN)碼調(diào)制的多普勒激光雷達(dá)中固有的對(duì)外差信號(hào)不能等間隔采樣的問(wèn)題,提出一種新的均勻采樣信號(hào)的離散傅里葉變換(DFT)方法。首
    發(fā)表于 12-23 11:40 ?0次下載
    一種新的<b class='flag-5'>非</b><b class='flag-5'>均勻</b><b class='flag-5'>采樣</b>信號(hào)的離散傅里葉變換<b class='flag-5'>方法</b>

    如何使用概率模型進(jìn)行均勻數(shù)據(jù)聚類(lèi)算法的設(shè)計(jì)介紹

    針對(duì)傳統(tǒng)K-means型算法的“均勻效應(yīng)”問(wèn)題,提出一種基于概率模型的聚類(lèi)算法。首先,提出一個(gè)描述均勻數(shù)據(jù)簇的高斯混合分布模型,該模型允許數(shù)據(jù)
    發(fā)表于 12-13 10:57 ?10次下載

    空間曲線(xiàn)基于內(nèi)在幾何量的均勻采樣方法

    為解決均勻參數(shù)采樣在許多情況下得到質(zhì)量不高的采樣點(diǎn),進(jìn)而生成不理想的B樣條擬合曲線(xiàn),提出空間曲線(xiàn)基于內(nèi)在幾何量的均勻采樣
    發(fā)表于 04-22 11:34 ?4次下載
    空間曲線(xiàn)基于內(nèi)在幾何量的<b class='flag-5'>均勻</b><b class='flag-5'>采樣</b><b class='flag-5'>方法</b>

    一種空間曲線(xiàn)基于內(nèi)在幾何量的均勻采樣方法

    為解決均勻參數(shù)采樣在許多情況下得到質(zhì)量不高的采樣點(diǎn),進(jìn)而生成不理想的B樣條擬合曲線(xiàn),提出空間曲線(xiàn)基于內(nèi)在幾何量的均勻采樣
    發(fā)表于 04-29 14:11 ?7次下載
    一種空間曲線(xiàn)基于內(nèi)在幾何量的<b class='flag-5'>均勻</b><b class='flag-5'>采樣</b><b class='flag-5'>方法</b>

    任意采樣濾波器設(shè)計(jì)應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《任意采樣濾波器設(shè)計(jì)應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 14:31 ?0次下載
    任意<b class='flag-5'>重</b><b class='flag-5'>采樣</b>濾波器設(shè)計(jì)應(yīng)用說(shuō)明

    為什么采樣很重要?Pandas中重新采樣的關(guān)鍵問(wèn)題解析

    采樣是時(shí)間序列分析中處理時(shí)序數(shù)據(jù)的一項(xiàng)基本技術(shù)。它是關(guān)于將時(shí)間序列數(shù)據(jù)從一個(gè)頻率轉(zhuǎn)換到另一個(gè)頻率,它可以更改數(shù)據(jù)的時(shí)間間隔,通過(guò)上
    的頭像 發(fā)表于 09-19 17:06 ?2142次閱讀
    為什么<b class='flag-5'>重</b><b class='flag-5'>采樣</b>很重要?Pandas中重新<b class='flag-5'>采樣</b>的關(guān)鍵問(wèn)題解析