sklearn“RidgeClassifier”有啥作用?

Posted

技术标签:

【中文标题】sklearn“RidgeClassifier”有啥作用?【英文标题】:What does sklearn "RidgeClassifier" do?sklearn“RidgeClassifier”有什么作用? 【发布时间】:2019-05-23 12:18:09 【问题描述】:

我试图了解sklearn.linear_modelRidgeClassifierLogisticRegression 之间的区别。我在文档中找不到它。

我想我非常了解 LogisticRegression 的作用。它计算系数和截距以最小化 half of sum of squares of the coefficients + C times the binary cross-entropy loss,其中 C 是正则化参数。我从头开始检查了一个幼稚的实现,结果一致。

RidgeClassifier 的结果不同,我想不通,那里的系数和截距是如何计算的?查看 Github 代码,我没有足够的经验来解开它。

我问的原因是我喜欢 RidgeClassifier 的结果——它更好地概括了我的问题。但在我使用它之前,我想至少知道它是从哪里来的。

感谢您的帮助。

【问题讨论】:

你读过机器学习中的正则化吗? 也许这会有所帮助:scikit-learn.org/stable/modules/… @Sociopath 是的。如文中所述,LogisticRegression() 中已经存在基本的 l2 正则化。 @VivekKumar 去过那里,谢谢 - 但不幸的是,它只会让我更加困惑,因为文档中的所有内容看起来都应该与 LogisticRegression 相同。 (从文档看来,alpha 应该与 LogisticRegression 的 1/C 一致) 【参考方案1】:

RidgeClassifier()LogisticRegression() 的工作方式不同,但有 l2 惩罚。 RidgeClassifier() 的损失函数不是交叉熵。

RidgeClassifier() 使用Ridge() 回归模型以如下方式创建分类器:

为简单起见,让我们考虑二元分类

    根据目标变量所属的类将目标变量转换为+1-1

    构建一个Ridge() 模型(这是一个回归模型)来预测我们的目标变量。损失函数为MSE + l2 penalty

    如果Ridge()回归的预测值(根据decision_function()函数计算)大于0,则预测为正类,否则为负类。

对于多类分类

    使用LabelBinarizer() 创建多输出回归场景,然后训练独立的Ridge() 回归模型,每个类一个(One-Vs-Rest 建模)。

    从每个类的 Ridge() 回归模型(每个类的实数)获取预测,然后使用 argmax 预测该类。

【讨论】:

谢谢,是的,但是带有默认参数(alpha = 1)的 RidgeClassifier 的结果与 l2 正则化或非正则化情况(C = LogReg 中的无穷大)不一致。只是想找出它的作用。不幸的是,我的问题更侧重于特定的实现,而不是一般的回归数学:-( 非常感谢您花时间和精力帮助我。讨厌这么说,但它仍然没有回答我的问题。 (让我们省略对您删除的“一半”的讨论)。关键是解决 l2-regularized LogReg 的问题是如此简单(而且,而且是凸的),以至于基本上 any 方法收敛到同一个人,而且非常快。如文中所述,我将 LogisticRegression 方法与我自己的 najive 实现(基本梯度下降、任何合理的步数……)进行了比较,结果最多保留 5 个小数位。但是里奇返回的东西完全不同...... 我没有删除你的损失函数中的一半,我只是替换了 C 值 找到原因,更新我的答案。一行 - 他们使用岭回归模型来构建 ridgeClassifier。 没错。然后使用决策函数找到类

以上是关于sklearn“RidgeClassifier”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn系列之 sklearn.svm.SVC详解

sklearn中是不是有设置惩罚阈值的参数?

sklearn score函数怎么有负数

sklearn.decomposition.DicitonaryLearning.fit 中的 y 参数有啥作用?

sklearn 的 DecisionTreeClassifier 中的“拆分器”属性有啥作用?

03_有监督学习--简单线性回归模型(调用 sklearn 库代码实现)