【发布时间】:2014-08-27 01:36:05
【问题描述】:
我有一个大小为 NxN 的预计算内核。我正在使用 GridSearchCV 来调整带有 kernel='precomputed' 的 SVM 的 C 参数,如下所示:
C_range = 10. ** np.arange(-2, 9)
param_grid = dict(C=C_range)
grid = GridSearchCV(SVC(kernel='precomputed'), param_grid=param_grid, cv=StratifiedKFold(y=data_label, n_folds=10))
grid.fit(kernel, data_label)
print grid.best_score_
这工作得很好,但是由于我使用完整数据进行预测(使用 grid.predict(kernel)),它会过拟合(我得到的精度/召回率 = 1.0 大多数时候)。
所以我想首先通过交叉验证将我的数据分成 10 个块(9 个用于训练,1 个用于测试),并且在每个折叠中,我想运行 GridSearch 来调整训练集上的 C 值,并且在测试集上进行测试。
为了做到这一点,我将内核矩阵切成 100x100 和 50x50 子矩阵,在其中一个上运行 grid.fit(),另一个上运行 grid.predict()。
但我收到以下错误:
ValueError: X.shape[1] = 50 should be equal to 100, the number of features at training time
我猜训练内核应该与测试内核具有相同的维度,但我不明白为什么,因为我只是计算 100x100 和 50x50 的 np.dot(X, XT),因此最终内核具有不同的维度..
【问题讨论】:
标签: python machine-learning scikit-learn