выбранный объект из DataFrame имеет другую длину при переходе к sklearn.model_selection.cross_validate? - PullRequest
0 голосов
/ 25 марта 2020

Когда я использую:

df_train[df_train.columns.drop('Survived')]

, он возвращает мне 891 * 17 фрейм данных. Но когда я хочу извлечь метки с df_train['Survived'], длина меняется на 892.

Как это может произойти? Все столбцы имеют одинаковую длину в кадре данных. Когда я пытаюсь преобразовать мой фрейм данных в dict с dict(df_train), он также показывает мне, что все столбцы имеют 891 значение, а 'Survived' имеет 982.

Я наткнулся на это при получении ошибки

ValueError: Found input variables with inconsistent numbers of samples: [891, 892]

при попытке вызвать эту функцию:

cv_results = model_selection.cross_validate(alg, df_train[df_train.columns.drop('Survived')], df_train['Survived'], cv=cv_split)

enter image description here enter image description here

Редактировать:

Я запускаю несколько MLA в al oop следующим образом: (непосредственно перед этим битом кода длины были равны)

MLA_predict = df_train['Survived']

cv_split = model_selection.ShuffleSplit(n_splits = 10, test_size = .3, train_size = .6, random_state = 0 ) 
row_index = 0
for alg in MLA:

    #set name and parameters
    MLA_name = alg.__class__.__name__
    MLA_compare.loc[row_index, 'MLA Name'] = MLA_name
    MLA_compare.loc[row_index, 'MLA Parameters'] = str(alg.get_params())

    #score model with cross validation: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_validate.html#sklearn.model_selection.cross_validate
    cv_results = model_selection.cross_validate(alg, df_train[df_train.columns.drop('Survived')], df_train['Survived'], cv=cv_split)

    MLA_compare.loc[row_index, 'MLA Time'] = cv_results['fit_time'].mean()
    MLA_compare.loc[row_index, 'MLA Train Accuracy Mean'] = cv_results['train_score'].mean()
    MLA_compare.loc[row_index, 'MLA Test Accuracy Mean'] = cv_results['test_score'].mean()   
    #if this is a non-bias random sample, then +/-3 standard deviations (std) from the mean, should statistically capture 99.7% of the subsets
    MLA_compare.loc[row_index, 'MLA Test Accuracy 3*STD'] = cv_results['test_score'].std()*3   #let's know the worst that can happen!


    #save MLA predictions - see section 6 for usage
    alg.fit(df_train[df_train.columns.drop('Survived')], df_train['Survived'])
    MLA_predict[MLA_name] = alg.predict(df_train[df_train.columns.drop('Survived')])

    row_index+=1

1 Ответ

0 голосов
/ 25 марта 2020

MLA_predict должен быть другим объектом!

MLA_predict = df_train['Survived'].copy()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...