欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SVM算法的理解及其Python實(shí)現(xiàn)多分類(lèi)和二分類(lèi)問(wèn)題

 更新時(shí)間:2023年02月01日 14:13:13   作者:Jeremy_lf  
這篇文章主要介紹了SVM算法的理解及其Python實(shí)現(xiàn)多分類(lèi)和二分類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

原理

SVM被提出于1964年,在二十世紀(jì)90年代后得到快速發(fā)展并衍生出一系列改進(jìn)和擴(kuò)展算法,在人像識(shí)別、文本分類(lèi)等模式識(shí)別(pattern recognition)問(wèn)題中有得到應(yīng)用。

支持向量機(jī)(Support Vector Machine, SVM)是一類(lèi)按監(jiān)督學(xué)習(xí)(supervised learning) 方式對(duì)數(shù)據(jù)進(jìn)行二元分類(lèi)的廣義線性分類(lèi)器(generalized linear classifier),其決策邊界是對(duì)學(xué)習(xí)樣本求解的最大邊距超平面(maximum-margin hyperplane)

SVM可以通過(guò)核方法(kernel method)進(jìn)行非線性分類(lèi),是常見(jiàn)的核學(xué)習(xí)(kernel learning)方法之一。

分類(lèi)理論

在分類(lèi)問(wèn)題中給定輸入數(shù)據(jù)和學(xué)習(xí)目標(biāo):X = { X1, X2,…Xn },Y = { y1,y2,…yn}。

其中輸入數(shù)據(jù)的每個(gè)樣本都包含多個(gè)特征并由此構(gòu)成特征空間(feature space):Xi = { x1,x2…xn} ,而學(xué)習(xí)目標(biāo)為二元變量 y { − 1 , 1 } y\{-1,1\} y{−1,1}表示負(fù)類(lèi)(negative class)和正類(lèi)(positive class)

若輸入數(shù)據(jù)所在的特征空間存在作為決策邊界(decision boundary)的超平面將學(xué)習(xí)目標(biāo)按正類(lèi)和負(fù)類(lèi)分開(kāi),并使任意樣本的點(diǎn)到平面距離大于等于1,則稱(chēng)該分類(lèi)問(wèn)題具有線性可分性,參數(shù) w,b分別為超平面的法向量和截距。

滿足該條件的決策邊界實(shí)際上構(gòu)造了2個(gè)平行的超平面作為間隔邊界以判別樣本的分類(lèi):

所有在上間隔邊界上方的樣本屬于正類(lèi),在下間隔邊界下方的樣本屬于負(fù)類(lèi)。

兩個(gè)間隔邊界的距離 d = 2 ∥ w ∥ d=\frac{2}{\|w\|} d=∥w∥2?被定義為邊距(margin),位于間隔邊界上的正類(lèi)和負(fù)類(lèi)樣本為支持向量(support vector)。

確定最大間距

SVM多分類(lèi)

SVM算法最初是為二值分類(lèi)問(wèn)題設(shè)計(jì)的,當(dāng)處理多類(lèi)問(wèn)題時(shí),就需要構(gòu)造合適的多類(lèi)分類(lèi)器。

目前,構(gòu)造SVM多類(lèi)分類(lèi)器的方法主要有兩類(lèi):

  • 一類(lèi)是直接法,直接在目標(biāo)函數(shù)上進(jìn)行修改,將多個(gè)分類(lèi)面的參數(shù)求解合并到一個(gè)最優(yōu)化問(wèn)題中,通過(guò)求解該最優(yōu)化問(wèn)題“一次性”實(shí)現(xiàn)多類(lèi)分類(lèi)。這種方法看似簡(jiǎn)單,但其計(jì)算復(fù)雜度比較高,實(shí)現(xiàn)起來(lái)比較困難,只適合用于小型問(wèn)題中;
  • 另一類(lèi)是間接法,主要是通過(guò)組合多個(gè)二分類(lèi)器來(lái)實(shí)現(xiàn)多分類(lèi)器的構(gòu)造,常見(jiàn)的方法有one-against-one和one-against-all兩種。

a.一對(duì)多法(one-versus-rest,簡(jiǎn)稱(chēng)1-v-r-SVMs)。

  • 訓(xùn)練時(shí)依次把某個(gè)類(lèi)別的樣本歸為一類(lèi),其他剩余的樣本歸為另一類(lèi),這樣k個(gè)類(lèi)別的樣本就構(gòu)造出了k個(gè)SVM。分類(lèi)時(shí)將未知樣本分類(lèi)為具有最大分類(lèi)函數(shù)值的那類(lèi)。

b.一對(duì)一法(one-versus-one,簡(jiǎn)稱(chēng)1-v-1 SVMs)。

  • 其做法是在任意兩類(lèi)樣本之間設(shè)計(jì)一個(gè)SVM,因此k個(gè)類(lèi)別的樣本就需要設(shè)計(jì)k(k-1)/2個(gè)SVM。當(dāng)對(duì)一個(gè)未知樣本進(jìn)行分類(lèi)時(shí),最后得票最多的類(lèi)別即為該未知樣本的類(lèi)別。Libsvm中的多類(lèi)分類(lèi)就是根據(jù)這個(gè)方法實(shí)現(xiàn)的。

Python實(shí)現(xiàn)

多分類(lèi)

  	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)練好的模型,下次使用時(shí)直接加載就可以了
    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))

二分類(lèi)

>>> 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é)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中import導(dǎo)入上一級(jí)目錄模塊及循環(huán)import問(wèn)題的解決

    Python中import導(dǎo)入上一級(jí)目錄模塊及循環(huán)import問(wèn)題的解決

    Python中的import語(yǔ)句導(dǎo)入模塊相信大家再熟悉不過(guò)了,這里我們會(huì)來(lái)講解Python中import導(dǎo)入上一級(jí)目錄模塊及循環(huán)import問(wèn)題的解決,需要的朋友可以參考下
    2016-06-06
  • Python實(shí)現(xiàn)冒泡,插入,選擇排序簡(jiǎn)單實(shí)例

    Python實(shí)現(xiàn)冒泡,插入,選擇排序簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)冒泡,插入,選擇排序簡(jiǎn)單實(shí)例,很適合Python初學(xué)者學(xué)習(xí)參考之用,需要的朋友可以參考下
    2014-08-08
  • python將matplotlib嵌入到tkinter中的步驟詳解

    python將matplotlib嵌入到tkinter中的步驟詳解

    tkinter是Python標(biāo)準(zhǔn)庫(kù)中自帶的GUI工具,使用十分方便,如能將matplotlib嵌入到tkinter中,就可以做出相對(duì)專(zhuān)業(yè)的數(shù)據(jù)展示系統(tǒng),很有競(jìng)爭(zhēng)力,本文就給大家介紹python將matplotlib嵌入到tkinter中的方法步驟,需要的朋友可以參考下
    2023-08-08
  • python QT界面關(guān)閉線程池的線程跟隨退出完美解決方案

    python QT界面關(guān)閉線程池的線程跟隨退出完美解決方案

    這篇文章主要介紹了python QT界面關(guān)閉,線程池的線程跟隨退出解決思路方法,本文給大家分享兩種方法結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 詳解如何將python3.6軟件的py文件打包成exe程序

    詳解如何將python3.6軟件的py文件打包成exe程序

    這篇文章主要介紹了詳解如何將python3.6軟件的py文件打包成exe程序,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 如何利用Python實(shí)現(xiàn)簡(jiǎn)單C++程序范圍分析

    如何利用Python實(shí)現(xiàn)簡(jiǎn)單C++程序范圍分析

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)簡(jiǎn)單C++程序范圍分析,文章以舉例說(shuō)明及過(guò)程實(shí)現(xiàn)思路的方式展開(kāi)講解,具有一定的的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-02-02
  • python解析xml文件方式(解析、更新、寫(xiě)入)

    python解析xml文件方式(解析、更新、寫(xiě)入)

    這篇文章主要介紹了python解析xml文件方式(解析、更新、寫(xiě)入),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Python爬取酷狗MP3音頻的步驟

    Python爬取酷狗MP3音頻的步驟

    這篇文章主要介紹了Python爬取酷狗MP3音頻的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-02-02
  • Python輸出帶顏色的字符串實(shí)例

    Python輸出帶顏色的字符串實(shí)例

    下面小編就為大家?guī)?lái)一篇Python輸出帶顏色的字符串實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • python利用正則表達(dá)式排除集合中字符的功能示例

    python利用正則表達(dá)式排除集合中字符的功能示例

    在正則表達(dá)式里,想匹配一些字符中的一個(gè),也就是說(shuō)給出一個(gè)字符的集合,只要出現(xiàn)這個(gè)集合里任意的字符,都是成立的,下面這篇文章主要給大家介紹了關(guān)于python利用正則表達(dá)式排除集合中字符功能的相關(guān)資料,需要的朋友可以參考下。
    2017-10-10

最新評(píng)論