26

一部のデータ分析に scikit-learn を使用していますが、データセットにいくつかの欠損値があります ( で表されますNA)。genfromtxtwith でデータをロードしdtype='f8'、分類子のトレーニングに取り掛かります。

RandomForestClassifierオブジェクトとGradientBoostingClassifierオブジェクトの分類は問題ありませんが、 SVCfromを使用する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 を適切に動作させるにはどうすればよいですか? 欠落しているデータは、ランダム フォレストやその他の分類子では正常に機能することに注意してください。

4

3 に答える 3

26

SVM を使用する前に、欠損値を処理するためにデータ代入を行うことができます。

編集: 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)
于 2012-07-12T15:34:29.820 に答える