sklearn调用SVM算法

1、支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能力尽可能地好,因此SVM对未来数据的预测也是更加准确的。

2、SVM既可以解决分类问题,又可以解决回归问题,原理整体相似,不过也稍有不同。

在sklearn章调用SVM算法的代码实现如下所示:

#(一)sklearn中利用SVM算法解决分类问题
import numpy as npimport matplotlib.pyplot as pltfrom sklearn import  datasetsd=datasets.load_iris()x=d.datay=d.targetx=x[y<2,:2]y=y[y<2]print(x)print(y)plt.figure()plt.scatter(x[y==0,0],x[y==0,1],color="r")plt.scatter(x[y==1,0],x[y==1,1],color="g")plt.show()#进行数据据标准化处理(线性方式)from sklearn.preprocessing import StandardScalers1=StandardScaler()s1.fit(x)x_standard=s1.transform(x)print(np.hstack([x,x_standard]))#导入sklearn中SVM的线性分类算法LinearSVCfrom sklearn.svm import LinearSVCs11=LinearSVC(C=1e9) #多分类问题的实现需要提交参数penalty=l1/l2(正则化方式)以及multi_class=ovo/ovr(采用何种方式多分类训练)s11.fit(x_standard,y)def plot_decision_boundary(model,axis):    x0,x1=np.meshgrid(        np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),        np.linspace(axis[2],axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1,1)    )    x_new=np.c_[x0.ravel(),x1.ravel()]    y_pre=model.predict(x_new)    zz=y_pre.reshape(x0.shape)    from matplotlib.colors import ListedColormap    cus=ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])    plt.contourf(x0,x1,zz,cmap=cus)plot_decision_boundary(s11,axis=([-3,3,-3,3]))plt.scatter(x_standard[y==0,0],x_standard[y==0,1],color="r")plt.scatter(x_standard[y==1,0],x_standard[y==1,1],color="g")plt.show()print(s11.coef_)print(s11.intercept_)#输出svc函数的决策边界def plot_svc_decision_boundary(model,axis):    x0,x1=np.meshgrid(        np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),        np.linspace(axis[2],axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1,1)    )    x_new=np.c_[x0.ravel(),x1.ravel()]    y_pre=model.predict(x_new)    zz=y_pre.reshape(x0.shape)    from matplotlib.colors import ListedColormap    cus=ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])    plt.contourf(x0,x1,zz,cmap=cus)    w=model.coef_[0]    b=model.intercept_[0]    x1=np.linspace(axis[0],axis[1],200)    upy=-w[0]*x1/w[1]-b/w[1]+1/w[1]    downy=-w[0]*x1/w[1]-b/w[1]-1/w[1]    upindex=((upy>axis[2])&(upy<axis[3]))    downindex = ((downy > axis[2]) & (downy < axis[3]))    plt.plot(x1[upindex],upy[upindex],"r")    plt.plot(x1[downindex],downy[downindex],"g")plot_svc_decision_boundary(s11,axis=([-3,3,-3,3]))plt.scatter(x_standard[y==0,0],x_standard[y==0,1],color="r")plt.scatter(x_standard[y==1,0],x_standard[y==1,1],color="g")plt.show()

#sklearn中对于非线性数据的svm应用(多项式应用方式)#1利用管道pipeline来进行多项式核函数的SVM算法import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsx,y=datasets.make_moons(noise=0.05,random_state=666)  #生成数据默认为100个数据样本print(x.shape)print(y.shape)plt.figure()plt.scatter(x[y==0,0],x[y==0,1],color="r")plt.scatter(x[y==1,0],x[y==1,1],color="g")plt.show()from sklearn.preprocessing import PolynomialFeaturesfrom sklearn.preprocessing import StandardScalerfrom sklearn.svm import LinearSVCfrom sklearn.pipeline import Pipelinedef polyniomailSVC(degree,C=1.0):    return Pipeline([("poly",PolynomialFeatures(degree=degree)),                      ("std_scaler",StandardScaler()),                      ("LinearSVC",LinearSVC(C=C))                    ])

