【问题标题】:raise ValueError("bad input shape {0}".format(shape)) ValueError: bad input shape (10, 90)raise ValueError("bad input shape {0}".format(shape)) ValueError: bad input shape (10, 90)
【发布时间】:2023-03-19 16:21:02
【问题描述】:

我是新手,所以任何帮助都会得到帮助,当我要求一个例子时,我的教授给了我这个代码,我希望有一个工作模型......

from numpy import loadtxt
import numpy as np
from sklearn import svm
from sklearn.metrics import accuracy_score, f1_score
from sklearn.feature_selection import SelectPercentile, f_classif

读取数据

data = loadtxt('running.txt')
label = loadtxt('walking.txt')
X = data
y = label

定义步行状态为0,跑步状态为1

print('Class labels:', np.unique(y))

随机选择 50% 的数据作为测试数据,其余的作为训练数据

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)

使用 sklearn 选择 50% 的特征

selector = SelectPercentile(f_classif, 50)
selector.fit(X_train, y_train)
X_train_transformed = selector.transform(X_train)
X_test_transformed = selector.transform(X_test)

应用支持向量机算法

clf = svm.SVC(kernel="rbf", C=1)
clf.fit(X_train_transformed, y_train)

 

SVC(C=1, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',max_iter=-1,probability=False, random_state=None, shrinking=True,tol=0.001, verbose=False)

 

pred=clf.predict(X_test_transformed)
print("Accuracy is %.4f and the f1-score is %.4f " %
(accuracy_score(pred, y_test), f1_score(y_test, pred)))

回溯(最近一次调用最后):文件“”,第 1 行,在文件“C:\Users\praym\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”中,第 714 行,在 runfile execfile(filename, namespace) File "C:\Users\praym\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py",第 89 行,在 execfile exec(编译(f.read(),文件名,'exec'),命名空间) 文件“C:/Users/praym/OneDrive/School/Information Structres/Assignment4.py”,第 18 行,在 选择器.fit(X_train, y_train) 文件“C:\Users\praym\Anaconda3\lib\site-packages\sklearn\feature_selection\univariate_selection.py”,第 322 行,适合 X, y = check_X_y(X, y, ['csr', 'csc']) 文件“C:\Users\praym\Anaconda3\lib\site-packages\sklearn\utils\validation.py”,第 515 行,在 check_X_y y = column_or_1d(y, 警告=真) 文件“C:\Users\praym\Anaconda3\lib\site-packages\sklearn\utils\validation.py”,第 551 行,在 column_or_1d raise ValueError("bad input shape {0}".format(shape)) ValueError: bad input shape (10, 90)

【问题讨论】:

  • 您没有确定出现错误的行号!学习编程的第一步是仔细阅读终端上的响应并确定确切的问题。这个技巧可能足以自己调试问题。你不需要我们来解决这个问题。
  • 来自我的编辑器:回溯(最近一次调用最后):文件“”,第 1 行,在 文件“C:\Users\praym\Anaconda3\lib\site-packages \spyderlib\widgets\externalshell\sitecustomize.py”,第 714 行,在运行文件 execfile(文件名,命名空间)文件“C:\Users\praym\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”中,第 89 行,在 execfile exec(compile(f.read(), filename, 'exec'), namespace) 还有更多所以我不明白错误

标签: python scikit-learn


【解决方案1】:

如果有 90 个特征,您很可能会使用一个热编码器来获得这么多特征(虚拟变量)。在适合您的模型之前,请尝试:

y_train = np.argmax(y_train, axis=1)

这将允许您将一种热编码传递给您的 fit 函数。

【讨论】:

    【解决方案2】:

    我会将其作为答案提交,因为它直接解决了您的实际问题。

    在一般计算机编程术语中,您遇到的错误称为堆栈跟踪。在堆栈跟踪上有一个Wikipedia page,但我会在这里尝试用更简单的术语来解释它。

    错误有一个标题“Traceback”,因为这就是它正在做的事情 - 追溯错误。您可以在 Python 脚本中看到每一行都是某种 API 调用,无论是 loadtxtprint 还是 fit。如果在调用 loadtxt 时发生错误,则 Traceback 会在 loadtxt 调用中向您显示究竟出了什么问题。该函数可能正在调用 API 中的其他函数,因此您会看到“跟踪”。当您编写具有许多函数和类的更复杂的 Python 代码时,您最终可能会看到调用其他函数的函数,这些函数都是由您编写的。因此,

    1. 始终自下而上阅读 Traceback(它会在输出中告诉您“最近一次调用是最后一次”)。您需要获取行号以及发生错误的 python 文件的名称。

    行号会将您带到代码中实际导致错误的位置。通常,您只需要最底层的 1 或 2 个调用即可解决一般问题。如果您编写了自己的自定义 API,那么整个跟踪可能会变得更加有用。但是,仅靠文件名和行号不足以有效地调试任何程序。

    1. 接下来,您需要了解究竟是什么错误。在您的情况下,您会看到ValueError。这通常意味着您的变量的值与变量类型不匹配。但是,异常类型后面的句子为您提供了有关导致此ValueError 的确切原因的更多详细信息。

    有关每种异常类型及其含义的更多详细信息,请阅读有关 built-in exceptions 的文档。此外,您可以从教程here 中了解有关如何处理此类异常的更多信息。

    1. 通常,知道最底层调用的行号和异常类型就足以让您了解您做错了什么。但是,如果您确定在该行中使用的变量是正确的,那么您必须更深入地研究堆栈跟踪,并从底部查找第二个调用。为此,您将再次看到文件名和行号。

    通过重复这些步骤,您将能够有效地调试您自己的程序。请注意,调试不仅是一种从程序中删除错误的方法。它是单步执行代码并识别每一行正在做什么并将其与他们应该做的事情进行比较的能力。它是所谓的计算机编程的基础。如果你做对了,你可能还有问题要问,但你的问题会有所改善。这就是 Stack Overflow 出现的时候(请注意,这个网站的名称本身就是对堆栈跟踪概念的一种玩弄)。


    编辑:在你的堆栈跟踪中,你的错误在这里:

    文件“C:/Users/praym/OneDrive/School/Information Structres/Assignment4.py”,第 18 行,在 selector.fit(X_train, y_train) 中。

    您的输入变量 X_train 和 y_train 中的一个或两个似乎不是该拟合函数可接受的形状。


    编辑: 如果您以现有方式加载文件,则无法获得正确的 X_train 和 y_train 变量。您似乎有两种类型的数据,一种用于步行,一种用于跑步。它们都是数据。步行数据中的每个条目都应该有一个标签“步行”,而跑步数据中的每个条目都应该有一个标签“跑步”。

    现在,这是数据挖掘的基础。您需要知道数据和标签的含义。

    【讨论】:

    • 这很有帮助,谢谢,我要求的不是我的代码示例,我希望有一些有用的东西,但这是我得到的,可能是我正在使用的文件,我认为它可能与所以我已经联系了...感谢您的确认。
    • 嗯,X_train 和 y_train 确实是从输入数据创建的。更仔细地查看您的文件名,将数据设置为 'walking.txt' 并将标签设置为 'running.txt' 似乎是非常错误的!您可能需要的是所有步行数据都带有标签“Walking”,所有跑步数据都带有标签“running”。
    • 查看答案的编辑。另外,如果这解决了您的问题,请选择它作为答案。
    • @RahulMurmuria 有一个很好的答案,但我想为您的问题添加一个简单的可能解决方案:要更正/修改数组的形状,您可以尝试使用函数 - reshape( (int number_of_rows, int number_of_columns)) 在 numpy 数组上。
    猜你喜欢
    • 2020-09-06
    • 2021-04-14
    • 2016-11-12
    • 2019-09-22
    • 2021-01-22
    • 2015-09-27
    • 2019-08-07
    • 2016-12-01
    • 2018-06-25
    相关资源
    最近更新 更多