Python 支持向量机分类器的实现

Python 支持向量机分类器的实现,第1张

概述Python 支持向量分类器的实现 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane) SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个

支持向量机(Support Vector Machine,SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifIEr),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)

SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一。

SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。

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,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,np.ravel(X[neg,'g^',markersize=8)  plt.xlabel("X1")  plt.ylabel("X2")  plt.legend([p1,p2],["y==1","y==0"])  return plt# 画决策边界def plot_decisionBoundary(X,class_='linear'):  plt = plot_data(X,y)  # 线性边界  if class_ == 'linear':    w = model.coef_    b = model.intercept_    xp = np.linspace(np.min(X[:,np.max(X[:,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[:,100).reshape(1,-1))    x_2 = np.transpose(np.linspace(np.min(X[:,-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[:,1)))      vals[:,i] = model.predict(this_X)    plt.contour(X1,X2,vals,[0,1],color='blue')    plt.show()if __name__ == "__main__":  SVM()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

总结

以上是内存溢出为你收集整理的Python 支持向量机分类器的实现全部内容,希望文章能够帮你解决Python 支持向量机分类器的实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1199377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存