Как заставить SVM хорошо играть с отсутствующими данными в scikit-learn?
Я использую scikit-learn для некоторого анализа данных, и у моего набора данных есть некоторые недостающие значения (представленные NA
). Я загружаю данные с помощью genfromtxt
с помощью dtype='f8'
и продолжаю обучение моему классификатору.
Классификация прекрасна на объектах RandomForestClassifier
и GradientBoostingClassifier
, но с помощью SVC
from sklearn.svm
возникает следующая ошибка:
probas = classifiers[i].fit(train[traincv], target[traincv]).predict_proba(train[testcv])
File "C:\Python27\lib\site-packages\sklearn\svm\base.py", line 409, in predict_proba
X = self._validate_for_predict(X)
File "C:\Python27\lib\site-packages\sklearn\svm\base.py", line 534, in _validate_for_predict
X = atleast2d_or_csr(X, dtype=np.float64, order="C")
File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 84, in atleast2d_or_csr
assert_all_finite(X)
File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 20, in assert_all_finite
raise ValueError("array contains NaN or infinity")
ValueError: array contains NaN or infinity
Что дает? Как я могу заставить SVM хорошо играть с отсутствующими данными? Помня о том, что недостающие данные отлично подходят для случайных лесов и других классификаторов.
Ответы
Ответ 1
Вы можете выполнить вменение данных для обработки отсутствующих значений перед использованием SVM.
EDIT: В scikit-learn есть действительно простой способ сделать это, проиллюстрированный на этой странице.
(скопирован со страницы и изменен)
>>> import numpy as np
>>> from sklearn.preprocessing import Imputer
>>> # missing_values is the value of your placeholder, strategy is if you'd like mean, median or mode, and axis=0 means it calculates the imputation based on the other feature values for that sample
>>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
>>> imp.fit(train)
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)
>>> train_imp = imp.transform(train)
Ответ 2
Вы можете либо удалить образцы с отсутствующими функциями, либо заменить отсутствующие функции своими средними или средними по столбцам.