網(wǎng)站首頁 編程語言 正文
原理
SVM被提出于1964年,在二十世紀(jì)90年代后得到快速發(fā)展并衍生出一系列改進(jìn)和擴(kuò)展算法,在人像識別、文本分類等模式識別(pattern recognition)問題中有得到應(yīng)用。
支持向量機(jī)(Support Vector Machine, SVM)是一類按監(jiān)督學(xué)習(xí)(supervised learning) 方式對數(shù)據(jù)進(jìn)行二元分類的廣義線性分類器(generalized linear classifier),其決策邊界是對學(xué)習(xí)樣本求解的最大邊距超平面(maximum-margin hyperplane)
SVM可以通過核方法(kernel method)進(jìn)行非線性分類,是常見的核學(xué)習(xí)(kernel learning)方法之一。
分類理論
在分類問題中給定輸入數(shù)據(jù)和學(xué)習(xí)目標(biāo):X = { X1, X2,…Xn },Y = { y1,y2,…yn}。
其中輸入數(shù)據(jù)的每個樣本都包含多個特征并由此構(gòu)成特征空間(feature space):Xi = { x1,x2…xn} ,而學(xué)習(xí)目標(biāo)為二元變量 y { ? 1 , 1 } y\{-1,1\} y{?1,1}表示負(fù)類(negative class)和正類(positive class)。
若輸入數(shù)據(jù)所在的特征空間存在作為決策邊界(decision boundary)的超平面將學(xué)習(xí)目標(biāo)按正類和負(fù)類分開,并使任意樣本的點(diǎn)到平面距離大于等于1,則稱該分類問題具有線性可分性,參數(shù) w,b分別為超平面的法向量和截距。
滿足該條件的決策邊界實(shí)際上構(gòu)造了2個平行的超平面作為間隔邊界以判別樣本的分類:
所有在上間隔邊界上方的樣本屬于正類,在下間隔邊界下方的樣本屬于負(fù)類。
兩個間隔邊界的距離 d = 2 ∥ w ∥ d=\frac{2}{\|w\|} d=∥w∥2?被定義為邊距(margin),位于間隔邊界上的正類和負(fù)類樣本為支持向量(support vector)。
確定最大間距
SVM多分類
SVM算法最初是為二值分類問題設(shè)計(jì)的,當(dāng)處理多類問題時,就需要構(gòu)造合適的多類分類器。
目前,構(gòu)造SVM多類分類器的方法主要有兩類:
- 一類是直接法,直接在目標(biāo)函數(shù)上進(jìn)行修改,將多個分類面的參數(shù)求解合并到一個最優(yōu)化問題中,通過求解該最優(yōu)化問題“一次性”實(shí)現(xiàn)多類分類。這種方法看似簡單,但其計(jì)算復(fù)雜度比較高,實(shí)現(xiàn)起來比較困難,只適合用于小型問題中;
- 另一類是間接法,主要是通過組合多個二分類器來實(shí)現(xiàn)多分類器的構(gòu)造,常見的方法有one-against-one和one-against-all兩種。
a.一對多法(one-versus-rest,簡稱1-v-r-SVMs)。
- 訓(xùn)練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構(gòu)造出了k個SVM。分類時將未知樣本分類為具有最大分類函數(shù)值的那類。
b.一對一法(one-versus-one,簡稱1-v-1 SVMs)。
- 其做法是在任意兩類樣本之間設(shè)計(jì)一個SVM,因此k個類別的樣本就需要設(shè)計(jì)k(k-1)/2個SVM。當(dāng)對一個未知樣本進(jìn)行分類時,最后得票最多的類別即為該未知樣本的類別。Libsvm中的多類分類就是根據(jù)這個方法實(shí)現(xiàn)的。
Python實(shí)現(xiàn)
多分類
X_train, X_test, y_train, y_test = train_test_split(feature, label, test_size=.2,random_state=0)
# 訓(xùn)練模型
model = OneVsRestClassifier(svm.SVC(kernel='linear',probability=True,random_state=random_state))
print("[INFO] Successfully initialize a new model !")
print("[INFO] Training the model…… ")
clt = model.fit(X_train,y_train)
print("[INFO] Model training completed !")
# 保存訓(xùn)練好的模型,下次使用時直接加載就可以了
joblib.dump(clt,"F:/python/model/conv_19_80%.pkl")
print("[INFO] Model has been saved !")
y_test_pred = clt.predict(X_test)
ov_acc = metrics.accuracy_score(y_test_pred,y_test)
print("overall accuracy: %f"%(ov_acc))
print("===========================================")
acc_for_each_class = metrics.precision_score(y_test,y_test_pred,average=None)
print("acc_for_each_class:\n",acc_for_each_class)
print("===========================================")
avg_acc = np.mean(acc_for_each_class)
print("average accuracy:%f"%(avg_acc))
二分類
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> y = np.array([1, 1, 2, 2])
>>> from sklearn.svm import SVC
>>> clf = SVC()
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
>>> print(clf.predict([[-0.8, -1]]))
[1]
總結(jié)
原文鏈接:https://blog.csdn.net/Jeremy_lf/article/details/104871770
相關(guān)推薦
- 2022-03-19 MongoDB數(shù)據(jù)庫授權(quán)認(rèn)證的實(shí)現(xiàn)_MongoDB
- 2022-11-28 基于GORM實(shí)現(xiàn)CreateOrUpdate方法詳解_Golang
- 2023-05-13 python中數(shù)字列表轉(zhuǎn)化為數(shù)字字符串的實(shí)例代碼_python
- 2023-04-18 GO語言字符串常用操作小結(jié)_Golang
- 2022-08-14 hyper-v如何配置NAT網(wǎng)絡(luò)的實(shí)現(xiàn)_Hyper-V
- 2022-06-18 kubernetes(k8s)安裝metrics-server實(shí)現(xiàn)資源使用情況監(jiān)控方式詳解_云其它
- 2022-10-03 Pandas中inf值替換的方法_python
- 2022-05-23 如何在Python?中使用?join()?函數(shù)把列表拼接成一個字符串_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支