scikit-learn逻辑回归OvR模式下liblinear求解器与偏置配置问题咨询
问题解答
关于liblinear下multi_class取值的差异
两者没有任何实际差异。
- scikit-learn对
auto选项的判定逻辑是:只有当求解器支持multinomial多分类模式、且当前为多分类任务时,才会自动选择对应策略;liblinear本身不支持multinomial模式,此时auto会强制回落为ovr,和显式设置multi_class='ovr'的运行逻辑完全一致。 - 另外你当前是手动拆分标签训练二分类器,二分类场景下
multi_class参数本身就不会触发多分类策略判断,两种写法的输出结果完全相同。
关于偏置项的正确配置
不需要手动拼接全1偏置列,开启fit_intercept=True已经可以正确引入偏置项。
- 你看到
coef_维度和原始特征数相等是正常情况:开启fit_intercept=True时,模型会分开存储两类参数:coef_保存每个原始特征的权重,维度和输入特征数一致;偏置截距b单独存在clf.intercept_属性中,完整决策函数为特征权重·输入样本 + 截距,已经包含了偏置项。 - 你现在同时手动加全1列、又开
fit_intercept=True属于重复配置,相当于给模型引入了两次偏置,会干扰权重的正常学习,正确的二选一方案为:- 常规方案:直接使用原始特征矩阵,保留
fit_intercept=True,读取模型自带的intercept_作为偏置即可; - 自定义方案:如果确实需要手动拼接全1偏置列,需要将
fit_intercept设为False,此时全1列对应的权重会作为偏置项合并在coef_的最后一维,不会额外生成独立截距。
- 常规方案:直接使用原始特征矩阵,保留
操作优化提示
你当前手动用LabelBinarizer拆分标签、循环训练3个OvR分类器的步骤其实可以省略:scikit-learn的LogisticRegression已内置OvR多分类逻辑,直接传入原始单维度类别标签、设置multi_class='ovr',即可自动完成3个二分类器的训练,不需要手动做标签二值化和循环。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

