日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

支持向量机 - 从原理到算法的实现

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支持向量机 - 从原理到算法的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思想:尋找能夠成功分開兩類樣本并且具有最大分類間隔的最優超平面。

1.原理解析

空間中任何一個平面的方程都可以表示為wx+b =0,如上圖,設最優超平面方程H為wx+b=0,支持向量x-到H的距離為,要使分類間隔最大,即該距離最大,而該距離只與|w|有關,分子為一個常數,為了簡單優美,設分子常數為-1,則H1平面方程為wx+b = -1,同理H2平面方程為wx+b = 1。

則H1H2間的距離為(? - ?) .?=?

間隔最大等價于最小化,故目標函數為J(w)=?

這個編輯器很難用,不想打公式了,直接上草稿?:

?

?

2.實例

  • #1、讀入數據
  • import numpy as np
  • dataList = []
  • labelList = []
  • def loadData(fileName):
  • f = open(fileName)
  • for line in f.readlines():
  • lineStr = line.split('\t')
  • dataList.append([float(lineArr[0]),float(lineArr[1])])
  • labelList.append(float(lineArr[2]))
  • return dataList,labelList
  • dataList,labelList = loadData('testSet.txt')
  • #2、訓練支持向量機
  • from sklearn import svm
  • #基于libsvm工具箱,SVC非線性支持向量分類,可通過核定義其核函數,如‘linear’為線性,‘rbf’為徑向基核函數
  • clf = svm.SVC(kernel='linear')
  • clf.fit(dataList,labelList)#訓練
  • ?

  • #3、預測
  • clf.predict([[7.5,-1.5]])#預測類別
  • clf.decision_function([[7.5,-1.5]])#該SVC方法decision_function為每個樣本提供每個類別的分數相當于回歸
  • #支持向量
  • clf.support_vectors_#獲得支持向量
  • clf.support_#獲得支持向量索引
  • clf.n_support_#獲得支持向量屬于不同類別的個數
  • ?

  • #4、繪制決策邊界和支持向量
  • labelArr = np.array(labelList)
  • x_min, x_max = dataArr[:, 0].min() - 1, dataArr[:, 0].max() + 1
  • y_min, y_max = dataArr[:, 1].min() - 1, dataArr[:, 1].max() + 1
  • xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))#meshgrid在空間上取點
  • Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])#ravel平鋪,相當于np.hstack(xx)
  • row = len(np.arange(y_min,y_max,0.02))
  • col = len(np.arange(x_min,x_max,0.02))
  • Z = Z.reshape([row,col])
  • #plt.cm中cm全稱表示colormap,paired表示兩個兩個相近色彩輸出,比如淺藍、深藍;淺紅、深紅;淺綠,深綠這種
  • plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
  • plt.scatter(dataArr[:, 0], dataArr[:, 1], c=labelList)#畫出數據點
  • plt.scatter(dataArr[clf.support_,0],dataArr[clf.support_,1],c = 'red',s = 100,marker='o')#畫出支持向量
  • <script>(function(){function setArticleH(btnReadmore,posi){var winH = $(window).height();var articleBox = $("div.article_content");var artH = articleBox.height();if(artH > winH*posi){articleBox.css({'height':winH*posi+'px','overflow':'hidden'})btnReadmore.click(function(){articleBox.removeAttr("style");$(this).parent().remove();})}else{btnReadmore.parent().remove();}}var btnReadmore = $("#btn-readmore");if(btnReadmore.length>0){if(currentUserName){setArticleH(btnReadmore,3);}else{setArticleH(btnReadmore,1.2);}}})()</script></article>

    總結

    以上是生活随笔為你收集整理的支持向量机 - 从原理到算法的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。