Ошибка несоответствия функции XGboost в прогнозе - PullRequest
0 голосов
/ 04 июля 2018

Я пытался обучить модель XGboost, разделив мои тренировки на Train and Test. В тестовом наборе я удалил столбец результатов и передал его в функциюgnast (). Вот как выглядит мой код

    #splitting training set to test and train set

    x_train ,x_test = train_test_split(TrainingData,test_size=0.3) 
    result_x_test = x_test.Response
    x_test = x_test.drop('Response', 1)

    #XGboost algorithm to build a model/ predictor
    #Converting data to Matrix format

    XTrain = x_train.as_matrix()
    YTrain = x_train["Response"].as_matrix()
    XTest = x_test.as_matrix()

    #Training the model

     TrainingModel = xgb.XGBClassifier(max_depth=3, n_estimators=300, learning_rate=0.05).fit(XTrain, YTrain)
     Prediction = TrainingModel.predict(XTest) 

Я получаю следующую ошибку

 ValueError: feature_names mismatch: 

['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'f24', 'f25', 'f26', 'f27', 'f28', 'f29', 'f30', 'f31', 'f32', 'f33', 'f34', 'f35', 'f36', 'f37', 'f38', 'f39', 'f40', 'f41', 'f42', 'f43', 'f44', 'f45', 'f46', 'f47', 'f48', 'f49', 'f50', 'f51', 'f52', 'f53', 'f54', 'f55', 'f56', 'f57', 'f58', 'f59', 'f60', 'f61', 'f62', 'f63', 'f64', 'f65', 'f66', 'f67', 'f68', 'f69', 'f70', 'f71', 'f72', 'f73', 'f74', 'f75', 'f76', 'f77', 'f78', 'f79', 'f80', 'f81', 'f82', 'f83', 'f84', 'f85', 'f86', 'f87', 'f88', 'f89', 'f90', 'f91', 'f92', 'f93', 'f94', 'f95', 'f96', 'f97', 'f98', 'f99', 'f100', 'f101', 'f102', 'f103', 'f104', 'f105'] ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f20', 'f21', 'f22', 'f23', 'f24', 'f25', 'f26', 'f27', 'f28', 'f29', 'f30', 'f31', 'f32', 'f33', 'f34', 'f35', 'f36', 'f37', 'f38', 'f39', 'f40', 'f41', 'f42', 'f43', 'f44', 'f45', 'f46', 'f47', 'f48', 'f49', 'f50', 'f51', 'f52', 'f53', 'f54', 'f55', 'f56', 'f57', 'f58', 'f59', 'f60', 'f61', 'f62', 'f63', 'f64', 'f65', 'f66', 'f67', 'f68', 'f69', 'f70', 'f71', 'f72', 'f73', 'f74', 'f75', 'f76', 'f77', 'f78', 'f79', 'f80', 'f81', 'f82', 'f83', 'f84', 'f85', 'f86', 'f87', 'f88', 'f89', 'f90', 'f91', 'f92', 'f93', 'f94', 'f95', 'f96', 'f97', 'f98', 'f99', 'f100', 'f101', 'f102', 'f103', 'f104']
    expected f105 in input data

105-й столбец - это столбец результатов, и я думаю, что он выдает ошибку из-за отсутствия столбца результатов. Но тестовый набор не должен содержать набор результатов, верно? Что является решением этой проблемы?

1 Ответ

0 голосов
/ 04 июля 2018

Кажется, что вы все еще сохраняете целевую переменную в XTrain, что вам не нужно, я полагаю. И функция цели ('Response) отсутствует в XTest.

Так что быстрое решение было бы сделать XTrain = x_train.drop("Response", axis=1).as_matrix()

Лично я бы посоветовал не делать .as_matrix(): API-интерфейс sklear хорошо обрабатывает pd.DataFrame, и это позволит сохранить значимые имена функций и упростит отладку этой проблемы, например

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