机器学习(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()

结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38876114/article/details/93885497