我正在使用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)


我收到以下错误

line 347, in kneighbors
(train_size, n_neighbors)
ValueError: Expected n_neighbors <= n_samples,  but n_samples = 4, n_neighbors = 6


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

最佳答案

我有一个类似的问题。

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

例如:


如果您尝试预测的是1、2、3类的整数,并假设您只有2个1类样本,那么如何获得k-3个邻居?将是不可能的。太不平衡了!!


消息很清楚:


  预期的n_neighbors

因此,您需要拥有比邻居更多或相等的SAMPLES来创建新实例。

我看一下您的数据集,您只有4个OUTPUT 1样本。因此,消息说您只有4个,但是我需要6个邻居来创建它们的新实例。

关于python - SMOTE值错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45943335/

10-12 19:35