首页 > 解决方案 > ValueError: y 应该是一维数组,得到一个形状为 (5024, 2) 的数组

问题描述

这是我的 Python 代码:

df = pd.read_csv('sme_loan.csv', sep=',',dtype=str)
#print(df)
df2 = df.drop(columns=['problem'])

xx = df2.to_numpy()

yy = pd.DataFrame(df, columns = ['problem'])

yyy = np.ravel(yy)

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
enc.fit(xx)

xxx = enc.transform(xx).toarray()

clf = LogisticRegression(solver="liblinear").fit(xxx, yy)

result = roc_auc_score(yyy, clf.predict_proba(xxx), multi_class='ovr')

print("df:")
print(df)
print("xx:")
print(xx)
print("xxx:")
print(xxx)
print("yy:")
print(yy)
print("yyy:")
print(yyy)

这是错误:

Warning (from warnings module):
  File "C:\Python39\lib\site-packages\sklearn\utils\validation.py", line 63
    return f(*args, **kwargs)
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
Traceback (most recent call last):
  File "C:\Users\Hp\Desktop\jupyter\r\r.py", line 30, in <module>
...
ValueError: y should be a 1d array, got an array of shape (5024, 2) instead.

我正在尝试计算 AUC 分数。我无法将形状转换为一维数组。我尝试了 flatten() 和 ravel(yy),但没有帮助。帮忙预告!

标签: python

解决方案


我猜这不是yyy给出这个错误,而是clf.predict_proba(xxx).

predict_proba()返回一个大小为 的数组(n_samples, n_classes)。假设您有 2 个类,这就是为什么您有一个形状数组 (5024, 2)。

如果您将预测类的一维数组与相同大小的实际类的一维数组进行比较,请predict_proba()predict()替换以获取预测类而不是预测概率。


推荐阅读