同步操作将从 个人学习用/MachineLearning_Python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import numpy as npfrom scipy import io as spiofrom matplotlib import pyplot as pltfrom sklearn import svmdef SVM():'''data1——线性分类'''data1 = spio.loadmat('data1.mat')X = data1['X']y = data1['y']y = np.ravel(y)plot_data(X,y)model = svm.SVC(C=1.0,kernel='linear').fit(X,y) # 指定核函数为线性核函数plot_decisionBoundary(X, y, model) # 画决策边界'''data2——非线性分类'''data2 = spio.loadmat('data2.mat')X = data2['X']y = data2['y']y = np.ravel(y)plt = plot_data(X,y)plt.show()model = svm.SVC(gamma=100).fit(X,y) # gamma为核函数的系数,值越大拟合的越好plot_decisionBoundary(X, y, model,class_='notLinear') # 画决策边界# 作图def plot_data(X,y):plt.figure(figsize=(10,8))pos = np.where(y==1) # 找到y=1的位置neg = np.where(y==0) # 找到y=0的位置p1, = plt.plot(np.ravel(X[pos,0]),np.ravel(X[pos,1]),'ro',markersize=8)p2, = plt.plot(np.ravel(X[neg,0]),np.ravel(X[neg,1]),'g^',markersize=8)plt.xlabel("X1")plt.ylabel("X2")plt.legend([p1,p2],["y==1","y==0"])return plt# 画决策边界def plot_decisionBoundary(X,y,model,class_='linear'):plt = plot_data(X, y)# 线性边界if class_=='linear':w = model.coef_b = model.intercept_xp = np.linspace(np.min(X[:,0]),np.max(X[:,0]),100)yp = -(w[0,0]*xp+b)/w[0,1]plt.plot(xp,yp,'b-',linewidth=2.0)plt.show()else: # 非线性边界x_1 = np.transpose(np.linspace(np.min(X[:,0]),np.max(X[:,0]),100).reshape(1,-1))x_2 = np.transpose(np.linspace(np.min(X[:,1]),np.max(X[:,1]),100).reshape(1,-1))X1,X2 = np.meshgrid(x_1,x_2)vals = np.zeros(X1.shape)for i in range(X1.shape[1]):this_X = np.hstack((X1[:,i].reshape(-1,1),X2[:,i].reshape(-1,1)))vals[:,i] = model.predict(this_X)plt.contour(X1,X2,vals,[0,1],color='blue')plt.show()if __name__ == "__main__":SVM()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。