具有缺失值的SMOTE

5
我尝试在Python中使用imblearn包中的SMOTE,但我的数据有很多缺失值,导致出现以下错误:

ValueError: 输入包含 NaN、无穷大或太大的值 dtype('float64')。

我查看了这里的参数,似乎没有处理缺失值的参数。

是否有一种方法可以生成带有缺失值的合成样本呢?
2个回答

4

1
Xgboost和lighgbm可以拟合带有缺失值的数据,因此我认为即使存在缺失值,也可能生成一些合成数据。也许不是SMOTE,但我直觉上认为可能有其他方法。感谢您的回答! - MJeremy

-1
一个简单的例子如下所示:
# Imports
from collections import Counter
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import Imputer
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import make_pipeline

# Load data
bc = load_breast_cancer()
X, y = bc.data, bc.target

# Initial number of samples per class
print('Number of samples for both classes: {} and {}.'.format(*Counter(y).values()))

# SMOTEd class distribution
print('Dataset has %s missing values.' % np.isnan(X).sum())
_, y_resampled = SMOTE().fit_sample(X, y)
print('Number of samples for both classes: {} and {}.'.format(*Counter(y_resampled).values()))

# Generate artificial missing values
X[X > 1.0] = np.nan
print('Dataset has %s missing values.' % np.isnan(X).sum())
_, y_resampled = make_pipeline(Imputer(), SMOTE()).fit_sample(X, y)
print('Number of samples for both classes: {} and {}.'.format(*Counter(y_resampled).values()))

似乎SMOTE无法处理NaN值。 ValueError:输入包含NaN、无穷大或dtype('float64')太大的值。 - Anuj Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接