wordpress 4.8中文版高級seo是什么職位
歸納編程學(xué)習(xí)的感悟,
記錄奮斗路上的點(diǎn)滴,
希望能幫到一樣刻苦的你!
如有不足歡迎指正!
共同學(xué)習(xí)交流!
🌎歡迎各位→點(diǎn)贊 👍+ 收藏? + 留言?📝
心態(tài)決定高度,細(xì)節(jié)決定成敗!
??
初識SVM算法:
????????支持向量機(jī)(Support Vector Machine, SVM)是一種監(jiān)督學(xué)習(xí)算法,主要用于分類和回歸分析。SVM的基本模型是定義在特征空間上的間隔最大的線性分類器,其決策邊界是對學(xué)習(xí)樣本求解的最大邊距超平面(maximum-margin hyperplane)。在分類任務(wù)中,SVM試圖找到一個超平面來區(qū)分不同類別的數(shù)據(jù),這個超平面不僅需要正確地分類訓(xùn)練數(shù)據(jù),而且還要確保兩類數(shù)據(jù)到這個超平面的距離最大化,這樣可以使得模型具備更好的泛化能力。
????????SVM能夠執(zhí)行線性或非線性分類、回歸,甚至是異常值檢測任務(wù)。它是機(jī)器學(xué)習(xí)領(lǐng)域最受歡迎的模型之一。SVM特別適用于中小型復(fù)雜數(shù)據(jù)集的分類。
超平?最?間隔
下面左圖顯示了三種可能的線性分類器的決策邊界,虛線代表的模型表現(xiàn)?常糟糕,甚?都?法正確實(shí)現(xiàn)分類。
其余兩個模型(紅線和紫線)在訓(xùn)練集上表現(xiàn)比較完美,但是它們的決策邊界與實(shí)例過于接近,導(dǎo)致在?對新實(shí)例時,表現(xiàn)可能不會太好。
而下面右圖中的實(shí)線代表不僅分離了兩個類別,且盡可能遠(yuǎn)離最近的訓(xùn)練實(shí)例
硬間隔和軟間隔:
硬間隔分類:
????????在上面我們使用超平面進(jìn)行分割數(shù)據(jù)的過程中,如果我們嚴(yán)格地讓所有實(shí)例都不在最大間隔之間,并且位于正確的一邊,這就是硬間隔分類。
????????硬間隔分類有兩個問題,首先,它只在數(shù)據(jù)是線性可分離的時候才有效;其次,它對異常值非常敏感。
軟間隔分類:
????????要避免這些問題,最好使用更靈活的模型。目標(biāo)是盡可能在保持最大間隔寬闊和限制間隔違例(即位于最大間隔之上,甚至在錯誤的一邊的實(shí)例)之間找到良好的平衡,這就是軟間隔分類。
下面我們來用python寫一個簡單的SVM模型:
使用Python實(shí)現(xiàn)一個簡單的SVM算法,可以使用scikit-learn
庫,這是一個非常流行的機(jī)器學(xué)習(xí)庫,它提供了SVM的支持。
首先,需要安裝scikit-learn,
可以通過pip來安裝:
pip install scikit-learn
# 導(dǎo)入必要的庫
from sklearn import svm # SVM分類器
from sklearn.datasets import make_blobs # 生成模擬數(shù)據(jù)
import numpy as np # 數(shù)值計算庫# 生成一些隨機(jī)數(shù)據(jù)點(diǎn),分成兩組
X, y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)# 創(chuàng)建一個線性核函數(shù)的SVM分類器
# kernel='linear' 指定使用線性核函數(shù)
# C=1.0 是懲罰參數(shù)C的倒數(shù),表示對誤分類的容忍度
clf = svm.SVC(kernel='linear', C=1.0)# 使用生成的數(shù)據(jù)訓(xùn)練SVM模型
# fit方法接受特征矩陣X和目標(biāo)向量y
clf.fit(X, y)# 生成兩個新的數(shù)據(jù)點(diǎn),準(zhǔn)備用于預(yù)測
new_data = np.array([[0, 0], [1, 1]])# 使用訓(xùn)練好的模型對新數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測
predictions = clf.predict(new_data)# 打印預(yù)測結(jié)果
print("Predictions:", predictions)
代碼解釋:
-
導(dǎo)入必要的庫:
sklearn
:Scikit-Learn庫,提供了各種機(jī)器學(xué)習(xí)算法。numpy
:用于數(shù)值運(yùn)算的庫。
-
生成數(shù)據(jù):
make_blobs
函數(shù)用于生成一組模擬的聚類數(shù)據(jù)點(diǎn)。n_samples
參數(shù)指定要生成的數(shù)據(jù)點(diǎn)數(shù)量。centers
參數(shù)指定中心點(diǎn)的數(shù)量,本例中為2,意味著生成的數(shù)據(jù)將大致分為兩組。random_state
用于設(shè)置隨機(jī)種子,保證每次運(yùn)行生成相同的數(shù)據(jù)。cluster_std
參數(shù)指定了簇的標(biāo)準(zhǔn)差,用來控制生成數(shù)據(jù)的分散程度。
-
創(chuàng)建SVM分類器:
svm.SVC()
創(chuàng)建一個支持向量分類器對象。kernel='linear'
參數(shù)指定使用線性核函數(shù),即尋找一個線性決策邊界。C=1.0
參數(shù)控制了對誤分類的懲罰程度,較大的C值意味著模型對誤分類的容忍度更低。 -
訓(xùn)練模型:
fit(X, y)
方法用于訓(xùn)練模型,其中X
是特征矩陣,y
是目標(biāo)向量。 -
預(yù)測新數(shù)據(jù):
predict(new_data)
方法用于對新的數(shù)據(jù)點(diǎn)進(jìn)行分類預(yù)測。 -
輸出結(jié)果:
最后,打印出對新數(shù)據(jù)點(diǎn)的預(yù)測結(jié)果。
????????這個示例展示了如何使用scikit-learn
的SVC
類創(chuàng)建并訓(xùn)練一個簡單的線性SVM分類器,并使用該分類器對新的數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測。這種類型的SVM非常適合處理線性可分的問題。