【发布时间】:2016-02-11 14:52:22
【问题描述】:
当我使用 sklearn 的交叉验证时,我对特征矩阵的大小感到困惑。这是我的代码:
'''Cross-Validation'''
skf = cross_validation.StratifiedKFold(data_label, n_folds=10, shuffle=True, random_state=None)
'''For each fold, Do the classification'''
for train_index, test_index in skf:
train_data = np.array(data_content[train_index])
train_label = np.array(data_label[train_index])
test_data = np.array(data_content[test_index])
test_label = np.array(data_label[test_index])
'''Create feature matrix'''
cont_vect = CountVectorizer(analyzer='word')
train_data_matrix = cont_vect.fit_transform(train_data)
test_data_matrix = cont_vect.transform(test_data)............the classification
在 10 折交叉验证的每个循环中。如果训练数据集创建的特征文档矩阵(这里是词袋)与测试特征文档矩阵不同怎么办。例如,单词“happy”是测试数据集中的一个特征,但不是训练数据集中的一个特征。我不确定我的代码是否正确,因为我在这里使用过:
cont_vect.fit_transform
创建训练特征矩阵,并使用
cont_vect.transform
要创建测试特征矩阵,代码可以运行,但我不知道为什么,比如 fit_transform 和 transform 有什么区别?我假设测试矩阵是基于训练矩阵创建的。
如果是真的,另一个问题是,每个循环的特征大小是否应该相同?因为,当使用 10 倍 CV 时,无论训练数据集来自原始数据集的哪一部分,训练+测试(原始数据集)都是相同的,因此每个循环的特征矩阵的大小应该相等。但是当我检查结果时,特征的大小是不同的,相似但不相等。我不知道为什么会发生这种情况?谢谢。
【问题讨论】:
标签: python matrix scikit-learn classification cross-validation