我正在使用xgboost训练一些数据,然后我想在测试集中对其评分。 我的数据是分类变量和数字变量的组合,因此我使用pd.get_dummies来虚拟所有分类变量。训练很好,但是当我在测试集上对模型评分时就会出现问题。
我收到“ feature_names_mismatch”错误,并且列出了缺少的列。我的数据集已经是矩阵(numpy数组格式)。
功能名称不匹配是有效的,因为测试集中可能没有某些虚拟类别。因此,如果发生这种情况,该模型是否仍然可以工作?
答案 0 :(得分:0)
如果我正确理解了您的问题;您有一些分类值出现在训练集中,但没有出现在测试集中。当您分别创建虚拟变量(使用一种热编码等转换分类特征)以进行训练和测试时,而不是在整个数据集中执行此操作时,通常会发生这种情况。以下代码可以提供帮助
for col in featurs_object:
X[col]=pd.Categorical(X[col],categories=df[col].dropna().unique())
X_col = pd.get_dummies(X[col])
X = X.drop(col,axis=1)
X_col.columns = X_col.columns.tolist()
frames = [X_col, X]
X = pd.concat(frames,axis=1)
X = pd.concat([X,df_continous],axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 0.3,
random_state = 1)