针对testSet.txt中数据,使用SVM进行分类,并画出分隔结果,标出支持向量。

训练集:testSet.txt

# 1.	针对testSet.txt中数据,使用SVM进行分类,并画出分隔结果,标出支持向量。
from numpy import *
import matplotlib.pyplot as plt
from sklearn import svm


# 加载数据集
def loadDataSet(filename):
    dataMat = []; labelMat = []
    fr=open(filename)
    for line in fr.readlines():
        lineArr = line.strip().split('\t')
        dataMat.append([float(lineArr[0]), float(lineArr[1])])
        labelMat.append(float(lineArr[2]))
    return array(dataMat), array(labelMat)


data, target = loadDataSet("testSet.txt")
index1 = where(target == 1)
X1 = data[index1]
index2 = where(target == -1)
X2 = data[index2]
# 二维空间画图
plt.plot(X1[:,0],X1[:,1],'ro')
plt.plot(X2[:,0],X2[:,1],'bx')
plt.show()
# # 调用非线性支持向量机
clf = svm.SVC(kernel='linear')
clf.fit(data, target)
w = clf.coef_[0]  # 获取w
a = -w[0] / w[1]  # 斜率

print("W:", w)
print("a:", a)
print("support_vectors_:", clf.support_vectors_)
print("clf.coef_:", clf.coef_)
# 画图划线
xx = linspace(0, 10)  # (0,10)之间x的值
yy = a * xx - (clf.intercept_[0]) / w[1]  # xx带入y,截距

# 画出与点相切的线
b = clf.support_vectors_[0]
yy_down = a * xx + (b[1] - a * b[0])
b = clf.support_vectors_[-1]
yy_up = a * xx + (b[1] - a * b[0])


plt.figure(figsize=(8, 4))
plt.plot(xx, yy)
plt.plot(xx, yy_down)
plt.plot(xx, yy_up)
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=80)
plt.scatter(data[:, 0], data[:, 1], c=target, cmap=plt.cm.Paired)  # [:,0]列切片,第0列
plt.axis('tight')
plt.show()

结果图:


猜你喜欢

转载自blog.csdn.net/IT_zxl001/article/details/80488294