我正在尝试使用Python中imblearn
包中的SMOTE,但是我的数据缺少很多值,并且出现以下错误:
ValueError:输入包含NaN,无穷大或对于dtype('float64')而言太大的值。
我检查了参数here,似乎没有一个处理缺失值。
是否可以生成缺少值的合成样本?
答案 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()))