SMOTE 值错误

Pyt*_*ner 1 python machine-learning

我正在使用 SMOTE 函数对包含大约 98% 0s 和 2% 1s 的稀疏数据集进行过采样。我使用了以下代码

from imblearn.over_sampling import SMOTE
import os
import pandas as pd
df_input= pd.read_csv('input_tr.csv',index_col=0) 
train_X=df_input.ix[:, df_input.columns != 'row_num']
df_output=pd.read_csv("output_tr.csv",index_col=0)
train_y=df_output
sm = SMOTE(random_state=12, ratio = 1.0)
train_X_sm,train_y_sm=sm.fit_sample(train_X,train_y)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

line 347, in kneighbors
(train_size, n_neighbors)
ValueError: Expected n_neighbors <= n_samples,  but n_samples = 4, n_neighbors = 6
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个错误吗?

And*_*ujo 7

我有一个类似的问题。

SMOTE 基于KNN 算法,因此您需要最少数量的样本来创建此子集的新实例。

例如:

  • 如果你试图预测的是一个整数值,类别 1, 2, 3,并且假设你只有 2 个类别 1 的样本,如何获得 k-3 个邻居?将是不可能的。太不平衡了!!

该消息非常清楚:

预期 n_neighbors <= n_samples。

因此,您需要比邻居拥有更多或等于SAMPLES,才能创建新实例。

我看看你的数据集,你只有 4 个 OUTPUT 1 的样本。所以,消息说你只有 4 个,但我需要 6 个邻居来创建它们的新实例。