我有两组模式,其中有一个补丁,其中两个模式之间的平均值显着不同(由t-test [值为t-vals]给出)。这里,第一组的平均值是 1±0.1 ,第二组的平均值是 2±0.1 ,得到平均差值约为1。
我正在尝试在网格上运行“探照灯”分类器,以使用模式分类识别此补丁,而不是对每个像素进行t检验。探照灯在网格周围移动,训练并测试每个3x3平方像素值的唯一分类器(LinearSVC)。因此,有一些“流失”,这很好并且可以预期。
但是,当我将平均值增加到 5±0.1 和 6±0.1 时,探照灯分类器的失败非常严重,即使均值差异仍然存在约1 。
1)为什么这个分类器不能使用均值差异来区分它?
2)为什么当平均值较小时,平均差值为1,但当平均值略高时无效?
答案 0 :(得分:1)
看来这个问题可能是由LibLinear
的实施细节引起的:sklearn估算工具LogisticRegression
,LinearSVC
和LinearSVR
都是基于这个库而且似乎都是分享相同的"功能":
惩罚1 / C
不仅适用于估计的权重向量,还适用于截距。这意味着远离原点的数据可能变得难以分类,即使点云是完全可分的:截距也不是设置在正确的位置并且往往被拉向零。在您的特定情况下,如果截距低于较低激活的值,则分类将停止工作。
有几种方法,有优点和缺点:
1)为LinearSVC
选择一个非常低的罚分,例如LinearSVC(C=1000)
(或C
更高)
2)使用SVC(kernel="linear")
并进入高样本复杂度的典型核方法问题(即这将至少是二次方,可能是样本数的三次方)
3)在使用估算器之前将数据居中,例如与sklearn.preprocessing.StandardScaler