#python-3.x #scikit-learn #predict
#python-3.x #scikit-learn #предсказать
Вопрос:
Пожалуйста, помогите, я получаю ошибку количества функций. Используемые столбцы — это ID, encoded columns и integer column. Этот код работает для другого набора данных с аналогичными, но более широкими возможностями. Является ли количество используемых функций слишком маленьким, чтобы получить эту ошибку? Это мой код:
from sklearn.model_selection import train_test_split
num_test = 0.20 # 80-20 split
X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, test_size=num_test, random_state=23)
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import make_scorer, accuracy_score
from sklearn.model_selection import GridSearchCV
clf = RandomForestClassifier()
parameters = {'n_estimators': [4, 6, 9],
'max_features': ['log2', 'sqrt', 'auto'],
'criterion': ['entropy', 'gini'],
'max_depth': [2, 3, 5, 10],
'min_samples_split': [2, 3, 5],
'min_samples_leaf': [1, 5, 8]
}
acc_scorer = make_scorer(accuracy_score)
grid_obj = GridSearchCV(clf, parameters, scoring=acc_scorer)
grid_obj = grid_obj.fit(X_train, y_train)
clf = grid_obj.best_estimator_
clf.fit(X_train, y_train)
ids = data_test['Id']
predictions = clf.predict(data_test.drop('Id', axis=1))
output = pd.DataFrame({'Id': ids, 'Full_Time_Home_Goals': predictions})
print(output.head())
Ошибка, которую я получаю,:
> Traceback (most recent call last):
> File "C:/Users/harsh/PycharmProjects/Kaggle-Machine Learning from Start to Finish with Scikit-Learn/EPL Predicting.py", line 98, in
> <module>
> predictions = clf.predict(data_test.drop('Id', axis=1))
> File "C:UsersharshPycharmProjectsGitHubvenvlibsite-packagessklearnensemble_forest.py",
> line 629, in predict
> ValueError: Number of features of the model must match the input. Model n_features is 4 and input n_features is 2
Даже когда я не отбрасываю predictions = clf.predict(data_test.drop('Id', axis=1))
, я все равно получаю ошибку
Образец набора данных:
data_train:
Id HomeTeam AwayTeam Full_Time_Home_Goals
0 1 55 440 3
1 2 158 493 2
2 3 178 745 1
3 4 185 410 1
4 5 249 57 2
data_test:
Id HomeTeam AwayTeam
0 190748 284 54
1 190749 124 441
2 190750 446 57
3 190751 185 637
4 190752 749 482
Столбцы — это то, как это должно работать. Почему это не так?
Комментарии:
1. Строка
predictions = clf.predict(data_test.drop('Id', axis=1))
должна гласитьpredictions = clf.predict(X_test)
2. @SergeyBushmanov должен ли ваш комментарий быть ответом?
3. @rleir это не ответ, поскольку я получаю ошибку несоответствия модели. Мы правильно прогнозируем тестовые данные? Не обучайте данные, Сергей, этот код не работает
4.
data_train
иdata_test
не имеют отношения к опубликованному вами коду. Вы не определяете их в коде, и нет необходимости использовать неопределенные переменные. Попробуйте то, что я предложил, и поделитесь любыми ошибками, которые вы получите5. Откуда
predictions = clf.predict(data_test.drop('Id', axis=1))
берется? Вы должны удалить его, потому что вы неdata_test
определили