提高ValueError(“输入形状错误{0}”。格式(形状))ValueError:输入形状错误(10,90)

时间:2016-07-28 16:32:33

标签: python scikit-learn

我是新手,所以任何帮助都是适当的,当我问一个例子时,这个代码是由我的教授给我的,我曾希望有一个工作模型......

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)文件“C:\ Users \ praym \ Anaconda3 \ lib \ site-packages \ spyderlib \ widgets \ externalshell \ sitecustomize.py”,第89行,在execfile中       exec(compile(f.read(),filename,'e​​xec'),namespace)     文件“C:/ Users / praym / OneDrive / School / Information Structres / Assignment4.py”,第18行,in       selector.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'])     在check_X_y中输入文件“C:\ Users \ praym \ Anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py”,第515行       y = column_or_1d(y,warn = True)     在column_or_1d中输入文件“C:\ Users \ praym \ Anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py”,第551行       提出ValueError(“输入形状错误{0}”。格式(形状))   ValueError:错误的输入形状(10,90)

2 个答案:

答案 0 :(得分:3)

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

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

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

  1. 始终从底部向上读取Traceback(它会在输出中告诉您“最近的通话是最后一次”)。您需要获取行号以及发生错误的python文件的名称。
  2. 行号将带您到实际导致错误的代码中。通常,您只需要底部的1或2个调用来解决一般问题。如果您编写了自己的自定义API,那么整个跟踪可能会变得更有用。但是,单独的文件名和行号不足以有效地调试任何程序。

    1. 接下来,您需要了解错误究竟是什么。在您的情况下,您会看到ValueError。这通常意味着变量的值与变量类型不匹配。但是,异常类型后面的句子可以为您提供有关此ValueError的确切原因的详细信息。
    2. 有关每种异常类型及其含义的更多详细信息,请阅读有关built-in exceptions的文档。此外,您可以从教程here中了解有关如何处理此类异常的更多信息。

      1. 通常,知道最底层呼叫的行号和异常类型足以让您了解您做错了什么。但是,如果您确定在该行中使用变量是正确的,那么您必须深入研究堆栈跟踪,并从底部查找第二个调用。为此,您将再次看到文件名和行号。
      2. 通过重复这些步骤,您将能够有效地调试自己的程序。请注意,调试不仅是一种从程序中删除错误的方法。它能够逐步执行代码并确定每条线路正在做什么,并将其与它们应该做的事情进行比较。它是所谓的计算机编程的基础。如果你这样做,你可能仍有疑问,但你的问题会有所改善。那就是当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变量。您似乎有两种类型的数据,一种用于步行,另一种用于跑步。它们都是数据。行走数据中的每个条目都应具有“行走”标签,并且正在运行的数据中的每个条目都应具有“正在运行”标签。

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

答案 1 :(得分:1)

具有90个功能,您最有可能使用一个热编码器来获得那么多功能(虚拟变量)。在拟合模型之前,请尝试:

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

这将使您可以将一种热门编码传递给fit函数。