p=polyniomailSVC(degree=3)p.fit(x,y)plot_decision_boundary(p,axis=([-1,2.5,-1,1.5]))plt.scatter(x[y==0,0],x[y==0,1],color="r")plt.scatter(x[y==1,0],x[y==1,1],color="g")plt.show()#2直接利用sklearn中自带的多项式核函数SVM算法,主要的参数kernel="poly"from sklearn.svm import SVCdef polynomialkernelSVC(degree,C=1.0):    return Pipeline(        [            ("std_canler",StandardScaler()),            ("kernelsvc",SVC(kernel="poly",degree=degree,C=C))        ]    )p1=polynomialkernelSVC(degree=3)p1.fit(x,y)plot_decision_boundary(p1,axis=([-1,2.5,-1,1.5]))plt.scatter(x[y==0,0],x[y==0,1],color="r")plt.scatter(x[y==1,0],x[y==1,1],color="g")plt.show()#直观理解高斯核函数import  numpy as npimport matplotlib.pyplot as pltx=np.arange(-4,5,1)y=np.array((x>=-2)&(x<=2),dtype="int")print(x)print(y)plt.figure()plt.scatter(x[y==0],[0]*len(x[y==0]),color="r")plt.scatter(x[y==1],[0]*len(x[y==1]),color="g")plt.show()def gauss(x,y):    gamma=1    return np.exp(-gamma*(x-y)**2)l1,l2=-1,1x_new=np.empty((len(x),2))for i ,data in enumerate(x):    x_new[i,0]=gauss(data,l1)    x_new[i,1]=gauss(data,l2)plt.scatter(x_new[y==0,0],x_new[y==0,1],color="r")plt.scatter(x_new[y==1,0],x_new[y==1,1],color="g")plt.show()#调用sklearn中的高斯核函数RBF核(超参数主要是gamma)import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsx,y=datasets.make_moons(noise=0.1,random_state=666)  #生成数据默认为100个数据样本print(x.shape)print(y.shape)plt.figure()plt.scatter(x[y==0,0],x[y==0,1],color="r")plt.scatter(x[y==1,0],x[y==1,1],color="g")plt.show()from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)from sklearn.preprocessing import StandardScalerfrom sklearn.svm import SVCfrom sklearn.pipeline import Pipelinedef RBFkernelSVC(gamma):    return Pipeline([        ("std",StandardScaler()),        ("svc",SVC(kernel="rbf",gamma=gamma))    ])sv=RBFkernelSVC(gamma=1)sv.fit(x_train,y_train)plot_decision_boundary(sv,axis=([-1.5,2.5,-1,1.5]))plt.scatter(x[y==0,0],x[y==0,1],color="r")plt.scatter(x[y==1,0],x[y==1,1],color="g")plt.show()print(sv.score(x_test,y_test))from sklearn import datasetsd=datasets.load_iris()x=d.datay=d.targetfrom sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)sv=RBFkernelSVC(gamma=10)sv.fit(x_train,y_train)print(sv.score(x_test,y_test))

#(二)sklearn中利用SVM算法解决回归问题(epsilon为重要的超参数)from sklearn import datasetsd=datasets.load_boston()x=d.datay=d.targetfrom sklearn.preprocessing import StandardScalers1=StandardScaler()s1.fit(x)x=s1.transform(x)from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)from sklearn.svm import LinearSVRfrom sklearn.svm import SVRfrom sklearn.preprocessing import StandardScalerdef StandardLinearSVR(epsilon):    return Pipeline([        ("std",StandardScaler()),        ("svr",LinearSVR(epsilon=epsilon))    ])sv=LinearSVR()param_grid=[{    "epsilon":[i for i in np.arange(0,10,0.001)]}]from sklearn.model_selection import GridSearchCVgrid_search=GridSearchCV(sv,param_grid,n_jobs=-1,verbose=0)grid_search.fit(x_train,y_train)print(grid_search.best_params_)print(grid_search.best_score_)def polyniomailSVR(degree,C,epsilon):    return Pipeline([("poly",PolynomialFeatures(degree=degree)),                      ("std_scaler",StandardScaler()),                      ("LinearSVC",LinearSVR(C=C,epsilon=epsilon))                    ])p1=polyniomailSVR(degree=2,C=1,epsilon=0.5)p1.fit(x_train,y_train)print(p1.score(x_test,y_test))

