更新時間:2023-10-19 來源:黑馬程序員 瀏覽量:
邏輯回歸(Logistic Regression,LR)和支持向量機(Support Vector Machine,SVM)都是監(jiān)督學(xué)習(xí)算法,用于分類問題。它們有一些共同點,但也有明顯的區(qū)別。下面將詳細說明它們之間的聯(lián)系和區(qū)別,并提供Python代碼示例來演示它們的用法。
1.用途:LR和SVM都用于二元分類和多類分類問題。
2.線性分類器:LR和SVM都是線性分類器,它們試圖找到一個分割超平面來將不同類別的數(shù)據(jù)分開。
1.損失函數(shù):
(1)LR使用對數(shù)損失函數(shù)(Logistic Loss),也稱為交叉熵損失函數(shù)。
(2)SVM使用合頁損失函數(shù)(Hinge Loss)。
2.決策邊界:
(1)LR的決策邊界是一條直線(在二維空間中)或一個超平面(在多維空間中),它嘗試最大程度地擬合數(shù)據(jù)分布。
(2)SVM的決策邊界是支持向量,它是離決策邊界最近的數(shù)據(jù)點,SVM嘗試最大化這些支持向量與決策邊界的距離。
3.輸出值:
(1)LR輸出類別的概率,可以用于估計數(shù)據(jù)點屬于某一類的概率。
(2)SVM輸出是樣本點到?jīng)Q策邊界的距離,沒有直接的概率解釋。
4.魯棒性:
(1)LR對噪聲和異常點比較敏感,容易過擬合。
(2)SVM在決策邊界附近的支持向量上更加魯棒,對噪聲的容忍性更好。
下面是使用Python的scikit-learn庫演示如何使用LR和SVM進行分類:
# 導(dǎo)入必要的庫 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 # 創(chuàng)建一個模擬數(shù)據(jù)集 X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42) # 創(chuàng)建和訓(xùn)練邏輯回歸模型 lr = LogisticRegression() lr.fit(X, y) # 創(chuàng)建和訓(xùn)練支持向量機模型 svm = SVC(kernel='linear') svm.fit(X, y) # 畫出數(shù)據(jù)點和決策邊界 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()
這段代碼創(chuàng)建了一個模擬數(shù)據(jù)集,使用邏輯回歸和支持向量機訓(xùn)練了兩個不同的分類器,并繪制了它們的決策邊界。您可以看到LR的決策邊界是一條直線,而SVM的決策邊界是支持向量附近的線。這個示例可以幫助我們理解LR和SVM之間的一些區(qū)別。