IndexError:索引太多了

时间:2013-02-10 01:18:14

标签: python numpy scikit-learn

我试图在scikit中使用算法 - 学习根据大量输入预测输出。我似乎得到错误'太多索引'返回,但无法弄清楚为什么。

CSV文件培训:

 1.1    0.2 0.1 0   0.12    0.1
 1.4    0.2 0.1 0.1 0.14    0.1
 0.1    0.1 0.1 0   0.26    0.1
 24.5   0.1 0   0.1 0.14    0.1
 0.1    0.1 0.1 0   0.25    0.1

代码:

    fileCSVTraining = genfromtxt('TrainingData.csv', delimiter=',', dtype=None)

    #Define first 6 rows of data as the features
    t = fileCSVTraining[:, 6:]

    #Define which column to put prediction in
    r = fileCSVTraining[:, 0-6:]    
    #Create and train classifier 
    x, y = r, t
    clf = LinearSVC()
    clf = clf.fit(x, y)     
    #New data to predict
    X_new = [1.0, 2.1, 3.0, 2.4, 2.1]
    b = clf.predict(X_new)

错误:

 t = fileCSVTraining[:, 6:]
 IndexError: too many indices 

4 个答案:

答案 0 :(得分:4)

根据评论,我认为你想要:

fileCSVTraining = genfromtxt('TrainingData.csv')

然后,要获得“前6行”,您将使用

t = fileCSVTraining[:6, :]

(我假设您的实际数据文件比您显示的长。您的示例只有5行。)

我怀疑你使用数组索引来获取r也是错误的。

答案 1 :(得分:2)

请打印您的xy变量,您可能会看到数据无效的原因并进行相应修改。

也是最后一行:

X_new = [1.0, 2.1, 3.0, 2.4, 2.1]
b = clf.predict(X_new)

应该是:

X_new = [[1.0, 2.1, 3.0, 2.4, 2.1]]
b = clf.predict(X_new)

因为预测需要一组样本((n_new_samples, n_features)的二维数组),而不是一个样本。

答案 2 :(得分:0)

获取r和t的数组索引不正确。使用:

  t = fileCSVTraining[:, 1-0:]  

获取所需的训练数据,离开预测列。

答案 3 :(得分:0)

指定dtype = float也很重要,因为“None”将允许整数(如果数据中有任何数据)包含在数组中,这将强制1-D数组而不是2-D数组。如图所示,索引在1-D上不起作用。