【问题标题】:SMOTE Value ErrorSMOTE 值错误
【发布时间】:2020-04-27 19:58:47
【问题描述】:

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

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

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

【问题讨论】:

标签: python machine-learning


【解决方案1】:

我有一个类似的问题。

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

例如:

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

信息很清楚:

预期的 n_neighbors

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

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

【讨论】:

    【解决方案2】:

    这基本上是一个不允许使用 KNN 的不平衡数据集的问题。

    如果对于实例,您将拥有一个只有一个实例的类,您将无法计算 SMOTE,因为您将收到以下错误: 预期 n_neighbors

    这基本上意味着单个实例没有任何邻居可用于过采样。

    • 解决方案是改用另一种技术 - 例如 RandomOversampling(即使每个类有一个实例也没有问题)。
    • 或者选择删除实例太少的类。
    • 或者,为 k 指定除默认值之外的另一个值: k = 1 #邻居数 sm = SMOTE(k_neighbors=k, random_state=seed)

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2018-12-21
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2022-08-15
      相关资源
      最近更新 更多