700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【机器学习】监督学习--(分类)支持向量机SVM②

【机器学习】监督学习--(分类)支持向量机SVM②

时间:2023-10-30 09:56:54

相关推荐

【机器学习】监督学习--(分类)支持向量机SVM②

注:数据集在文章末尾

(1)SVM–线性分类

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svm# 创建40个点x_data = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]y_data = [0]*20 +[1]*20plt.scatter(x_data[:,0],x_data[:,1],c=y_data)plt.show()

输出:

#fit the modelmodel = svm.SVC(kernel='linear')model.fit(x_data, y_data)print(model.coef_)print(model.intercept_)

输出:

# 获取分离平面 plt.scatter(x_data[:,0],x_data[:,1],c=y_data)x_test = np.array([[-5],[5]])d = -model.intercept_/model.coef_[0][1]k = -model.coef_[0][0]/model.coef_[0][1]y_test = d + k*x_testplt.plot(x_test, y_test, 'k')plt.show()

输出:

model.support_vectors_

输出:

# 画出通过支持向量的分界线b1 = model.support_vectors_[0]y_down = k*x_test + (b1[1] - k*b1[0])b2 = model.support_vectors_[-1]y_up = k*x_test + (b2[1] - k*b2[0])plt.scatter(x_data[:,0],x_data[:,1],c=y_data)x_test = np.array([[-5],[5]])d = -model.intercept_/model.coef_[0][1]k = -model.coef_[0][0]/model.coef_[0][1]y_test = d + k*x_testplt.plot(x_test, y_test, 'k')plt.plot(x_test, y_down, 'r--')plt.plot(x_test, y_up, 'b--')plt.show()

输出:

(2)SVM–非线性分类

import matplotlib.pyplot as pltimport numpy as npfrom sklearn.metrics import classification_reportfrom sklearn import svm# 载入数据data = np.genfromtxt("LR-testSet2.txt", delimiter=",")x_data = data[:,:-1]y_data = data[:,-1]def plot():x0 = []x1 = []y0 = []y1 = []# 切分不同类别的数据for i in range(len(x_data)):if y_data[i]==0:x0.append(x_data[i,0])y0.append(x_data[i,1])else:x1.append(x_data[i,0])y1.append(x_data[i,1])# 画图scatter0 = plt.scatter(x0, y0, c='b', marker='o')scatter1 = plt.scatter(x1, y1, c='r', marker='x')#画图例plt.legend(handles=[scatter0,scatter1],labels=['label0','label1'],loc='best')plot()plt.show()

输出:

# fit the model# C和gammamodel = svm.SVC(kernel='rbf')model.fit(x_data, y_data)print(model.score(x_data,y_data))

输出:

# 获取数据值所在的范围x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])# ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据z = z.reshape(xx.shape)# 等高线图cs = plt.contourf(xx, yy, z)plot() plt.show()

输出:

数据集:“LR-testSet2.txt”:

0.051267,0.69956,1-0.092742,0.68494,1-0.21371,0.69225,1-0.375,0.50219,1-0.51325,0.46564,1-0.52477,0.2098,1-0.39804,0.034357,1-0.30588,-0.19225,10.016705,-0.40424,10.13191,-0.51389,10.38537,-0.56506,10.52938,-0.5212,10.63882,-0.24342,10.73675,-0.18494,10.54666,0.48757,10.322,0.5826,10.16647,0.53874,1-0.046659,0.81652,1-0.17339,0.69956,1-0.47869,0.63377,1-0.60541,0.59722,1-0.62846,0.33406,1-0.59389,0.005117,1-0.42108,-0.27266,1-0.11578,-0.39693,10.4,-0.60161,10.46601,-0.53582,10.67339,-0.53582,1-0.13882,0.54605,1-0.29435,0.77997,1-0.26555,0.96272,1-0.16187,0.8019,1-0.17339,0.64839,1-0.28283,0.47295,1-0.36348,0.31213,1-0.30012,0.027047,1-0.23675,-0.21418,1-0.06394,-0.18494,10.062788,-0.16301,10.22984,-0.41155,10.2932,-0.2288,10.48329,-0.18494,10.64459,-0.14108,10.46025,0.012427,10.6273,0.15863,10.57546,0.26827,10.72523,0.44371,10.22408,0.52412,10.44297,0.67032,10.322,0.69225,10.13767,0.57529,1-0.0063364,0.39985,1-0.092742,0.55336,1-0.20795,0.35599,1-0.20795,0.17325,1-0.43836,0.21711,1-0.21947,-0.016813,1-0.13882,-0.27266,10.18376,0.93348,00.22408,0.77997,00.29896,0.61915,00.50634,0.75804,00.61578,0.7288,00.60426,0.59722,00.76555,0.50219,00.92684,0.3633,00.82316,0.27558,00.96141,0.085526,00.93836,0.012427,00.86348,-0.082602,00.89804,-0.20687,00.85196,-0.36769,00.82892,-0.5212,00.79435,-0.55775,00.59274,-0.7405,00.51786,-0.5943,00.46601,-0.41886,00.35081,-0.57968,00.28744,-0.76974,00.085829,-0.75512,00.14919,-0.57968,0-0.13306,-0.4481,0-0.40956,-0.41155,0-0.39228,-0.25804,0-0.74366,-0.25804,0-0.69758,0.041667,0-0.75518,0.2902,0-0.69758,0.68494,0-0.4038,0.70687,0-0.38076,0.91886,0-0.50749,0.90424,0-0.54781,0.70687,00.10311,0.77997,00.057028,0.91886,0-0.10426,0.99196,0-0.081221,1.1089,00.28744,1.087,00.39689,0.82383,00.63882,0.88962,00.82316,0.66301,00.67339,0.64108,01.0709,0.10015,0-0.046659,-0.57968,0-0.23675,-0.63816,0-0.15035,-0.36769,0-0.49021,-0.3019,0-0.46717,-0.13377,0-0.28859,-0.060673,0-0.61118,-0.067982,0-0.66302,-0.21418,0-0.59965,-0.41886,0-0.72638,-0.082602,0-0.83007,0.31213,0-0.72062,0.53874,0-0.59389,0.49488,0-0.48445,0.99927,0-0.0063364,0.99927,00.63265,-0.030612,0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。