機器學習(6)-- 支持向量機SVM應用

SVM模塊調用

在sklearn中,封裝了svm模塊,可以直接調用模塊傳入數據集獲得訓練的SVM,下面對訓練練簡單的模型並且生成可視化結果

import numpy as np
import pylab as pl
from sklearn import svm

# 創建40個隨機點
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [0]*20 + [1]*20
print(X, Y)

#訓練模型
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)

#獲得分割平面
w = clf.coef_[0]
print("權重:" , w)
b = clf.intercept_
print('截距', b)
#查看向量機的相關向量
print('支持向量', clf.support_vectors_)
"""
繪圖,獲得分割線:分割線的格式爲 ,轉換之後x1即爲y
w*x + b = 0 即:
w0 * x0 + w1 * x1 + b = 0
轉換爲繪圖直線
x1 = (-b - w0 * x0)/w1
由於已經計算得到向量機的平面的w和b,可以生成數據點[x0]計算[x1],並且在平面畫出直線 
"""
xx0 = np.linspace(-5, 5)
xx1 = (-b[0] - w[0]*xx0)/w[1]
print(xx1)

"""
兩個支撐平面分別爲
w * x + b = 1和 w * x + b = -1,對應轉換爲上面方式即爲:
x1 = (1 - b - w0 * x0)/w1
x1 = (-1 - b - w0 * x0)/w1
"""
xx1_down = (-1 - b[0] - w[0]*xx0)/w[1]
xx1_up = (1 - b[0] - w[0]*xx0)/w[1]

pl.plot(xx0, xx1, 'k-')
pl.plot(xx0, xx1_down, 'k--')
pl.plot(xx0, xx1_up, 'k--')

#繪製數據點
pl.scatter(X[:, 0], X[:, 1], c=Y,cmap=pl.cm.Paired)
pl.axis('tight')
pl.show()

結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章