中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
svm,一個強大算法 詳細總結(jié)??!

核心點:關(guān)于svm的介紹,以及代碼示例!

哈嘍,我是cos大壯!

記得最初學習SVM的時候,既有激動又有崇拜,也不知道為什么?總是和開始學習的回歸、聚類不太一樣。

在這之前咱們已經(jīng)接觸了 各個算法的優(yōu)缺點的總結(jié),以及8個回歸類算法、7個正則化算法的總結(jié)、5 個集成算法模型的全部總結(jié)!

感興趣的可以翻到之前看看~

咱們今天就大概一起學習一下關(guān)于SVM的方方面面。

  • 線性支持向量機
  • 非線性支持向量機
  • 多類別支持向量機
  • 核函數(shù)支持向量機
  • 稀疏支持向量機
  • 核貝葉斯支持向量機
  • 不平衡類別支持向量機

先來啰嗦幾點關(guān)于 SVM 的優(yōu)勢和劣勢

優(yōu)勢:

1、適用性廣泛:SVM支持向量機在解決分類和回歸問題上表現(xiàn)出色,可應用于各種數(shù)據(jù)類型和領(lǐng)域,例如文本分類、圖像識別和生物信息學等。

2、魯棒性強:SVM支持向量機對于訓練數(shù)據(jù)中的噪聲和異常點具有一定的魯棒性,可以有效地處理輸入數(shù)據(jù)中的噪聲。

3、可避免陷入局部最優(yōu)解:由于SVM支持向量機使用了結(jié)構(gòu)風險最小化原則,它能夠更好地避免陷入局部最優(yōu)解,并且具有較低的泛化誤差。

4、高維空間有效:SVM支持向量機通過核技巧將低維空間的非線性問題映射到高維空間,在高維空間中進行線性劃分,從而有效地解決了復雜的非線性問題。

5、可控制的過擬合:SVM支持向量機通過調(diào)整正則化參數(shù)和松弛變量來控制模型的復雜度,從而可以有效地避免過擬合問題。

劣勢:

1、計算復雜度高:SVM支持向量機在大規(guī)模數(shù)據(jù)集上的訓練時間較長,特別是對于非線性問題和核函數(shù)的使用。

2、參數(shù)選擇敏感:SVM支持向量機中的參數(shù)調(diào)優(yōu)過程通常需要進行交叉驗證,對于不同的問題和數(shù)據(jù)集,選擇合適的參數(shù)可能會比較困難。

3、對缺失數(shù)據(jù)敏感:SVM支持向量機對于含有大量缺失數(shù)據(jù)的情況可能表現(xiàn)不佳,需要在預處理階段進行適當?shù)奶幚怼?/p>

4、適用于二分類問題:原始的SVM支持向量機算法只能解決二分類問題,對于多類別問題需要進行擴展或使用其他方法。

盡管SVM支持向量機存在一些劣勢,但其優(yōu)勢使得它成為了數(shù)據(jù)分析和機器學習領(lǐng)域中一個重要的算法之一。

在實際工作中,我們可以根據(jù)具體問題的特點和需求來選擇合適的分類算法。

大家伙如果覺得還不錯!可以點贊、轉(zhuǎn)發(fā)安排起來,讓更多的朋友看到。

ok,咱們一起來學習一下~

線性支持向量機

線性支持向量機是一種用于解決分類問題的機器學習算法。

它的目標是找到一個能夠在數(shù)據(jù)中畫出一條直線(或者高維空間中的超平面),將不同類別的數(shù)據(jù)點分隔開,并且最大化兩側(cè)最靠近這條線的數(shù)據(jù)點之間的距離。

這兩側(cè)最靠近線的數(shù)據(jù)點被稱為支持向量。

線性SVM在以下情況下非常有用:

  • 二分類問題,即將數(shù)據(jù)分為兩個類別。
  • 當數(shù)據(jù)可以被線性分割時,即存在一條直線可以很好地將兩個類別分開。
  • 當需要一個高度可解釋的模型,因為SVM的決策邊界是直線或超平面,非常容易可視化和解釋。

線性SVM的決策函數(shù)可以表示為:

其中, 是預測的類別, 是權(quán)重向量, 是輸入特征向量, 是偏置(或截距), 表示向量的點積。決策函數(shù)的目標是使支持向量到?jīng)Q策邊界的距離最大化,這個距離稱為間隔。

我們創(chuàng)建一個簡單的線性SVM模型,大家可以直接運行起來:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm

# 生成一些隨機數(shù)據(jù)
X, y = datasets.make_classification(n_samples=100, n_features=2, n_classes=2, n_clusters_per_class=1, n_redundant=0)

# 創(chuàng)建SVM模型
clf = svm.SVC(kernel='linear')
clf.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()

# 創(chuàng)建網(wǎng)格來評估模型
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 繪制決策邊界和間隔
plt.contour(xx, yy, Z, colors='k', levels=[-101], alpha=0.5, linestyles=['--''-''--'])
plt.show()

其中包括數(shù)據(jù)點、決策邊界和間隔。

非線性支持向量機

非線性支持向量機的神奇之處在于,它可以幫助我們把不同形狀的數(shù)據(jù)分開,像拼圖一樣。

有時,我們不能僅僅用一條直線分開這些數(shù)據(jù),所以我們需要一些特殊的技巧,這就是非線性SVM的用武之地。

非線性SVM在很多情況下都非常有用,比如:

  • 當數(shù)據(jù)不是線性分布的,也就是說,不能只用一條直線把它們分開。
  • 當我們需要解決更復雜的問題,如圖像識別或自然語言處理,這些問題通常不適合線性方法。
  • 當我們希望用一種更復雜的方式來分隔數(shù)據(jù),以獲取更好的結(jié)果。

另外,非線性SVM的數(shù)學公式比較復雜,但我們可以簡化為:它是一種方法,可以將數(shù)據(jù)映射到一個不同的空間,然后在那個空間中使用線性SVM。這個映射是通過一個叫做核函數(shù)來完成的。這個核函數(shù)通常表示為,它將原始數(shù)據(jù)映射到一個新的空間。

下面是一個使用非線性SVM的Python案例,以幫助理解。

我們將使用支持向量機庫svm中的SVC類,并使用徑向基函數(shù)(RBF)核。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import svm

# 創(chuàng)建一些具有非線性特征的數(shù)據(jù)
X, y = datasets.make_circles(n_samples=100, factor=0.5, noise=0.1)

# 創(chuàng)建非線性SVM模型
clf = svm.SVC(kernel='rbf')
clf.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()

# 創(chuàng)建網(wǎng)格來評估模型
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 繪制決策邊界和間隔
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
plt.show()

上面代碼,展示了使用非線性SVM將非線性數(shù)據(jù)分隔開。



多類別支持向量機

多類別支持向量機可以應用于許多實際問題中。

比如,當我們有很多動物的照片,我們想知道每個動物的種類;或者當我們有很多水果的特征數(shù)據(jù),我們想根據(jù)這些特征將水果分類。

我們可以用一些數(shù)學公式來描述多類別支持向量機。假設(shè)我們有n個數(shù)據(jù)點,每個數(shù)據(jù)點有兩個特征,分別用x和y表示。我們還有k個類別,用1到k的數(shù)字表示。

多類別支持向量機的目標是找到一條線(或曲線),可以將不同類別的點分開。我們可以使用以下公式表示多類別支持向量機的決策規(guī)則:

對于每個類別i(從):

如果 ,則數(shù)據(jù)點屬于類別;否則,數(shù)據(jù)點不屬于類別。

其中是用來控制決策邊界的參數(shù)。

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import matplotlib.pyplot as plt

# 加載數(shù)據(jù)集(這里使用鳶尾花數(shù)據(jù)集作為示例)
iris = datasets.load_iris()
X = iris.data[:, :2]  # 只選取前兩個特征
y = iris.target

# 將數(shù)據(jù)集拆分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 創(chuàng)建多類別支持向量機模型,選擇線性核函數(shù)
svm = SVC(kernel='linear')
svm.fit(X_train, y_train)

# 預測測試集中的類別
y_pred = svm.predict(X_test)

# 繪制決策邊界和樣本點
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')

# 繪制支持向量
support_vectors = svm.support_vectors_
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], s=100, facecolors='none', edgecolors='k')