def polynomialkernelSVR(degree,coefo,epsilon):    return Pipeline(        [            ("std_canler",StandardScaler()),            ("kernelsvc",SVR(kernel="poly",degree=degree,coef0=coefo,epsilon=epsilon))        ]    )p1=polynomialkernelSVR(degree=3,C=1,epsilon=0.1)p1.fit(x_train,y_train)print(p1.score(x_test,y_test))

def RBFkernelSVR(gamma,epsilon):    return Pipeline([        ("std",StandardScaler()),        ("svc",SVR(kernel="rbf",gamma=gamma,epsilon=epsilon))    ])p2=RBFkernelSVR(gamma=0.05,epsilon=0.1)p2.fit(x_train,y_train)print(p2.score(x_test,y_test))

运行结果如下所示:



原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/11368253.html

时间: 2024-11-05 16:34:58

sklearn调用SVM算法的相关文章

程序员训练机器学习 SVM算法分享

http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文主要阐述了SVM是如何进行工作的,同时也给出了使用Python Scikits库的几个示例.SVM作为一种训练机器学习的算法,可以用于解决分类和回归问题,还使用了kernel trick技术进行数据的转换,再根据转换信息在可能的输出之中找到一个最优的边界. [CSDN报道]支持向量机(Support

SVM算法入门

转自:http://blog.csdn.net/yangliuy/article/details/7316496SVM入门(一)至(三)Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅. (一)SVM的简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]. 支持向量机方法

转载:scikit-learn学习之SVM算法

转载,http://blog.csdn.net/gamer_gyt 目录(?)[+] ====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处,谢谢 =====================================================================

Spark MLlib SVM算法

1.1 SVM支持向量机算法 支持向量机理论知识参照以下文档: 支持向量机SVM(一) http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html 支持向量机SVM(二) http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html 支持向量机(三)核函数 http://www.cnblogs.com/jerrylead/archive/2011/03/18/

scikit-learn学习之SVM算法

====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正 转载请注明出处,谢谢 ====================================================================== 机器学习中的算法(2)-支持向量机(SVM)基础 关于SVM一篇比较全介绍的博文

Python 之 sklearn 计算 SVM 隶属度

python中的sklean已经集成SVM算法,其中包含fit(), predict()等,我们只要输入训练样本和标记,以及模型参数,就可得到分类的结果. 关于这个的代码实现已有很多,SVC 参数详见: 详址:http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC 但对于libsvm之中实现的隶属度计算仍未找到相似讲解与示例,先给出源码如下. import numpy Data_S

sklearn中SVM调参说明

写在前面 之前只停留在理论上,没有实际沉下心去调参,实际去做了后,发现调参是个大工程(玄学).于是这篇来总结一下sklearn中svm的参数说明以及调参经验.方便以后查询和回忆. 常用核函数 1.linear核函数: K(xi,xj)=xTixjK(xi,xj)=xiTxj 2.polynomial核函数: K(xi,xj)=(γxTixj+r)d,d>1K(xi,xj)=(γxiTxj+r)d,d>1 3.RBF核函数(高斯核函数): K(xi,xj)=exp(−γ||xi−xj||2),γ

SVM算法

摘要:SVM(支持向量机)算法是一种典型的监督式学习算法.介绍SVM算法的思想和应用. 关键词:机器学习   SVM    支持向量机 SVM(Support Vector Machine)支持向量机,简称SV机,一种监督式学习算法,广泛地应用于统计分类和回归分析中. SVM算法的思想可以概括为两点. 第一点:SVM是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本映射到高维特征空间使其线性可分,从而使得高维特征空间采用采用线性算法对样本的非线

SVM算法推导

1,SVM算法的思考出发点 SVM算法是一种经典的分类方法.对于线性可分问题,找到那个分界面就万事大吉了.这个分界面可以有很多,怎么找呢?SVM是要找到最近点距离最远的那个分界面.有点绕,看下面的图就明白了 为了推导简单,我们先假设样本集是完全线性可分的,也就一个分界面能达到100%的正确率. 2,线性可分的情况 (1)优化目标的建立 最近点距离最远的分界面,这句话得用数学式子表示出来,这样才能用数学工具进行求解. 首先,假设分界面是y=wx+b,点\(x_i\)距离平面的距离用数学表达是\(\