對於我的疏忽,我感到抱歉。如果您需要採用平衡二次採樣的方法,請訪問下面的鏈接。有各種答案。來自不平衡數據的分層均衡採樣(機器學習)
Scikit-learn balanced subsampling
我怎樣才能做到從不平衡數據分層抽樣的平衡?
我需要解決40個類的分類問題。這些數據是從13個傳感器實時採集的,其中包括13列(傳感器數量)368816行(簡單來說就像一段時間)。我計劃將數據放入循環神經網絡。
所以,我把它標記爲0到40級。數據屬於0類意味着正常的過程狀態,其他意味着異常狀態和產生問題的地方。
數據由13列368816行組成。每一行意味着每個數據集。每個368816數據集都屬於0到40級。但是,這是不平衡的。數據集屬於0類的數量爲103260個,約佔整個數據集的22%。
數據的數量屬於其他類,1-40,是相似的。
我想從不平衡的數據中取得平衡的樣本數據。例如,如果最小的類有7000個數據,我想採樣7000 * 41(nb類)的數據。
我試圖在scikit-learn包中使用StratifiedShuffleSplit方法。該腳本如下所示。
data=StratifiedShuffleSplit(n_splits=1, test_size=0.3, random_state=99)
data.get_n_splits(x_data,dummy_y) #dummy_y means one-hot encoded y
for train_index, test_index in data.split(x_data,dummy_y):
x_train,x_test=x_data[train_index], x_data[test_index]
y_train,y_test=dummy_y[train_index], dummy_y[test_index]
print("nb of train data:", len(y_train), "nb of test data:", len(y_test))
如果我對採樣邏輯是正確的,nb_train和nb_test的總和應小於368816.因爲我的確從不平衡數據採樣的平衡。
但nb_train是258171和nb_test是110645.
我怎樣才能做到分層抽樣平衡不平衡從數據?我試過Stratified Train/Test-split in scikit-learn的方法。但是,我失敗了。我使用的腳本如下。
x_train,x_test,y_train,y_test=train_test_split(x_data,dummy_y,stratify=y,random_state=99,test_size=0.3)
在其數據結構,你有數據嗎? –
我有13列431116行數據。每一行意味着一個數據集。它是二維矩陣數據。每個數據集都與每個類別標籤相關聯。 –
所以你基本上想要分裂不平衡的數據嗎? –