如何解决“IndexError:数组索引太多”

新手上路,请多包涵

我下面的代码给我以下错误“IndexError:数组索引太多”。我对机器学习很陌生,所以我不知道如何解决这个问题。任何形式的帮助将不胜感激。

 train = pandas.read_csv("D:/...input/train.csv")

xTrain = train.iloc[:,0:54]
yTrain = train.iloc[:,54:]

from sklearn.cross_validation import cross_val_score
clf = LogisticRegression(multi_class='multinomial')
scores = cross_val_score(clf, xTrain, yTrain, cv=10, scoring='accuracy')
print('****Results****')
print(scores.mean())

原文由 Sujoy De 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 929
2 个回答

你得到的错误代码基本上是说你已经为你的数组声明了不适合它的内容。我看不到您的数组声明,但我假设它是一维的,并且程序反对您将其视为二维数组。

只需检查您的声明是否正确,并 在设置它们以仔细检查它们是否符合您的预期后通过打印值来测试代码。

关于这个主题已经存在一些问题,所以我将在这里链接一个可能有用的问题: IndexError:索引太多。具有 1 行和 2 列的 Numpy 数组

原文由 LJ Codes 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Pandas Dataframe 逐步解释 ML(机器学习)代码:

  1. 将预测变量和目标列分别分成 X 和 y。

  2. 拆分训练数据 (X_train,y_train) 和测试数据 (X_test,y_test)。

  3. 计算交叉验证的 AUC(曲线下面积)。由于 y_train 出现错误“ IndexError: too many indices for array ”,因为它期望一个一维数组但获取了一个不匹配的二维数组。在用 y_train[‘y’] 代码 替换 代码 ‘y_train’ 之后,代码 就像一个 Charm 一样工作


    # Importing Packages :

   import pandas as pd

   from sklearn.model_selection import cross_val_score

   from sklearn.model_selection import StratifiedShuffleSplit

   # Seperating Predictor and Target Columns into X and y Respectively :
   # df -> Dataframe extracted from CSV File

   data_X = df.drop(['y'], axis=1)
   data_y = pd.DataFrame(df['y'])

   # Making a Stratified Shuffle Split of Train and Test Data (test_size=0.3 Denotes 30 % Test Data and Remaining 70% Train Data) :

   rs = StratifiedShuffleSplit(n_splits=2, test_size=0.3,random_state=2)
   rs.get_n_splits(data_X,data_y)

   for train_index, test_index in rs.split(data_X,data_y):

       # Splitting Training and Testing Data based on Index Values :

       X_train,X_test = data_X.iloc[train_index], data_X.iloc[test_index]
       y_train,y_test = data_y.iloc[train_index], data_y.iloc[test_index]

       # Calculating 5-Fold Cross-Validated AUC (cv=5) - Error occurs due to Dimension of **y_train** in this Line :

       classify_cross_val_score = cross_val_score(classify, X_train, y_train, cv=5, scoring='roc_auc').mean()

       print("Classify_Cross_Val_Score ",classify_cross_val_score) # Error at Previous Line.

       # Worked after Replacing 'y_train' with y_train['y'] in above Line
       # where y is the ONLY Column (or) Series Present in the Pandas Data frame
       # (i.e) Target variable for Prediction :

       classify_cross_val_score = cross_val_score(classify, X_train, y_train['y'], cv=5, scoring='roc_auc').mean()

       print("Classify_Cross_Val_Score ",classify_cross_val_score)

       print(y_train.shape)

       print(y_train['y'].shape)

输出 :

     Classify_Cross_Val_Score  0.7021433588790991
    (31647, 1) # 2-D
    (31647,)   # 1-D

_注意: 从 sklearn.model_selection 导入 cross_val_score 。 cross_val_score 是从 sklearn.model_selection 导入的,而不是从已弃用的 sklearn.crossvalidation 导入的。

原文由 Vetrivel PS 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题