逻辑斯特回归和SVM 对比

夙愿已清 提交于 2020-01-12 01:37:44

逻辑斯特回归和SVM 对比

对于 LogisticRegression 和 LinearSVC,决定正则化强度的权衡参数叫作
C。 C 值越 # 大,对应的正则化越弱。
换句话说,如果参数 C 值较大,那么 LogisticRegression 和 # LinearSVC 将尽可能将训练集拟合到最好,而如果 C 值较小,那么模型更强调使系数向量 # (w)接近于 0。

from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
​
X, y = mglearn.datasets.make_forge()# 画子图
fig, axes = plt.subplots(1, 2, figsize=(10, 3))
# 逻辑斯特回归和SVM
for model, ax in zip([LinearSVC(), LogisticRegression()], axes):
    clf = model.fit(X, y)
    mglearn.plots.plot_2d_separator(clf, X, fill=False, eps=0.5,
                                    ax=ax, alpha=.7)
    mglearn.discrete_scatter(X[:, 0], X[:, 1], y, ax=ax)
    ax.set_title("{}".format(clf.__class__.__name__))
    ax.set_xlabel("Feature 0")
    ax.set_ylabel("Feature 1")
axes[0].legend()
# 查看决策边界
# 我们可以将 LogisticRegression 和 LinearSVC 模型应用到 forge 数据集上,并将线性模型
# 找到的决策边界可视化

在这里插入图片描述

# 这张图中, forge 数据集的第一个特征位于 x 轴,第二个特征位于 y 轴,与前面相同。
# 图中分别展示了 LinearSVC 和 LogisticRegression 得到的决策边界,都是直线,将顶部归
# 为类别 1 的区域和底部归为类别 0 的区域分开了# 对于 LogisticRegression 和 LinearSVC,决定正则化强度的权衡参数叫作 C。 C 值越
# 大,对应的正则化越弱。换句话说,如果参数 C 值较大,那么 LogisticRegression 和
# LinearSVC 将尽可能将训练集拟合到最好,而如果 C 值较小,那么模型更强调使系数向量
# (w)接近于 0。
# 参数 C 的作用还有另一个有趣之处。较小的 C 值可以让算法尽量适应“大多数”数据点,
# 而较大的 C 值更强调每个数据点都分类正确的重要性。下面是使用 LinearSVC 的图示
# (图 2-16):
mglearn.plots.plot_linear_svc_regularization()
mglearn.plots.plot_linear_svc_regularization()

在这里插入图片描述
在左侧的图中, C 值很小,对应强正则化

# 在左侧的图中, C 值很小,对应强正则化。大部分属于类别 0 的点都位于底部,大部分属
# 于类别 1 的点都位于顶部。强正则化的模型会选择一条相对水平的线,有两个点分类错
# 误。在中间的图中, C 值稍大,模型更关注两个分类错误的样本,使决策边界的斜率变大。
# 最后,在右侧的图中,模型的 C 值非常大,使得决策边界的斜率也很大,现在模型对类
# 别 0 中所有点的分类都是正确的。类别 1 中仍有一个点分类错误,这是因为对这个数据集
# 来说,不可能用一条直线将所有点都分类正确。右侧图中的模型尽量使所有点的分类都正
# 确,但可能无法掌握类别的整体分布。换句话说,这个模型很可能过拟合
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!