最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中使用支持向量機(SVM)算法

 更新時間:2017年12月26日 16:39:21   作者:quryktcs  
這篇文章主要為大家詳細(xì)介紹了Python中使用支持向量機SVM算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在機器學(xué)習(xí)領(lǐng)域,支持向量機SVM(Support Vector Machine)是一個有監(jiān)督的學(xué)習(xí)模型,通常用來進(jìn)行模式識別、分類(異常值檢測)以及回歸分析。

其具有以下特征:

   (1)SVM可以表示為凸優(yōu)化問題,因此可以利用已知的有效算法發(fā)現(xiàn)目標(biāo)函數(shù)的全局最小值。而其他分類方法都采用一種基于貪心學(xué)習(xí)的策略來搜索假設(shè)空間,這種方法一般只能獲得局部最優(yōu)解。
  (2) SVM通過最大化決策邊界的邊緣來實現(xiàn)控制模型的能力。盡管如此,用戶必須提供其他參數(shù),如使用核函數(shù)類型和引入松弛變量等。
  (3)SVM一般只能用在二類問題,對于多類問題效果不好。

1. 下面是代碼及詳細(xì)解釋(基于sklearn包):

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

#準(zhǔn)備訓(xùn)練樣本
x=[[1,8],[3,20],[1,15],[3,35],[5,35],[4,40],[7,80],[6,49]]
y=[1,1,-1,-1,1,-1,-1,1]

##開始訓(xùn)練
clf=svm.SVC() ##默認(rèn)參數(shù):kernel='rbf'
clf.fit(x,y)

#print("預(yù)測...")
#res=clf.predict([[2,2]]) ##兩個方括號表面?zhèn)魅氲膮?shù)是矩陣而不是list

##根據(jù)訓(xùn)練出的模型繪制樣本點
for i in x:
  res=clf.predict(np.array(i).reshape(1, -1))
  if res > 0:
    plt.scatter(i[0],i[1],c='r',marker='*')
  else :
    plt.scatter(i[0],i[1],c='g',marker='*')

##生成隨機實驗數(shù)據(jù)(15行2列)
rdm_arr=np.random.randint(1, 15, size=(15,2))
##回執(zhí)實驗數(shù)據(jù)點
for i in rdm_arr:
  res=clf.predict(np.array(i).reshape(1, -1))
  if res > 0:
    plt.scatter(i[0],i[1],c='r',marker='.')
  else :
    plt.scatter(i[0],i[1],c='g',marker='.')
##顯示繪圖結(jié)果
plt.show()

結(jié)果如下圖:

從圖上可以看出,數(shù)據(jù)明顯被藍(lán)色分割線分成了兩類。但是紅色箭頭標(biāo)示的點例外,所以這也起到了檢測異常值的作用。

2.在上面的代碼中提到了kernel='rbf',這個參數(shù)是SVM的核心:核函數(shù)

重新整理后的代碼如下:      

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

##設(shè)置子圖數(shù)量
fig, axes = plt.subplots(nrows=2, ncols=2,figsize=(7,7))
ax0, ax1, ax2, ax3 = axes.flatten()

#準(zhǔn)備訓(xùn)練樣本
x=[[1,8],[3,20],[1,15],[3,35],[5,35],[4,40],[7,80],[6,49]]
y=[1,1,-1,-1,1,-1,-1,1]
'''
  說明1:
    核函數(shù)(這里簡單介紹了sklearn中svm的四個核函數(shù),還有precomputed及自定義的)
    
  LinearSVC:主要用于線性可分的情形。參數(shù)少,速度快,對于一般數(shù)據(jù),分類效果已經(jīng)很理想
  RBF:主要用于線性不可分的情形。參數(shù)多,分類結(jié)果非常依賴于參數(shù)
  polynomial:多項式函數(shù),degree 表示多項式的程度-----支持非線性分類
  Sigmoid:在生物學(xué)中常見的S型的函數(shù),也稱為S型生長曲線

  說明2:根據(jù)設(shè)置的參數(shù)不同,得出的分類結(jié)果及顯示結(jié)果也會不同
  
'''
##設(shè)置子圖的標(biāo)題
titles = ['LinearSVC (linear kernel)', 
     'SVC with polynomial (degree 3) kernel', 
     'SVC with RBF kernel',   ##這個是默認(rèn)的
     'SVC with Sigmoid kernel']
##生成隨機試驗數(shù)據(jù)(15行2列)
rdm_arr=np.random.randint(1, 15, size=(15,2))

def drawPoint(ax,clf,tn):
  ##繪制樣本點
  for i in x:
    ax.set_title(titles[tn])
    res=clf.predict(np.array(i).reshape(1, -1))
    if res > 0:
      ax.scatter(i[0],i[1],c='r',marker='*')
    else :
      ax.scatter(i[0],i[1],c='g',marker='*')
   ##繪制實驗點
  for i in rdm_arr:
    res=clf.predict(np.array(i).reshape(1, -1))
    if res > 0:
      ax.scatter(i[0],i[1],c='r',marker='.')
    else :
      ax.scatter(i[0],i[1],c='g',marker='.')

if __name__=="__main__":
  ##選擇核函數(shù)
  for n in range(0,4):
    if n==0:
      clf = svm.SVC(kernel='linear').fit(x, y)
      drawPoint(ax0,clf,0)
    elif n==1:
      clf = svm.SVC(kernel='poly', degree=3).fit(x, y)
      drawPoint(ax1,clf,1)
    elif n==2:
      clf= svm.SVC(kernel='rbf').fit(x, y)
      drawPoint(ax2,clf,2)
    else :
      clf= svm.SVC(kernel='sigmoid').fit(x, y)
      drawPoint(ax3,clf,3)
  plt.show()

結(jié)果如圖:

由于樣本數(shù)據(jù)的關(guān)系,四個核函數(shù)得出的結(jié)果一致。在實際操作中,應(yīng)該選擇效果最好的核函數(shù)分析。

3.在svm模塊中還有一個較為簡單的線性分類函數(shù):LinearSVC(),其不支持kernel參數(shù),因為設(shè)計思想就是線性分類。如果確定數(shù)據(jù)

可以進(jìn)行線性劃分,可以選擇此函數(shù)。跟kernel='linear'用法對比如下:

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

##設(shè)置子圖數(shù)量
fig, axes = plt.subplots(nrows=1, ncols=2,figsize=(7,7))
ax0, ax1 = axes.flatten()

#準(zhǔn)備訓(xùn)練樣本
x=[[1,8],[3,20],[1,15],[3,35],[5,35],[4,40],[7,80],[6,49]]
y=[1,1,-1,-1,1,-1,-1,1]

##設(shè)置子圖的標(biāo)題
titles = ['SVC (linear kernel)', 
     'LinearSVC']

##生成隨機試驗數(shù)據(jù)(15行2列)
rdm_arr=np.random.randint(1, 15, size=(15,2))

##畫圖函數(shù)
def drawPoint(ax,clf,tn):
  ##繪制樣本點
  for i in x:
    ax.set_title(titles[tn])
    res=clf.predict(np.array(i).reshape(1, -1))
    if res > 0:
      ax.scatter(i[0],i[1],c='r',marker='*')
    else :
      ax.scatter(i[0],i[1],c='g',marker='*')
  ##繪制實驗點
  for i in rdm_arr:
    res=clf.predict(np.array(i).reshape(1, -1))
    if res > 0:
      ax.scatter(i[0],i[1],c='r',marker='.')
    else :
      ax.scatter(i[0],i[1],c='g',marker='.')

if __name__=="__main__":
  ##選擇核函數(shù)
  for n in range(0,2):
    if n==0:
      clf = svm.SVC(kernel='linear').fit(x, y)
      drawPoint(ax0,clf,0)
    else :
      clf= svm.LinearSVC().fit(x, y)
      drawPoint(ax1,clf,1)
  plt.show()


結(jié)果如圖所示:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用Python打造一個多人聊天室的示例詳解

    利用Python打造一個多人聊天室的示例詳解

    這篇文章主要介紹的是利用Python實現(xiàn)的一個簡易的多人聊天室,文中的示例代碼講解詳細(xì),對學(xué)習(xí)Python有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • Python docutils文檔編譯過程方法解析

    Python docutils文檔編譯過程方法解析

    這篇文章主要介紹了Python docutils文檔編譯過程方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python中按指定數(shù)量分割列表字符串的兩種方法

    Python中按指定數(shù)量分割列表字符串的兩種方法

    處理列表數(shù)據(jù)時,有時我們需要將一個包含長字符串的列表分割成按照特定長度的小字符串的多個列表,本文主要介紹了Python中按指定數(shù)量分割列表字符串,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • django models里數(shù)據(jù)表插入數(shù)據(jù)id自增操作

    django models里數(shù)據(jù)表插入數(shù)據(jù)id自增操作

    這篇文章主要介紹了django models里數(shù)據(jù)表插入數(shù)據(jù)id自增操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡單處理和分析

    python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡單處理和分析

    這篇文章主要介紹了python基于scrapy爬取京東筆記本電腦數(shù)據(jù)并進(jìn)行簡單處理和分析的實例,幫助大家更好的理解和學(xué)習(xí)使用python。感興趣的朋友可以了解下
    2021-04-04
  • 在樹莓派2或樹莓派B+上安裝Python和OpenCV的教程

    在樹莓派2或樹莓派B+上安裝Python和OpenCV的教程

    這篇文章主要介紹了在樹莓派2或樹莓派B+上安裝Python和OpenCV的教程,主要基于GTK庫,并以Python2.7和OpenCV 2.4.X版本的安裝作為示例,需要的朋友可以參考下
    2015-03-03
  • 詳解pandas.DataFrame.plot() 畫圖函數(shù)

    詳解pandas.DataFrame.plot() 畫圖函數(shù)

    這篇文章主要介紹了詳解pandas.DataFrame.plot()畫圖函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python給exe添加以管理員運行的屬性方法詳解

    Python給exe添加以管理員運行的屬性方法詳解

    這篇文章主要為大家介紹了Python給exe添加以管理員運行的屬性方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python圖像處理庫PIL中圖像格式轉(zhuǎn)換的實現(xiàn)

    Python圖像處理庫PIL中圖像格式轉(zhuǎn)換的實現(xiàn)

    這篇文章主要介紹了Python圖像處理庫PIL中圖像格式轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python分布式環(huán)境下的限流器的示例

    python分布式環(huán)境下的限流器的示例

    本篇文章主要介紹了python分布式環(huán)境下的限流器的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

什邡市| 开平市| 安顺市| 内黄县| 枣强县| 阿拉善盟| 城口县| 香河县| 富阳市| 湟中县| 桦川县| 永泰县| 宜黄县| 阜阳市| 玉田县| 蓝山县| 无锡市| 香河县| 德州市| 建阳市| 项城市| 望城县| 西丰县| 融水| 友谊县| 柯坪县| 宁城县| 二连浩特市| 临清市| 凌海市| 新河县| 仪征市| 永平县| 石门县| 乌拉特前旗| 崇州市| 赤峰市| 六安市| 江山市| 阿城市| 天长市|