Когда я использую:
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)
Редактировать:
Я запускаю несколько 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