生活随笔
收集整理的這篇文章主要介紹了
                                
支持向量机 - 从原理到算法的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            思想:尋找能夠成功分開兩類樣本并且具有最大分類間隔的最優超平面。
 
 
1.原理解析
 
空間中任何一個平面的方程都可以表示為wx+b =0,如上圖,設最優超平面方程H為wx+b=0,支持向量x-到H的距離為,要使分類間隔最大,即該距離最大,而該距離只與|w|有關,分子為一個常數,為了簡單優美,設分子常數為-1,則H1平面方程為wx+b = -1,同理H2平面方程為wx+b = 1。
 
則H1H2間的距離為(? - ?) .?=?
 
間隔最大等價于最小化,故目標函數為J(w)=?
 
 
這個編輯器很難用,不想打公式了,直接上草稿?:
 
 
 
?
 
 
 
?
 
2.實例
 
import numpy as npdataList = []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') 
from sklearn import svmclf = 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_#獲得支持向量屬于不同類別的個數 
?
 
labelArr = np.array(labelList)x_min, x_max = dataArr[:, 0].min() - 1, dataArr[:, 0].max() + 1y_min, y_max = dataArr[:, 1].min() - 1, dataArr[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])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.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>
                            
總結
                            
                                以上是生活随笔為你收集整理的支持向量机 - 从原理到算法的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。