我正在尝试复制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传递给参数indices,但这没有帮助。
你能给我的任何建议都会非常受欢迎。