【发布时间】:2018-12-21 16:23:53
【问题描述】:
我正在尝试在 Python 中使用 imblearn 包中的 SMOTE,但我的数据有很多缺失值,并且出现以下错误:
ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。
查了here的参数,好像没有处理缺失值的。
有没有办法生成缺失值的合成样本?
【问题讨论】:
标签: python scikit-learn imblearn
我正在尝试在 Python 中使用 imblearn 包中的 SMOTE,但我的数据有很多缺失值,并且出现以下错误:
ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。
查了here的参数,好像没有处理缺失值的。
有没有办法生成缺失值的合成样本?
【问题讨论】:
标签: python scikit-learn imblearn
一个简单的例子如下:
# 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 值。您需要将它们填满,然后进行 SMOTE 分析。处理缺失值完全是一项不同的任务,您可以从 sklearn 开始查看Imputer。这是关于缺失值的另一篇关于 sklearn 的文章:Imputing missing values
完成对 NaN 值的处理后,将修改后的数据提供给 SMOTE。
参考文献
【讨论】: