更新时间:2023-10-19 来源:黑马程序员 浏览量:
逻辑回归(Logistic Regression,LR)和支持向量机(Support Vector Machine,SVM)都是监督学习算法,用于分类问题。它们有一些共同点,但也有明显的区别。下面将详细说明它们之间的联系和区别,并提供Python代码示例来演示它们的用法。
1.用途:LR和SVM都用于二元分类和多类分类问题。
2.线性分类器:LR和SVM都是线性分类器,它们试图找到一个分割超平面来将不同类别的数据分开。
1.损失函数:
(1)LR使用对数损失函数(Logistic Loss),也称为交叉熵损失函数。
(2)SVM使用合页损失函数(Hinge Loss)。
2.决策边界:
(1)LR的决策边界是一条直线(在二维空间中)或一个超平面(在多维空间中),它尝试最大程度地拟合数据分布。
(2)SVM的决策边界是支持向量,它是离决策边界最近的数据点,SVM尝试最大化这些支持向量与决策边界的距离。
3.输出值:
(1)LR输出类别的概率,可以用于估计数据点属于某一类的概率。
(2)SVM输出是样本点到决策边界的距离,没有直接的概率解释。
4.鲁棒性:
(1)LR对噪声和异常点比较敏感,容易过拟合。
(2)SVM在决策边界附近的支持向量上更加鲁棒,对噪声的容忍性更好。
下面是使用Python的scikit-learn库演示如何使用LR和SVM进行分类:
# 导入必要的库 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.datasets import make_classification # 创建一个模拟数据集 X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42) # 创建和训练逻辑回归模型 lr = LogisticRegression() lr.fit(X, y) # 创建和训练支持向量机模型 svm = SVC(kernel='linear') svm.fit(X, y) # 画出数据点和决策边界 plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired) ax = plt.gca() xlim = ax.get_xlim() ylim = ax.get_ylim() # 绘制逻辑回归的决策边界 xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50)) Z = lr.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8) plt.title("Logistic Regression Decision Boundary") plt.show() # 绘制支持向量机的决策边界 xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50)) Z = svm.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, levels=[-1, 0, 1], alpha=0.8) plt.title("Support Vector Machine Decision Boundary") plt.show()
这段代码创建了一个模拟数据集,使用逻辑回归和支持向量机训练了两个不同的分类器,并绘制了它们的决策边界。您可以看到LR的决策边界是一条直线,而SVM的决策边界是支持向量附近的线。这个示例可以帮助我们理解LR和SVM之间的一些区别。