我目前正在使用sklearn的Logistic回归函数来处理合成的2d问题。数据集如下所示:
我基本上将数据插入到sklearn的模型中,这就是我得到的(浅绿色;忽略深绿色):
这个代码只有两行; model = LogisticRegression(); model.fit(tr_data,tr_labels)。我检查了绘图功能;那很好。我没有使用正规化器(应该影响它吗?)
对我而言,边界的行为似乎很奇怪。直觉上我认为它们应该更加对角线,因为数据(大部分)位于右上角和左下角,并且通过测试一些东西,似乎一些杂散的数据点是导致边界以这种方式运行的原因。 p>
例如,这是另一个数据集及其边界
有人知道可能导致这种情况的原因吗?根据我的理解,Logistic回归不应该对异常值敏感。
答案 0 :(得分:1)
你的模型过度拟合数据(它发现的决策区域在训练集上的表现确实比你期望的对角线更好。)
当所有数据以概率1正确分类时,损失是最佳的。到决策边界的距离输入概率计算。非正则化算法可以使用大权重来使决策区域非常清晰,因此在您的示例中,它找到了最佳解决方案,其中(某些)异常值被正确分类。
通过更强大的正规化,你可以防止这种情况发生,并且距离起到更大的作用。尝试反正则化强度C
的不同值,例如
model = LogisticRegression(C=0.1)
model.fit(tr_data,tr_labels)
注意:默认值C=1.0
已经对应于逻辑回归的正则化版本。
答案 1 :(得分:0)
让我们在这里进一步说明为什么逻辑回归过拟合:毕竟,只有几个异常值,但还有数百个其他数据点。看看为什么有助于指出这一点 logistic loss is kind of a smoothed version of hinge loss (used in SVM).
SVM根本不“关注”利润率正确一侧的样本-只要它们不超过利润率,便会造成零成本。由于逻辑回归是支持向量机的平滑版本,因此遥远的样本确实会造成成本,但与接近决策边界的样本所造成的成本相比,可以忽略不计。
因此,与例如线性判别分析表明,靠近决策边界的样本比远处的样本对解决方案的影响更大。