Как решить ошибку XGBoost "несоответствие имя_функции"? - PullRequest
0 голосов
/ 06 марта 2020

Я работаю над использованием XGBoost, чтобы делать прогнозы, используя набор данных iris. Модель обучена, но когда я пытаюсь сделать новый прогноз, я получаю следующую ошибку: ValueError: несоответствие feature_names.

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
iris_df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                 columns= iris['feature_names'] + ['target'])

iris_df.rename(columns={'sepal length (cm)':'sepal_length'}, inplace=True)
iris_df.rename(columns={'sepal width (cm)':'sepal_width'},inplace=True)
iris_df.rename(columns={'petal length (cm)':'petal_length'},inplace=True)
iris_df.rename(columns={'petal width (cm)':'petal_width'}, inplace=True)

data = iris_df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
target = iris_df[['targets']]

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=0)

import xgboost as xgb

train = xgb.DMatrix(X_train, label=y_train)
test = xgb.DMatrix(X_test, label=y_test)

param = {
    'max_depth':4,
    'eta':0.3,
    'objective': 'multi:softmax',
    'num_class': 3}
epochs = 10

model = xgb.train(param, train, epochs)

predictions = model.predict(test)
print(predictions)

from sklearn.metrics import accuracy_score

accuracy_score(y_test, predictions)

Весь приведенный выше код работает, но создание новых прогнозов приводит к ошибке:

testArray=np.array([[5.1,3.5,1.4,0.2]])

test_individual=xgb.DMatrix(testArray)

print(model.predict(test_individual))\

Как мне заставить работать новое предсказание?

Ответы [ 3 ]

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

Передайте xgb.DMatrix одномерный массив:

testArray = np.array([5.1,3.5,1.4,0.2])
0 голосов
/ 07 марта 2020

Решил проблему. Пришлось превратить объекты фрейма данных в массивы:


train = iris_df[['sepal_length','sepal_width','petal_length','petal_width']].values
test = iris_df[['target']].values

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

Передайте xgb.DMatrix и массив данных, 'testArray' и список меток для меток столбцов:

test_individual = xgb.Dmatrix(testArray, label = X_train.columns)
...