使用Python實現(xiàn)數(shù)據(jù)重采樣的示例代碼
什么是數(shù)據(jù)重采樣
數(shù)據(jù)重采樣是一種用于調(diào)整數(shù)據(jù)集大小或分布的技術(shù)。它涉及通過增加或減少數(shù)據(jù)點(diǎn)的數(shù)量來修改現(xiàn)有數(shù)據(jù)集。數(shù)據(jù)重采樣主要用于解決類不平衡等問題,其中一個類的樣本明顯少于另一個類,或者為訓(xùn)練機(jī)器學(xué)習(xí)模型準(zhǔn)備數(shù)據(jù)。
以下是數(shù)據(jù)重采樣的一些方法:
類不平衡校正:它有助于糾正分類任務(wù)中的類不平衡問題。它確保每個類在數(shù)據(jù)集中有適當(dāng)?shù)谋硎荆乐鼓P推蚨鄶?shù)類。
模型訓(xùn)練和驗證:重采樣技術(shù)可以幫助確保模型在具有均衡類分布的數(shù)據(jù)集上進(jìn)行訓(xùn)練和驗證。它導(dǎo)致更可靠和無偏見的模型評估。
增強(qiáng)泛化:它可以通過提供更多的學(xué)習(xí)示例來提高模型泛化到新的、看不見的數(shù)據(jù)的能力,特別是對于代表性不足的類。
數(shù)據(jù)重采樣技術(shù)
重采樣有兩種主要技術(shù):
- 過采樣
- 欠采樣
過采樣包括:
隨機(jī)過采樣:在該方法中,少數(shù)類的隨機(jī)實例被復(fù)制以匹配多數(shù)類中的實例的數(shù)量。雖然簡單,但它可能導(dǎo)致過擬合。
SMOTE(合成少數(shù)過采樣技術(shù)):SMOTE通過在現(xiàn)有實例之間插值來生成少數(shù)類的合成樣本。它創(chuàng)建新的數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)是特征空間中相鄰數(shù)據(jù)點(diǎn)的組合。
ADASYN(自適應(yīng)合成采樣):ADASYN是SMOTE的擴(kuò)展,專注于通過賦予它們更多權(quán)重來為難以學(xué)習(xí)的實例生成合成樣本。
欠采樣包括:
隨機(jī)欠采樣:從多數(shù)類中隨機(jī)刪除實例,以匹配少數(shù)類中的實例數(shù)。如果刪除的實例太多,可能會導(dǎo)致信息丟失。
簇質(zhì)心:該方法識別多數(shù)類中的聚類并將其替換為聚類的質(zhì)心,有效地減少了多數(shù)類中的實例數(shù)量。
使用Python進(jìn)行數(shù)據(jù)重采樣
現(xiàn)在,讓我們看看如何通過實現(xiàn)數(shù)據(jù)重采樣技術(shù),使用Python對數(shù)據(jù)集進(jìn)行重采樣。
首先創(chuàng)建一個不平衡的數(shù)據(jù)集,然后實現(xiàn)SMOTE來重新采樣數(shù)據(jù),將其轉(zhuǎn)換為平衡的數(shù)據(jù)集。
import numpy as np import pandas as pd # Install imbalanced-learn using: pip install imbalanced-learn from imblearn.over_sampling import SMOTE # Create a sample imbalanced dataset with two classes (0 and 1) np.random.seed(42) X = np.random.rand(100, 2) y = np.array([0] * 90 + [1] * 10) # Apply SMOTE to generate synthetic samples for the minority class smote = SMOTE(sampling_strategy='auto') X_resampled, y_resampled = smote.fit_resample(X, y) # Print the class distribution after SMOTE print("Class Distribution after SMOTE:") print(pd.Series(y_resampled).value_counts())
輸出
Class Distribution after SMOTE:
0 90
1 90
dtype: int64
在這段代碼中,我們創(chuàng)建了一個帶有兩個類(0和1)的示例不平衡數(shù)據(jù)集。然后,我們應(yīng)用來自不平衡學(xué)習(xí)庫的SMOTE為少數(shù)類生成合成樣本。sampling_strategy參數(shù)設(shè)置為auto,這確保創(chuàng)建的合成樣本數(shù)等于大多數(shù)類中的樣本數(shù),從而平衡類分布。
總結(jié)
因此,數(shù)據(jù)重采樣是一種用于調(diào)整數(shù)據(jù)集大小或分布的技術(shù)。它涉及通過增加或減少數(shù)據(jù)點(diǎn)的數(shù)量來修改現(xiàn)有數(shù)據(jù)集。重采樣主要用于解決類不平衡等問題,其中一個類的樣本明顯少于另一個類,或者為訓(xùn)練機(jī)器學(xué)習(xí)模型準(zhǔn)備數(shù)據(jù)集。
到此這篇關(guān)于使用Python實現(xiàn)數(shù)據(jù)重采樣的示例代碼的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)重采樣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一個Python優(yōu)雅的數(shù)據(jù)分塊方法詳解
在做需求過程中有一個對大量數(shù)據(jù)分塊處理的場景,具體來說就是幾十萬量級的數(shù)據(jù),分批處理,每次處理100個。這時就需要一個分塊功能的代碼。本文為大家分享了一個Python中優(yōu)雅的數(shù)據(jù)分塊方法,需要的可以參考一下2022-05-05使用python 計算百分位數(shù)實現(xiàn)數(shù)據(jù)分箱代碼
這篇文章主要介紹了使用python 計算百分位數(shù)實現(xiàn)數(shù)據(jù)分箱代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python實現(xiàn)比對美團(tuán)接口返回數(shù)據(jù)和本地mongo數(shù)據(jù)是否一致示例
這篇文章主要介紹了python實現(xiàn)比對美團(tuán)接口返回數(shù)據(jù)和本地mongo數(shù)據(jù)是否一致,涉及Python基于requests模塊的數(shù)據(jù)請求與比較運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-08-08Python實現(xiàn)byte轉(zhuǎn)integer
這篇文章主要介紹了Python實現(xiàn)byte轉(zhuǎn)integer操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Python callable內(nèi)置函數(shù)原理解析
這篇文章主要介紹了Python callable內(nèi)置函數(shù)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03Python利用matplotlib繪制散點(diǎn)圖的新手教程
這篇文章主要給大家介紹了關(guān)于Python利用matplotlib繪制散點(diǎn)圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11