2015-06-01 1 views
1

У меня есть матрица функций с недостающими значениями NaNs, поэтому мне нужно сначала инициализировать эти недостающие значения. Однако последняя строка жалуется и выдает следующую строку ошибки: Expected sequence or array-like, got Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0). Я проверил, кажется, причина в том, что train_fea_imputed не в формате np.array, а в форме sklearn.preprocessing.imput.Imputer. Как мне это исправить?
Кстати, если я использую train_fea_imputed = imp.fit_transform (train_fea), код работает отлично, но train_fea_imputed возвращает массив с 1 размером менее train_feasklearn Imputer() возвратил функции не вписывается в функцию fit

import pandas as pd 
    import numpy as np 
    from sklearn.ensemble import RandomForestClassifier 
    from sklearn.preprocessing import Imputer 

    imp = Imputer(missing_values='NaN', strategy='mean', axis=0) 
    train_fea_imputed = imp.fit(train_fea) 

    # train_fea_imputed = imp.fit_transform(train_fea) 
    rf = RandomForestClassifier(n_estimators=5000,n_jobs=1, min_samples_leaf = 3) 
    rf.fit(train_fea_imputed, train_label) 

обновление: я изменил

imp = Imputer(missing_values='NaN', strategy='mean', axis=1) 

и теперь проблема измерения не возникла. Я думаю, что есть некоторые неотъемлемые проблемы в функции imputing. Я вернусь, когда закончу проект.

+0

Можете ли вы создать образец «train_fea» и «train_label» с фиктивными значениями, чтобы я мог запускать его на своем компьютере? например как это http://stackoverflow.com/a/30319249/238639 – bakkal

+0

@bakkal Я думаю, вы можете использовать numpy для генерации случайной матрицы и маскировать их NaN, чтобы попробовать. – Jin

ответ

4

С scikit-learn, инициализация модели, обучение модели и получение прогнозов - отдельные шаги. В вашем случае у вас есть:

train_fea = np.array([[1,1,0],[0,0,1],[1,np.nan,0]]) 
train_fea 
array([[ 1., 1., 0.], 
     [ 0., 0., 1.], 
     [ 1., nan, 0.]]) 

#initialise the model 
imp = Imputer(missing_values='NaN', strategy='mean', axis=0) 

#train the model 
imp.fit(train_fea) 

#get the predictions 
train_fea_imputed = imp.transform(train_fea) 
train_fea_imputed 
array([[ 1. , 1. , 0. ], 
     [ 0. , 0. , 1. ], 
     [ 1. , 0.5, 0. ]]) 
+0

ваше решение действительно возвращает train_fea_imputed с размером ниже моего первоначального train_fea. Я думаю, что это эквивалентно прямому применению fit_transform. Моя проблема в том, что мне нужно применить feature_score позже в случайном лесу. Если у меня меньше измерений, у меня нет возможности связать счет с именем функции. – Jin

+0

Я добавил примерную матрицу к моему ответу, у меня, похоже, нет проблем с размерностью? – maxymoo

+0

Я изменил ось параметра Imputer = 1, и теперь проблема исправлена. Я думаю, что у моего train_fea есть некоторые столбцы для игры – Jin

1

Я думаю, что ось = 1 не является правильным в этом случае, так как вы хотите принять среднюю по значениям вектора признаков/столбец (ось = 0), а не грести (ось = 1).

Смежные вопросы