逻辑回归决策边界绘制异常问题求助及原因咨询
问题分析与解决
嘿,我来帮你搞清楚这个决策边界的问题~
首先,核心问题出在你对逻辑回归决策边界的方程推导,和代码里特征与权重的对应关系搞混了,咱们一步步拆解:
1. 先理清楚你的特征和权重对应关系
看你的代码里构造输入特征的部分:
Xs = np.hstack((X, np.ones((n*2,1)))) # (200, 3)
这里的Xs每一行是 [x₁, x₂, 1],其中:
x₁是第一个特征(对应图上的x轴)x₂是第二个特征(对应图上的y轴)- 最后一列的
1是偏置项,用来拟合截距
而你的权重矩阵w是(3,1)的维度,对应:
w[0]→x₁的权重w[1]→x₂的权重w[2]→ 偏置项(截距)
2. 逻辑回归决策边界的正确推导
逻辑回归的决策边界是模型输出概率为0.5的点,此时线性组合部分等于0:
w₀*x₁ + w₁*x₂ + w₂ = 0
我们需要把这个方程转换成x₂ = f(x₁)的形式(因为图上x轴是x₁,y轴是x₂),解这个方程:
w₁*x₂ = -w₀*x₁ - w₂ x₂ = (-w₀*x₁ - w₂) / w₁
对应到代码里就是:
y = (-(w[0].item()*x + w[2])/w[1]).T
这正是你调整后能正常工作的公式!
3. 为什么原始公式不对?
你最初写的公式是:
y = (-(w[0]+w[1].item()*x)/w[2]).T
这个式子相当于你把方程写成了:
w₁*x₁ + w₀ + w₂*x₂ = 0
完全颠倒了权重和特征的对应关系:把w[1]当成了x₁的权重,把w[2]当成了x₂的权重,还把w[0]当成了偏置项,自然画出来的边界完全不符合预期。
补充:为什么损失收敛但边界不对?
损失函数收敛说明你的模型训练过程是对的,权重w已经学到了正确的参数,但绘制边界时代入的方程错误,和模型本身无关——就像你算对了数学题的答案,但写在答题卡上的位置错了,结果当然不对。
小建议
以后可以给变量加更清晰的注释,或者把偏置项单独处理,比如:
# 明确拆分权重和偏置 w_weights = w[:2] b = w[2] # 然后推导决策边界 y = (-(b + w_weights[0].item()*x)/w_weights[1]).T
这样能减少混淆的概率~
内容的提问来源于stack exchange,提问作者Marcel Braasch
相关产品推荐
相关产品推荐

