Ошибка количества функций. Как это решить?

#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 определили