How to resolve "IndexError: too many indices for array"
How to resolve "IndexError: too many indices for array"
我下面的代码出现以下错误 "IndexError: too many indices for array"。我对机器学习很陌生,所以我不知道如何解决这个问题。任何形式的帮助将不胜感激。
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())
您得到的错误代码基本上是说您为数组声明了不适合它的内容。
我看不到您的数组声明,但我假设它是一维的,并且程序反对您将其视为二维数组。
只需检查您的声明是否正确,并在设置值后通过打印值来测试代码,以仔细检查它们是否符合您的预期。
关于这个主题已经存在一些问题,所以我只 link 一个可能有用的问题:
您收到此错误是因为您正在制作目标数组 'y' 二维,实际上需要是一维才能传递交叉验证函数。
这两种情况不同:
1. y=numpy.zeros(shape=(len(list),1))
2. y=numpy.zeros(shape=(len(list)))
如果像案例 1 一样声明 y,则 y 变为二维。但是您需要一个一维数组,因此,用例 2。
使用 Pandas 数据框逐步解释 ML(机器学习)代码:
将预测变量和目标列分别分成 X 和 y。
拆分训练数据 (X_train,y_train) 和测试数据 (X_test,y_test).
计算交叉验证的 AUC(曲线下面积)。由于 y_train 出现错误“IndexError: too many indices for array” 因为它期待一维数组但已获取不匹配的二维数组。在 替换 代码 'y_train' 为 y_train['y'] 代码 像魅力一样工作 。
# 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.cross_validation。
在导入数据集并使用 Matplotlib 打印时,我可以使用 images[5540,:]
预览图像,其中 5540 是图像的 ID,但是当使用 labels[5540,:]
打印该图像的标签时,它抛出了一个错误,如太多索引值。
我发现标签只是一维数组,而我尝试打印的是二维数组,因此此语句的 return 索引较少,因此引发错误。
对我有用的解决方案是 labels[5540,]
。
我下面的代码出现以下错误 "IndexError: too many indices for array"。我对机器学习很陌生,所以我不知道如何解决这个问题。任何形式的帮助将不胜感激。
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())
您得到的错误代码基本上是说您为数组声明了不适合它的内容。 我看不到您的数组声明,但我假设它是一维的,并且程序反对您将其视为二维数组。
只需检查您的声明是否正确,并在设置值后通过打印值来测试代码,以仔细检查它们是否符合您的预期。
关于这个主题已经存在一些问题,所以我只 link 一个可能有用的问题:
您收到此错误是因为您正在制作目标数组 'y' 二维,实际上需要是一维才能传递交叉验证函数。
这两种情况不同:
1. y=numpy.zeros(shape=(len(list),1))
2. y=numpy.zeros(shape=(len(list)))
如果像案例 1 一样声明 y,则 y 变为二维。但是您需要一个一维数组,因此,用例 2。
使用 Pandas 数据框逐步解释 ML(机器学习)代码:
将预测变量和目标列分别分成 X 和 y。
拆分训练数据 (X_train,y_train) 和测试数据 (X_test,y_test).
计算交叉验证的 AUC(曲线下面积)。由于 y_train 出现错误“IndexError: too many indices for array” 因为它期待一维数组但已获取不匹配的二维数组。在 替换 代码 'y_train' 为 y_train['y'] 代码 像魅力一样工作 。
# 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.cross_validation。
在导入数据集并使用 Matplotlib 打印时,我可以使用 images[5540,:]
预览图像,其中 5540 是图像的 ID,但是当使用 labels[5540,:]
打印该图像的标签时,它抛出了一个错误,如太多索引值。
我发现标签只是一维数组,而我尝试打印的是二维数组,因此此语句的 return 索引较少,因此引发错误。
对我有用的解决方案是 labels[5540,]
。