1. ホーム
  2. python

[解決済み] インデックスとして使用する配列は整数型(またはブーリアン型)でなければならない。

2022-01-30 16:55:04

質問

エラーはこのようなものです。

Traceback (most recent call last):
  File "NearestCentroid.py", line 53, in <module>
    clf.fit(X_train.todense(),y_train)
  File "/usr/local/lib/python2.7/dist-packages/scikit_learn-0.13.1-py2.7-linux-i686.egg/sklearn/neighbors/nearest_centroid.py", line 115, in fit
    variance = np.array(np.power(X - self.centroids_[y], 2))
IndexError: arrays used as indices must be of integer (or boolean) type

コードはこんな感じです。

distancemetric=['euclidean','l2']
for mtrc in distancemetric:
for shrkthrshld in [None]:
#shrkthrshld=0
#while (shrkthrshld <=1.0):
    clf = NearestCentroid(metric=mtrc,shrink_threshold=shrkthrshld)
    clf.fit(X_train.todense(),y_train)
    y_predicted = clf.predict(X_test.todense())

を使っています。 scikit-learn パッケージを使用します。 X-train , y_train はLIBSVM形式である。 X は特徴量:値のペアです。 y_train はターゲット/ラベルです。 X_train はCSRマトリック形式であり shrink_threshold はCSRスパースマトリックスに対応していないので .todense()X_train その後、このエラーが発生したのですが、どなたか修正するのを手伝っていただけませんか?ありがとうございました。

解決方法は?

私は、Pystructを使用して同様の問題が発生しました。 pystruct.learners.OneSlackSSVM .

学習用ラベルが整数ではなく、浮動小数点数であったため、この現象が発生しました。私の場合、dtype=np.int8を指定せずにラベルをnp.onesで初期化したのが原因です。お役に立てれば幸いです。