# 繪制特殊點
special_points = [[5.93.0], [6.22.8]]
plt.scatter([point[0for point in special_points], [point[1for point in special_points], color='red', marker='x')

# 繪制決策邊界
xlim = plt.gca().get_xlim()
ylim = plt.gca().get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = svm.decision_function(xy).reshape(XX.shape)
plt.contour(XX, YY, Z, colors='k', levels=[-101], alpha=0.5, linestyles=['--''-''--'])

plt.show()

圖中的點代表不同類型的花,顏色不同表示不同的類別。

核函數(shù)支持向量機

核函數(shù)支持向量機使用場景很多,比如在圖像識別、文本分類和生物信息學等領(lǐng)域都有應用。

核函數(shù)支持向量機的公式表達如下:

給定一個訓練集 ,其中  是輸入特征向量, 是對應的類別標簽。核函數(shù)支持向量機的目標是找到一個超平面,將不同類別的樣本分隔開來。

公式表示為:

其中, 是核函數(shù),它的作用是將輸入特征映射到高維空間。   是模型參數(shù),通過訓練得到。

咱們再來舉一個例子:

from sklearn import svm
import matplotlib.pyplot as plt
import numpy as np

# 生成樣本數(shù)據(jù)
X = np.array([[12], [34], [56], [78]])
y = np.array([0011])

# 創(chuàng)建核函數(shù)支持向量機模型
model = svm.SVC(kernel='rbf')

# 擬合數(shù)據(jù)
model.fit(X, y)

# 繪制決策邊界
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# 創(chuàng)建網(wǎng)格來評估模型
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)

# 繪制決策邊界和支持向量
ax.contour(XX, YY, Z, colors='k', levels=[-101], alpha=0.5,
           linestyles=['--''-''--'])
ax.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],
           s=100, facecolors='none', edgecolors='k')

plt.show()

上述代碼首先使用樣本數(shù)據(jù)訓練一個核函數(shù)支持向量機模型,然后通過繪制決策邊界和支持向量的方式可視化分類結(jié)果。決策邊界是用實線表示的,支持向量是用空心圓點表示的。

稀疏支持向量機

當我們使用稀疏支持向量機來解決一個分類問題時,我們希望找到一個超平面,能夠?qū)⒉煌悇e的數(shù)據(jù)點有效地分開。

稀疏支持向量機通常用于處理大規(guī)模數(shù)據(jù)集或高維特征的分類問題。例如,在醫(yī)學圖像識別中,當需要處理數(shù)百萬個像素的圖像數(shù)據(jù)時,稀疏支持向量機可以高效地分類;在自然語言處理中,當需要處理大量文本特征時,該算法也能發(fā)揮作用。

給定訓練數(shù)據(jù)集 ,其中  是輸入特征向量, 是對應的類別標簽。

稀疏支持向量機的目標是找到一個超平面,使得盡可能多的訓練數(shù)據(jù)點離該超平面的距離最大化。

公式表示為:

其中, 是關(guān)于訓練數(shù)據(jù)點的權(quán)重系數(shù), 是對應數(shù)據(jù)點的類別(1代表正類,-1代表負類), 是核函數(shù),用于計算數(shù)據(jù)點之間的相似度。

舉一個關(guān)于稀疏支持向量機的例子,大家只要安裝了相應的包即可直接運行起來:

from sklearn import svm
import matplotlib.pyplot as plt
import numpy as np

# 生成樣本數(shù)據(jù)
X = np.array([[12], [34], [56], [78]])
y = np.array([0011])

# 創(chuàng)建稀疏支持向量機模型
model = svm.SVC(kernel='linear')

# 擬合數(shù)據(jù)
model.fit(X, y)

# 繪制數(shù)據(jù)點
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')

# 繪制超平面
w = model.coef_[0]
b = model.intercept_[0]
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim()
xx = np.linspace(x_min, x_max)
yy = -(w[0] * xx + b) / w[1]
plt.plot(xx, yy, 'k-')

# 繪制支持向量
support_vectors = model.support_vectors_
plt.scatter(support_vectors[:, 0], support_vectors[:, 1],
            s=200, facecolors='none', edgecolors='k')

plt.show()

上述代碼使用給定的樣本數(shù)據(jù)訓練一個稀疏支持向量機模型,并繪制數(shù)據(jù)點、超平面以及支持向量。

超平面由wb參數(shù)定義,支持向量表示離超平面最近的數(shù)據(jù)點。

核貝葉斯支持向量機

核貝葉斯支持向量機通過學習一些已知的例子,并找到一個特殊的邊界,用于將不同的事物區(qū)分開來。

核貝葉斯支持向量機可以應用于很多現(xiàn)實生活中的問題。例如:

1、郵件分類:將電子郵件自動分為垃圾郵件和非垃圾郵件。

2、圖像識別:判斷圖像中是貓還是狗。

3、情感分析:自動判斷文本評論是正面還是負面情感。

核貝葉斯支持向量機的公式可以簡化為以下形式:

在這個公式中,代表我們要進行分類的事物。 是與樣本數(shù)據(jù)相關(guān)的權(quán)重, 是每個樣本數(shù)據(jù)對應的類別標簽(例如,1代表一類事物,-1代表另一類事物)。

舉個 Python 的例子

