Python 计算sklearn.metrics.ndcg_分数时出错

Python 计算sklearn.metrics.ndcg_分数时出错,python,numpy,scikit-learn,reshape,Python,Numpy,Scikit Learn,Reshape,我试图计算分类器的ndcg分数,但我得到了以下错误: ValueError:仅支持('multilabel-indicator'、'continuous multioutput'、'multiclass multioutput')格式。取而代之的是多类 这是我的密码: #声明分类器、拟合数据并进行预测 从sklearn.employ导入随机林分类器 rnd_forest=RandomForestClassifier() rnd_forest.fit(X_train\u tr,y_train) y

我试图计算分类器的ndcg分数,但我得到了以下错误:

ValueError:仅支持('multilabel-indicator'、'continuous multioutput'、'multiclass multioutput')格式。取而代之的是多类

这是我的密码:

#声明分类器、拟合数据并进行预测
从sklearn.employ导入随机林分类器
rnd_forest=RandomForestClassifier()
rnd_forest.fit(X_train\u tr,y_train)
y_pred_prob=rnd_森林。预测概率(X_train_tr)
#计算ndcg分数
从sklearn.metrics导入ndcg\U分数
#这就是我出错的地方
ndcg得分(y_训练,y_预测概率,k=5)
这就是我的目标和预测概率:

#前两个示例的真实标签
y_列车[:2]
>数组([7,7])
#前两次观测的预测概率
y_pred_prob[:2]
>数组([[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0.]),
[0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])

我试图将y_train重塑为一个二维阵列,但它不起作用。有人能告诉我如何修复这个错误吗?

假设您在
y\u列中有
N
观察值。您必须将
y\u train
转换为
N
行和
12
列的矩阵

#创建一个大小为(N,12)并填充零的数据数组
y_列_矩阵=np.0(形状=(y_预测问题形状[0],y_预测问题形状[1]))
#在每行对应的类别上写一个1
y_列矩阵[np.arange(y_pred_prob.shape[0]),y_列]=1
#你现在有了这个恩达里
y_列_矩阵
数组([[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0.]),
[0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])
现在您可以计算分数:

ndcg评分(y\u训练矩阵,y\u预测概率)
1