LinearSVC无法利用均值差异进行分类

我有两组模式,其中有一块区域的均值在两组模式之间差异显著(通过t检验给出,数值为t值)。这里,第一组的均值为1±0.1,第二组的均值为2±0.1,因此均值差异约为1

enter image description here

我试图在网格上运行“探照灯”分类器,以通过模式分类而不是对每个像素进行t检验来识别这块区域。探照灯在网格上移动,对每个3×3像素的方块中的值训练和测试一个独特的分类器(LinearSVC)。因此,会有一些“溢出”,这是正常且可以预期的。

enter image description here

然而,当我将均值增加到5±0.16±0.1时,即使均值差异仍然约为1,探照灯分类器的表现非常差。

enter image description here

1) 为什么这个分类器有时无法利用均值差异进行区分?

2) 为什么当均值较小时,均值差异为1时这个方法有效,但当均值稍高时却失效?


回答:

这个问题似乎是由于LibLinear的实现细节引起的:sklearn的估计器LogisticRegressionLinearSVCLinearSVR都基于这个库,并且似乎都具有相同的“特征”:

惩罚1 / C不仅应用于估计的权重向量,还应用于截距。这意味着远离原点的数据可能难以分类,即使点云是完全可分的:截距没有设置在正确的位置,并且倾向于被拉向零。在你的特定情况下,如果截距被拉到低于较低激活值的位置,那么分类将停止工作。

有几种解决方法,各有优缺点:

1) 为LinearSVC选择一个非常低的惩罚,例如LinearSVC(C=1000)(或更高的C

2) 使用SVC(kernel="linear"),并陷入典型的核方法问题,即高样本复杂度(即这至少是样本数量的二次方,可能是三次方)

3) 在使用估计器之前对数据进行中心化处理,例如使用sklearn.preprocessing.StandardScaler

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注