缺少值的SMOTE

时间:2018-07-13 09:58:43

标签: python scikit-learn imblearn

我正在尝试使用Python中imblearn包中的SMOTE,但是我的数据缺少很多值,并且出现以下错误:

  

ValueError:输入包含NaN,无穷大或对于dtype('float64')而言太大的值。

我检查了参数here,似乎没有一个处理缺失值。

是否可以生成缺少值的合成样本?

2 个答案:

答案 0 :(得分:2)

SMOTE不会填充您的缺失值或NaN值。您需要填充它们,然后进行SMOTE分析。处理缺失值是完全不同的任务,您可以从sklearn开始查看Imputer。这是关于sklearn的另一个有关缺失值的文章:Imputing missing values

处理完NaN值后,将修改后的数据输入SMOTE

参考

答案 1 :(得分:0)

以下是一个简单的示例:

# 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()))