import numpy as np
import plotly.graph_objects as go
from sklearn.svm import SVC

# 生成示例數(shù)據(jù)
X = np.array([[123], [456], [789], [101112]])
y = np.array([0110])

# 創(chuàng)建支持向量機模型
model = SVC(kernel='linear')

# 擬合數(shù)據(jù)
model.fit(X, y)

# 繪制數(shù)據(jù)點
data = [
    go.Scatter3d(
        x=X[:, 0],
        y=X[:, 1],
        z=X[:, 2],
        mode='markers',
        marker=dict(
            size=6,
            color=y,
            colorscale='Viridis',
            opacity=0.8
        )
    )
]

# 繪制決策邊界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
z_min, z_max = X[:, 2].min() - 1, X[:, 2].max() + 1
xx, yy, zz = np.meshgrid(np.arange(x_min, x_max, 0.1),
                         np.arange(y_min, y_max, 0.1),
                         np.arange(z_min, z_max, 0.1))
Z = model.predict(np.c_[xx.ravel(), yy.ravel(), zz.ravel()])
Z = Z.reshape(xx.shape)

# 添加決策邊界到圖形中
data.append(
    go.Surface(
        x=xx,
        y=yy,
        z=zz,
        surfacecolor=Z,
        colorscale='Viridis',
        showscale=False
    )
)

# 創(chuàng)建布局
layout = go.Layout(
    scene=dict(
        xaxis=dict(title='X'),
        yaxis=dict(title='Y'),
        zaxis=dict(title='Z')
    ),
    margin=dict(l=0, r=0, b=0, t=0)
)

# 繪制圖形
fig = go.Figure(data=data, layout=layout)
fig.show()

上述代碼使用示例數(shù)據(jù)訓練了一個核貝葉斯支持向量機模型,并利用 Plotly 生成了直觀的一個三維圖像。

不平衡類別支持向量機

不平衡類別支持向量機是一種分類算法,它使用支持向量機的思想來處理不平衡類別數(shù)據(jù)集。

它的目標是通過調(diào)整決策邊界,使得分類模型能夠更好地識別少數(shù)類別,并提高整體分類準確率。

不平衡類別支持向量機常用于以下場景:

  • 欺詐檢測:在信用卡交易中,欺詐行為往往只占極小比例,而正常交易占大部分。
  • 醫(yī)學診斷:對于某些罕見病癥或疾病,陽性樣本數(shù)量通常較少。
  • 文本分類:在某些特定的主題或事件中,負面評論或垃圾郵件的數(shù)量相對較少。

不平衡類別支持向量機的目標是最小化以下公式:

其中,是決策邊界的權(quán)重向量,是偏置項,是懲罰參數(shù),是松弛變量。

下面是一個簡單的使用不平衡類別支持向量機進行分類的示例代碼:

import numpy as np
from sklearn.svm import SVC
import plotly.graph_objects as go

# 創(chuàng)建訓練數(shù)據(jù)
X = np.array([[34], [56], [78], [910]])
y = np.array([0011])

# 創(chuàng)建不平衡類別支持向量機模型
model = SVC(class_weight='balanced')

# 擬合模型
model.fit(X, y)

# 生成網(wǎng)格點用于繪制決策邊界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 繪制三維圖
fig = go.Figure(data=[go.Surface(z=Z, x=xx, y=yy)])
fig.update_layout(title='Decision Boundary', autosize=False,
                  width=500, height=500, margin=dict(l=65, r=50, b=65, t=90))
fig.show()

這段代碼使用 Scikit-learn 庫中的 SVC 類來創(chuàng)建不平衡類別支持向量機模型,并使用plotly庫繪制三維圖來展示決策邊界。在訓練數(shù)據(jù)中,我們有兩個特征和兩個類別。通過擬合模型并預測網(wǎng)格點上的分類結(jié)果,我們可以得到?jīng)Q策邊界,并將其可視化。

最后

今天介紹了關(guān)于svm的各個細節(jié)和應用。
喜歡的朋友可以收藏、點贊、轉(zhuǎn)發(fā)起來!
關(guān)注本號,帶來更多干貨實例,提升工作學習效率!
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用支持向量機SVM進行分類
一個簡單的案例帶你了解支持向量機算法(Python代碼)
Python 深入淺出支持向量機(SVM)算法
ML之SVM:基于sklearn的svm算法實現(xiàn)對支持向量的數(shù)據(jù)進行標注
機器學習基礎(chǔ)篇:支持向量機(SVM)理論與實踐
數(shù)據(jù)挖掘干貨(k-NN)
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服