我想複製StratifiedShuffleSplit
的例子,X不是一個數組,而是一個稀疏矩陣。在下面的例子中,這個矩陣是由一個DictVectorizer
擬合到一個混合名義和數字特徵的數組。使用StratifiedShuffleSplit與稀疏矩陣
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不是數組而是矩陣時,如何使用這種方法拆分數據?也許這個問題不是專門學習的,但是不是很規範?在將它們「應用」到X之前,是否必須「變換」train_index和test_index?或者,也許我必須「變形」X而不是?
據文檔StratifiedShuffleSplit,它與矩陣工作,我應該通過真的參數指數,但它並不能幫助。
任何建議,你可以給我將是多餘的歡迎。
另請注意:在scikit-learn master上,DictVectorizer現在默認返回CSR。 – ogrisel