StratifiedShuffleSplit
Xが配列ではなく、スパース行列である例を複製しようとしています。以下の例では、この行列は、DictVectorizer
名目上の特徴と数値的な特徴が混在する配列への近似によって作成されました。
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import LabelEncoder
from sklearn.cross_validation import StratifiedShuffleSplit
X = [{"a":1, "b":"xx"}, {"a":2, "b":"yx"}, {"a":2, "b":"yx"}, {"a":1, "b":"xx"}]
y = ["A", "B", "B", "A"]
X = DictVectorizer().fit_transform(X)
y = LabelEncoder().fit_transform(y)
sss = StratifiedShuffleSplit(y, 3, test_size=0.5, random_state=0)
for train_index, test_index in sss:
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
スクリプトを実行すると、次のエラーがスローされます。
Traceback (most recent call last):
File ".../test.py", line 22, in <module>
X_train, X_test = X[train_index], X[test_index]
TypeError: only integer arrays with one element can be converted to an index
これは、Xが配列ではなく、スパース行列であるためです。したがって、問題は、Xが配列ではなく行列である場合に、このメソッドを使用してデータを分割するにはどうすればよいかということです。おそらく問題はscikit-learnではなく、numpyですか?Xに「適用」する前にtrain_indexとtest_indexを「変換」する必要がありますか?または、代わりにXを「変換」する必要がありますか?
StratifiedShuffleSplitのドキュメントによると、行列で機能するには、パラメータインデックスにTrueを渡す必要がありますが、役に立ちません。
あなたが私に与えることができるどんな提案も大歓迎です。