Python 如何固定样本<;使用SMOTE进行过采样时的K-邻域错误?

Python 如何固定样本<;使用SMOTE进行过采样时的K-邻域错误?,python,machine-learning,classification,oversampling,imblearn,Python,Machine Learning,Classification,Oversampling,Imblearn,我正在为11个标签设计一个多类分类器。我正在使用SMOTE解决采样问题。然而,我面临以下错误:- 斯穆特错误 错误 尤夫 输入参数的维数 我尝试使用imblearnpackage的其他技术 调试SMOTE fit_resample()方法我知道SMOTE的工作原理是利用少数数据点最近邻之间的欧几里德距离合成少数样本。因此,我在../python3.6/site-packages/sklearn/neights/base.py文件中打印了n_samples变量。它显示样本从5236->103->3

我正在为11个标签设计一个多类分类器。我正在使用
SMOTE
解决采样问题。然而,我面临以下错误:-

斯穆特错误 错误 尤夫

输入参数的维数 我尝试使用
imblearn
package的其他技术 调试SMOTE fit_resample()方法我知道SMOTE的工作原理是利用少数数据点最近邻之间的欧几里德距离合成少数样本。因此,我在../python3.6/site-packages/sklearn/neights/base.py文件中打印了n_samples变量。它显示样本从5236->103->3稳步减少,然后我得到了误差。我不明白发生了什么事

  • 使用
    svmsnote
    :-计算时间过长(超过2天),电脑会崩溃
  • 使用
    随机过采样器
    :-模型的准确率很低,为45%
  • 使用不同的
    采样策略
    :-仅适用于
    少数群体
  • 还有所提供的建议,但未成功。老实说,我不能理解他们
  • 当我将数据集减少到100k、1k和5k行时,收到了相同的错误

  • 尽管尝试过,我还是不太明白。我是个采样新手。你能帮我解决这个问题吗?

    我今天遇到了类似的问题。当我增加数据集的行数时,问题得到了解决。 我第一次尝试使用n_rows=1000的子样本,当我更改为n_rows=5000时,不再出现错误


    由于数据集的输入大小非常大,您可能会发现在应用IMBRearn之前减小数据集的大小非常有用。事实上,您将在web上找到两个实验,证明存在一个数据集长度阈值,而分类器并没有显著提高其性能。这些实验之一

    发生此错误是因为数据集中的某些实例太少。例如,在一个2M数据集中,只有一个实例具有特定的标签,”���".

    因此,在本例中,SMOTE算法没有可用于制作合成副本的样本。请仔细检查数据集,并确保其干净且可用


    使用
    df.where(“Label!=”删除了不必要的实例���'“

    也许这是IMBRearn中的一个bug?
    from imblearn.over_sampling import SMOTE
    sm = SMOTE(random_state=42)
    X_res, Y_res = sm.fit_sample(X_f, Y_f)
    
    ~/.local/lib/python3.6/site-packages/sklearn/neighbors/base.py in kneighbors(self, X, n_neighbors, return_distance)
        414                 "Expected n_neighbors <= n_samples, "
        415                 " but n_samples = %d, n_neighbors = %d" %
    --> 416                 (train_size, n_neighbors)
        417             )
        418         n_samples, _ = X.shape
    
    ValueError: Expected n_neighbors <= n_samples,  but n_samples = 1, n_neighbors = 6
    
    array([[1.43347000e+05, 1.00000000e+00, 2.03869492e+03, ...,
            1.00000000e+00, 1.00000000e+00, 1.35233019e+03],
           [5.09050000e+04, 0.00000000e+00, 0.00000000e+00, ...,
            5.09050000e+04, 0.00000000e+00, 5.09050000e+04],
           [1.43899000e+05, 2.00000000e+00, 2.11447368e+03, ...,
            1.00000000e+00, 2.00000000e+00, 1.39707767e+03],
           ...,
           [8.50000000e+01, 0.00000000e+00, 0.00000000e+00, ...,
            8.50000000e+01, 0.00000000e+00, 8.50000000e+01],
           [2.33000000e+02, 4.00000000e+00, 4.90000000e+01, ...,
            4.00000000e+00, 4.00000000e+00, 7.76666667e+01],
           [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
            0.00000000e+00, 0.00000000e+00, 0.00000000e+00]])
    
    array([[1., 0., 0., ..., 0., 0., 0.],
           [1., 0., 0., ..., 0., 0., 0.],
           [1., 0., 0., ..., 0., 0., 0.],
           ...,
           [1., 0., 0., ..., 0., 0., 0.],
           [1., 0., 0., ..., 0., 0., 0.],
           [0., 0., 0., ..., 0., 0., 1.]])
    
    print(X_f.shape, Y_f.shape)
    (2087620, 31) (2087620, 11)