多类与 logreg

Multiclass with logreg

所以我正在尝试为最短路径问题找到一个简单的(不是 Dijkstra 算法)。

在不重现所有内容的情况下,我有 3 条路径和 50 个样本(即形状 (50,3)),并且我已经使用最小值确定了每个样本的最短路径。函数

for x_train being 

newx_train = np.zeros((50,3))
newx_train[:,0] = p1_train
newx_train[:,1] = p2_train
newx_train[:,2] = p3_train
[x_train] <- just random numbers generated
and subsequently, y_train (since I'm generating it; i pass min function through it)


newy_train[np.arange(newx_train.shape[0]),newx_train.argmin(axis=1)]=1
print(newy_train)

[newy_train] <- passing min will show a 1 for each row where the minimum value is

So i get something like 
[[1,0,0],
 [0,1,0],
 [1,0,0],
 [0,0,1]]

基于生成的 x_train、y_train,我正在尝试实施 SVM、logreg 来预测它们对 multi-class 的表现如何,然后我将计算 class化验矩阵和准确率。

我的问题是,如何为 logreg 使用 multi-class?当我运行一个适合通过x_train,y_train;可以理解 python 抛出错误,y 应该是一维数组,但得到的是 (50,3)。

from sklearn.linear_model import LogisticRegression
LogReg = LogisticRegression(solver = 'lbfgs', multi_class = 'multinomial')
    LogReg.fit(newx_train,newy_train[:,0])
    ylog_pred = LogReg.predict(newx_test)
    print(ylog_pred)

以上代码自然适用于二进制(假设只有 2 条路径),因为预测一列(索引 0)为“1”自然意味着另一列为“0”。但这不适用于 multi-class。有人可以帮忙吗?

我认为您只是错过了有关如何解释 y 的部分。

LogisticRegression 期望 y 列不会被单热编码并且实际上是目标标签,所以你需要像

newy_train = np.argmax(newy_train, axis=1) # index of max across each row

那么你应该可以搭配

LogReg.fit(newx_train,newy_train)