以下のコードでは、「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())
あなたが得ているエラーコードは基本的にあなたがそれに適合しない配列の内容を宣言したと言っています。私はあなたの配列の宣言を見ることができませんが、私はそれが1次元であり、プログラムが2次元のもののように扱うことに反対していると仮定しています。
宣言が正しいことを確認し、値が意図したとおりであることを再確認するように設定した後、値を出力してコードをテストします
この主題に関するいくつかの既存の質問がすでにあるので、ここで役立つかもしれないものをリンクします: IndexError:too many indices。Numpy Array with 1 row and 2 columns
予測子とターゲット列をそれぞれXとyに分離する。
トレーニングデータ(X_train、y_train)とテストデータ(X_test、y_test)の分割。
交差検証済みAUC(曲線下の領域)の計算。 y_trainが原因でエラー“ IndexError:too many indices for array”が発生しました。これは、1次元配列を想定していましたが、フェッチされた2次元配列は不一致です。 Replacingの後'y_train' with y_train ['y'] code 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
注:from sklearn.model_selection import cross_val_score。 cross_val_scoreはsklearn.model_selectionからインポートされており、廃止予定のsklearn.cross_validationからはインポートされていません。
クロス検証関数で渡すには実際には1次元である必要があるターゲット配列 'y'を2次元にするため、このエラーが発生します。
これらの2つのケースは異なります。
1. y=numpy.zeros(shape=(len(list),1))
2. y=numpy.zeros(shape=(len(list)))
ケース1のようにyを宣言すると、yは2次元になります。ただし、1次元配列が必要なので、ユースケース2を使用します。
データセットをインポートしてMatplotlibで印刷すると、images[5540,:]
で画像をプレビューできますが、5540は画像のIDですが、その画像のラベルをlabels[5540,:]
で印刷すると、インデックス値が多すぎるようなエラーが発生しました。
印刷しようとしているラベルが1D配列のみで、2D配列であるため、このステートメントで返されるインデックスが少ないため、エラーが発生していることがわかりました。
私にとってうまくいった解決策はlabels[5540,]
でした。