我在机器学习上看到的一些材料说,通过回归处理分类问题是个坏主意。但我认为总是可以进行连续回归以拟合数据并截断连续预测以产生离散分类。那么为什么这是一个坏主意呢?
为什么不通过回归来进行分类呢?
“..通过回归处理分类问题..”通过“回归”我假设您的意思是线性回归,我会将这种方法与拟合逻辑回归模型的“分类”方法进行比较。
在我们这样做之前,重要的是要澄清回归模型和分类模型之间的区别。回归模型预测一个连续变量,例如降雨量或日照强度。他们还可以预测概率,例如图像包含猫的概率。通过强加决策规则,概率预测回归模型可以用作分类器的一部分——例如,如果概率为 50% 或更多,则确定它是一只猫。
逻辑回归预测概率,因此是一种回归算法。然而,它在机器学习文献中通常被描述为一种分类方法,因为它可以(并且经常)用于制作分类器。还有一些“真正的”分类算法,例如 SVM,它只预测结果而不提供概率。我们不会在这里讨论这种算法。
分类问题的线性与逻辑回归
正如 Andrew Ng 解释的那样,使用线性回归,您可以通过数据拟合多项式 - 比如说,就像下面的示例一样,我们通过{tumor size,tumor type}样本集拟合一条直线:
上图,恶性肿瘤获得$1$,非恶性肿瘤获得$0$,绿线是我们的假设$h(x)$。为了做出预测,我们可以说对于任何给定的肿瘤大小$x$,如果$h(x)$大于$0.5$,我们预测为恶性肿瘤,否则我们预测为良性。
看起来这样我们可以正确预测每个训练集样本,但现在让我们稍微改变一下任务。
直观上很明显,所有大于某个阈值的肿瘤都是恶性的。因此,让我们添加另一个具有巨大肿瘤大小的样本,并再次运行线性回归:
现在我们的$h(x) > 0.5 \rightarrow fucking$不再起作用了。为了继续做出正确的预测,我们需要将其更改为$h(x) > 0.2$或其他值——但这不是算法应该如何工作的。
每次新样本到来时,我们都无法更改假设。相反,我们应该从训练集数据中学习它,然后(使用我们学到的假设)对我们以前从未见过的数据做出正确的预测。
希望这能解释为什么线性回归不是最适合分类问题的!此外,您可能想观看VI。逻辑回归。ml-class.org上的分类视频更详细地解释了这个想法。
编辑
概率论逻辑问一个好的分类器会做什么。在这个特定示例中,您可能会使用逻辑回归,它可能会学习这样的假设(我只是在编造这个):
请注意,线性回归和逻辑回归都给您一条直线(或更高阶多项式),但这些线具有不同的含义:
- 用于线性回归的$h(x)$内插或外推输出并预测我们未见过的$x$的值。这就像插入一个新的$x$并获得一个原始数字,并且更适合于预测等任务,例如基于{car size, car age}等的汽车价格。
- 逻辑回归的$h(x)$告诉您$x$属于“正”类的概率。这就是为什么它被称为回归算法 - 它估计一个连续的数量,即概率。但是,如果您设置概率阈值,例如$h(x) > 0.5$,您将获得一个分类器,并且在许多情况下,这就是逻辑回归模型的输出所做的事情。这相当于在图上画了一条线:位于分类器线上的所有点都属于一个类,而下面的点属于另一类。
因此,底线是,在分类场景中,我们使用与回归场景完全不同的推理和算法。
我想不出一个分类实际上是最终目标的例子。几乎总是真正的目标是做出准确的预测,例如概率。本着这种精神,(逻辑)回归是你的朋友。
为什么不看一些证据?尽管许多人会争辩说线性回归不适合分类,但它可能仍然有效。为了获得一些直觉,我在 scikit-learn 的分类器比较中加入了线性回归(用作分类器)。这是发生的事情:
决策边界比其他分类器窄,但准确度相同。与线性支持向量分类器非常相似,回归模型为您提供了一个在特征空间中分离类的超平面。
正如我们所看到的,使用线性回归作为分类器可以工作,但与往常一样,我会交叉验证预测。
作为记录,这是我的分类器代码的样子:
class LinearRegressionClassifier():
def __init__(self):
self.reg = LinearRegression()
def fit(self, X, y):
self.reg.fit(X, y)
def predict(self, X):
return np.clip(self.reg.predict(X),0,1)
def decision_function(self, X):
return np.clip(self.reg.predict(X),0,1)
def score(self, X, y):
return accuracy_score(y,np.round(self.predict(X)))
此外,为了扩展已经很好的答案,对于除双变量之外的任何分类任务,使用回归将要求我们在类之间施加距离和排序。换句话说,我们可能仅仅通过打乱类的标签或改变分配数值的比例(比如标记为$1、10、100、...$与$1、2、3、 ...的类)得到不同的结果。 $ ),这违背了分类问题的目的。