y_train = np.argmax(y_train)变成二维的只有一列
时间: 2024-01-22 12:17:54 浏览: 26
如果 `y_train` 是一个一维的数组,使用 `np.argmax()` 得到的是一个标量值,而不是一个数组。为了将其变成一个二维的数组,可以使用 `np.reshape()` 函数将其转换为一个列向量,例如:
```
y_train = np.argmax(y_train)
y_train = y_train.reshape(-1, 1) # 将其变成一个列向量
```
这样,`y_train` 就变成了一个只有一列的二维数组,可以用于训练机器学习模型。
相关问题
修正以下代码ntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(train_X.T, 3, 2, error=0.005, maxiter=1000, init=None) train_u, _, _, _, _, _, = fuzz.cluster.cmeans_predict(train_X.T, cntr, 2, error=0.005, maxiter=1000) train_predictions = np.argmax(train_u, axis=0) train_accuracy = accuracy_score(train_y, train_predictions) print(train_y) print(train_predictions) train_y = np.array(train_y) train_u = np.array(train_u) train_auc = roc_auc_score(train_y, train_u, multi_class='ovo') loss = np.sum((train_u - train_y) ** 2) loss_curve.append(loss) accuracy_curve.append(train_accuracy) auc_curve.append(train_auc)
修正后的代码如下:
```
cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(train_X.T, 3, 2, error=0.005, maxiter=1000, init=None)
train_u, _, _, _, _, _, = fuzz.cluster.cmeans_predict(train_X.T, cntr, 2, error=0.005, maxiter=1000)
train_predictions = np.argmax(train_u, axis=0)
train_accuracy = accuracy_score(train_y, train_predictions)
print(train_y)
print(train_predictions)
train_y = np.array(train_y)
train_u = np.array(train_u)
train_auc = roc_auc_score(train_y, train_u.T, multi_class='ovo')
loss = np.sum((train_u - train_y.reshape(-1,1)) ** 2)
loss_curve.append(loss)
accuracy_curve.append(train_accuracy)
auc_curve.append(train_auc)
```
主要修改了两处错误:
1. 在计算 ROC AUC 时,需要将 `train_u` 转置,而且 `train_y` 和 `train_u` 都应该是二维数组。
2. 在计算 loss 时,需要将 `train_y` 改为二维数组,并且使用 `reshape` 方法将其转换为列向量。同时,因为两个数组的形状不同,需要使用广播机制进行计算。
argmax() missing 1 required positional argument: 'a'train_labels = np.argmax(axis=1) test_labels = np.argmax(axis=1)
这个错误提示表明你在调用 `argmax` 方法时,缺少了必需的参数 `a`。`argmax` 方法是 NumPy 数组中的一个方法,用于返回数组中最大值所在的索引。它的调用方式是:
```python
numpy.argmax(a, axis=None, out=None)
```
其中,`a` 是要进行计算的数组,`axis` 是要进行计算的轴的索引,`out` 是保存结果的数组。
在你的代码中,你需要将 `train_labels` 和 `test_labels` 传递给 `argmax` 方法进行计算。假设 `train_labels` 和 `test_labels` 都是形状为 `(n_samples, n_classes)` 的二维数组,你需要对每个样本的类别概率值进行计算,得到对应的类别标签。你可以这样写:
```python
train_labels = np.argmax(train_labels, axis=1)
test_labels = np.argmax(test_labels, axis=1)
```
这里的 `axis` 参数被设置为 `1`,表示在每行中查找最大值所在的索引。这样做可以将形状为 `(n_samples, n_classes)` 的二维数组转换为长度为 `n_samples` 的一维数组,每个元素表示对应样本的类别标签。