我正在为 11 个标签设计一个多类分类器。我正在SMOTE用来解决采样问题。但是我面临以下错误:-SMOTE 错误from imblearn.over_sampling import SMOTEsm = 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.shapeValueError: Expected n_neighbors <= n_samples, but n_samples = 1, n_neighbors = 6为什么它说我只有 1 个 n_samples?当我为 10 万行(只有 4 个标签)的小得多的数据集尝试相同的代码时,它运行得很好。有关输入的详细信息输入参数X_farray([[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]])输入参数的维度print(X_f.shape, Y_f.shape)(2087620, 31) (2087620, 11)我尝试使用其他imblearn包装技术调试 SMOTE fit_resample() 方法 我知道 SMOTE 通过使用少数数据点的最近邻居之间的欧几里德距离合成少数样本来工作。所以我打印了 ../python3.6/site-packages/sklearn/neighbors/base.py 文件中的 n_samples 变量。它显示样本从 5236 -> 103 -> 3 稳步减少,然后我得到了错误。我不明白发生了什么。使用SVMSMOTE:- 计算时间太长(超过 2 天),并且 PC 崩溃。使用RandomOverSampler:- 模型的准确度很差,为 45%使用不同的sampling_strategy:-minority仅适用于。此处和此处提供的建议也未成功。老实说,我无法理解他们。当我将数据集减少到 100k、1k 和 5k 行时,收到了同样的错误。尽管尝试过,但我还是不太明白。我是采样的新手。你能帮我解决这个问题吗?
2 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
发生此错误是因为数据集中的某些实例太少。例如,在一个 2M 的强大数据集中,只有一个实例具有特定的标签“ ”。
因此,对于这个实例,没有 SMOTE 算法的样本来制作合成副本。仔细检查您的数据集,并确保它干净且可用。
使用删除了不必要的实例 df.where("Label != '���'")
添加回答
举报
0/150
提交
取消
