首页 > 解决方案 > ValueError:标签输入类型(字符串和数字)的混合

问题描述

我正在尝试使用 XGBoost 算法。我有一个具有 4 个属性(quat_1、quat_2、quat_3、quat_4)的数据集和一个可以具有九个不同值(0、1、2、3、4、5、6、7、8)的目标,这是数据集的头部 我正在尝试实现带有以下代码的 XGBoost 算法:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.33, random_state = 0, stratify = y)
sc_x = StandardScaler()
x_train = sc_x.fit_transform(x_train)
x_test = sc_x.transform(x_test)
pca = PCA(n_components=2, svd_solver='auto', whiten=True)
fit = pca.fit(x_test)
pca.fit(x_train)
print("Explained Variance: %s" % fit.explained_variance_ratio_)
print(fit.components_)
D_train = xgb.DMatrix(x_train, label=y_train)
D_test = xgb.DMatrix(x_test, label=y_test)
parameters = {'eta': 0.3, 'max_depth': 9, 'objective': 'multi:softprob', 'num_class': 9}
steps=20
classifier = xgb.train(parameters, D_train, steps)
preds = classifier.predict(D_test)
best_preds= np.asarray([np.argmax(line) for line in preds])
print("Precision = {}".format(precision_score(y_test, best_preds, average='macro')))
print("Recall = {}".format(recall_score(y_test, best_preds, average='macro')))
print("Accuracy = {}".format(accuracy_score(y_test, best_preds)))

但它会导致这个错误: ValueError: Mix of label input types (string and number) 有人可以帮帮我吗?

标签: pythonxgboost

解决方案


这意味着在您的标签中,您有混合类型,理想情况下,标签应该是数字。

检查数据的任何列中是否有更多字符串,如果有字符串,请将其设为数字​​。假设您有 3 个组 a、b、c,那么您可以给它们类别 1、2、3。该模型适用于数字数据,无需提供字符串。


推荐阅读