支持向量机实验 支持向量机需要训练吗

昭棠笔记 2023-01-25

刘亦菲 美国-switch up

2022年5月1日发

(作者:萍聚)

机器学习实训实验报告(三)

专业班级学号姓名

实验项目名称:支持向量机:以SOM算法优化求解

实验内容:

1、理解支持向量机的概念,以及相关理论知识

2、了解SMO算法概念,及在支持向量机上的应用

3、理解核函数概念,理解核函数将数据映射到高维空间

实验过程:

算法分析:

SMO算法:

1、概述

SMO算法在支持向量机中用来

求解对偶问题新手做网站,即

源程序代码:

fromtimeimportsleep

asplt

importnumpyasnp

importrandom

importtypes

fromnumpyimport*

#函数说明:读取数据

在这个问题中宝应seo,变量是拉格朗日

defloadDataSet(fileame):

乘子α,一个αi对应一个样本点

dataMat=[];labelMat=[]

fr=open(fileame)

(xi南宁百度,yi),变量总数等于样本数量

nes():#逐行读取软文链,滤除空格等

lineArr=()上海seo培训.split(t)

SMO算法是一个启发式的算法,

([float(lineArr[0])tag是什么意思,float(lineArr[1])])#添

它的基本思路是:

加数据

如果所有变量的解都满足KKT

(float(lineArr[2]))#添加标签

条件,即:

returndataMat,labelMat

#函数说明:随机选择alpha

defselectJrand(i,m):

j=i#选择一个不等于i的j

while(j==i):

j=int(m(0郑州网络推广公司,m))

如果所有变量的解都慢着KKT

returnj

条件店铺如何推广,那么这个更优化问题的解

就得到了吉安网站制作公司,因为KKT条件是这个#函数说明:修剪alpha

更优化问题的充分必要条件爱网站。defclipAlpha(aj,Hqq营销,L):#选取大于H小于L的aj

否则选择两个变量威海seo,固定其他变

ifaj>H:

量,针对这两个变量构建一个二

aj=H

次规划问题,这个二次规划问题

ifL>aj:

aj=L

的关于这两个变量的解应该更接

returnaj

近原始二次规划问题的解seo公司上海,重要

的是南昌创域,这两个变量可以通过解析

#函数说明:简化版SMO算法

方法来求解推广平台有哪些。整个SMO算法有

defsmoSimple(dataMatIn长沙网站建设公司,classLabels友情链接好处,C建站技术,toler,maxIter):

两大部分组成新增app推广,第一部分就是选

#转换为numpy

择这两个变量的启发式的方法河南建网站,

dataMatrix=(dataMatIn);labelMat=(classLabels).tr

第二部分是求解这两个变量的解anspose()

#初始化b参数,统计dataMatrix的维度,m为个数龙岩做网站公司,n为维数析方法。

b=0;m专业网站优化,n=(dataMatrix)

2、第一个变量选择

SMO称第一个变量的选择过程

为外层循环,外层循环要选择一

个违反KKT条件的变量,具体来

说,若

αi=0百度开户网,那么由αi+μi=C可知μi=C

又因为μiξi=0安卓优化大师下载,所以ξi=ξi=0

也就是说要满足KKT条件要满

yif(xi)≥1

同样的推导过程可以得到

#初始化alpha参数如何提高alexa排名,设为0

alphas=(((m电商seo,1)))

#初始化迭代次数

iter_num=0

#最多迭代matIter次(外循环)

while(iter_num

alphaPairsChanged=0#初始化

foriinrange(m):

#步骤1:计算fxi和标签的误差Ei

fXi=

float(ly(alphas,labelMat)网络营销发展.T*(dataMatrix*dataMatrix[i网络推广费用,:].T))

+b

Ei=fXi-float(labelMat[i])

#if语句:优化alpha网络广告优势,更设定一定的容错率。

if((labelMat[i]*Ei<-toler)and(alphas[i]

若变量违反了KKT条件,我们就

((labelMat[i]*Ei>toler)and(alphas[i]>0)):

选择它为第一个变量相关关键词,

#随机选择另一个与alpha_i成对优化的alpha_j

在检验过程中全网推广外包,外层循环首先在

j=selectJrand(i保山网,m)

所有变量中遍历刷关键词,遇到违反KKT

#步骤1:计算误差Ej

条件的变量就接着选择第二个变

fXj=

量百度知心,然后在整个集合上遍历一次float(ly(alphas赶驴网事件,labelMat)又名福州站长网.T*(dataMatrix*dataMatrix[j百度分享平台,:].T))

+b

后如何提高alexa排名,

然后在所有非边界变量上遍历所

Ej=fXj-float(labelMat[j])

#保存原来的aplpha值

谓非边界变量,就是指满足

alphaIold=alphas[i]网站建设解决方案.copy();alphaJold=

0<αi

的变量,为什么要这么遍历呢,

alphas[j].copy();

因为随着多次子优化过程营销机构,边界

#步骤2:计算上下界L和H百度分享互刷,保证alhas在0

变量倾向于留在边界robots txt怎么写,而非边界

到c之间

if(labelMat[i]!=labelMat[j]):

变量倾向于波动企业营销,这一步启发式

L=max(0泛站软件,alphas[j]-alphas[i])

的选择算法是基于节省时间考虑

H=min(C,C+alphas[j]-alphas[i])

的,并且算法会一直在非边界变

else:

量集合上遍历,直到所有非边界

L=max(0,alphas[j]+alphas[i]-C)

变量都满足KKT条件H=min(C,alphas[j]+alphas[i])

ifL==H:print("L==H");continue

(self-cistent)

随后算法继续在整个集合上遍历

#步骤3:计算eta

寻违反KKT条件的变量作为

eta=2南京速必得.0*dataMatrix[i,:]*dataMatrix[j潍坊网络营销外包,:]营销网站设计公司.T-

优化的第一个变量百度新闻源,要注意的是网站优化排名,

dataMatrix[i竞价账户优化托管,:]*dataMatrix[i,:]企业网络推广方法.T-dataMatrix[jseo常用工具,:]*dataMatrix[j搜狗网站提交,:]上海企业推广.T

ifeta>=0:print("eta>=0");continue

算法在整个集合上最多只连续遍

#步骤4:更新alpha_j

历一次,但在非边界变量集合上

alphas[j]-=labelMat[j]*(Ei-Ej)/eta

可能连续遍历多次

#步骤5:修剪alpha_j

alphas[j]=clipAlpha(alphas[j],H,L)

3、第二个变量选择

if(abs(alphas[j]-alphaJold)<0成都网站优化.00001):

上面说了第一个变量的选择方

print("alpha_j变化太小");continue

法,然后是第二个变量的选择方

#步骤6:更新alpha_i

alphas[i]+=labelMat[j]*labelMat[i]*(alphaJold-

SMO称选择第二个变量的过程

alphas[j])

为内层循环刷淘宝指数,第二个变量的选择#步骤7:更新b_1和b_2

=b-Ei-标准是希望α2有尽可能大的变b1

labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i360和搜狗怎么了,:]*dataMatrix[i买链接,:].T-

化,由上面的计算公式可以

labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[i,:]*dataMatrix[j天津网络推广,:]旺道seo优化软件.T

b2=b-Ej-

知道南宁seo,依赖于E1−E2/η

Platt原文说的是计算Kernel函数

labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i怎样做好网络营销,:]*dataMatrix[j平度网,:]网上推广公司.T-

labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[j链接交换平台,:]*dataMatrix[j,:].T

太耗时了www 百度,所以就以|E1−E2||E1−

#步骤8:根据b_1和b_2更新b

E2|的更大值做为选择标准,但是

if(0alphas[i]):b=b1

这里核矩阵应该是可以预处理出

来的网络品牌营销。

至此两个要优化的变量就选择了

出来

但是这里还有一个小问题,如果

η为零铜川网,那么就会出现问题,也

就是说晋城网,如果有两个变量的特征

完全相同,那么会造成η为零,

这是要重新选择第二个变量长尾关键词挖掘。

具体方法是,首先在非边界元素

上遍历比比贴网,注意这里要随机选择位

置成都网站优化多少钱,这是为了防止从头开始的话

算法偏好靠前的元素360和搜狗,如果非边

界元素上不到使得ηη大于零

的第二个变量,就在整个集合上

再遍历一次,如果这次也不到ugc内容,

那么就放弃第一个已经选择的变

量温州seo。

调试过程中的关键问题及修改:

elif(0alphas[j]):b=b2

else:b=(b1+b2)/2西安百度竞价推广.0

#统计优化次数

alphaPairsChanged+=1

#打印统计信息

print("iter:%di:%d网络推广服务,pairschanged%d"%

(iter_num厦门seo培训,i怀化网站优化,alphaPairsChanged))

#更新迭代次数

if(alphaPairsChanged==0):iter_num+=1

else:iter_num=0

print("迭代次数:%d"%iter_num)

returnb,alphas

classoptStruct:

def__init__(self,dataMatIn信宜网,classLabels,C,toler做优化,kTup):

self洛阳seo.X=dataMatIn#数据矩阵

at=classLabels#数据标签

self广州推广.C=C

=toler#容错率

selfseo视频培训.m=(dataMatIn)[0]#数据矩阵行数

=(((self威海网站制作.m优化,1)))#根据矩阵行

数初始化alpha参数为0

self新疆网站推广.b=0#初始化b=0

=(((self百度的另一个域名.m,2)))

#根据矩阵行数初始化误差缓存,第一列为是否有效的标

志位江西网站优化,第二列为实际的误差E的值vagaa关键词。

self.K=(((秘籍,)))#初始化核K

foriinrange():#计算所有数据的核K

self东seo优化推广.K[:,i]=kernelTrans(self.X,self.X[i,:],kTup)

#函数说明:计算误差

defcalcEk(oS,k):

fXk=

float(ly(指数代刷,at)505美分.T*(oS.X*oS.X[k,:]微博软文营销.T)+

oS.b)

Ek=fXk-float(at[k])

returnEk

#函数说明:内循环启发方式

defselectJ(i搜狗360,oS,Ei):

maxK=-1;maxDeltaE=0;Ej=0#初始化

[i]=[1发稿,Ei]#根据Ei更新误差缓存

validEcacheList=o([:,0].A)[0]#返回误

差不为0的数据的索引值

if(len(validEcacheList))>1:#有不为0的误差

forkinvalidEcacheList:#遍历,到更大的Ek

ifk==i:continue#不计算i,浪费时间

Ek=calcEk(oS公关危机处理案例,k)#计算Ek

deltaE=abs(Ei-Ek)#计算|Ei-Ek|

if(deltaE>maxDeltaE):#到maxDeltaE

maxK=k;maxDeltaE=deltaE;Ej=Ek

returnmaxK,Ej#返回maxK,Ej

else:#没有不为0的误差

j=selectJrand(i,)#随机选择alpha_j的索引值

Ej=calcEk(oS,j)#计算Ej

returnj品牌推广策略,Ej

#函数说明:计算Ek,并更新误差缓存

defupdateEk(oS草根站长工具,k):

Ek=calcEk(oS,k)

#计算Ek

[k]=[1太原网站优化,Ek]

#更新误差缓存

#函数说明:优化的SOM算法

definnerL(i,oS):

#步骤1:计算误差Ei

Ei=calcEk(oS西安网络推广,i)

#优化alpha网站推广员,设定一定的容错率东seo优化排名。

if((at[i]*Ei<-)and([i]

((at[i]*Ei>)and([i]>0)):

#使用内循环启发方式2选择alpha_j网页快照在哪,并计算Ej

j,Ej=selectJ(i,oS,Ei)

#保存更新前的aplpha值,使用深拷贝

alphaIold=[i]搜索引擎排行.copy();alphaJold=

[j]百度连接开放平台.copy();

#步骤2:计算上下界L和H

if(at[i]!=at[j]):

L=max(0,[j]-[i])

H=min(oS桂林网站制作.C,oS.C+[j]-[i])

else:

L=max(0,[j]+[i]-oS.C)

H=min(oS点点seo.C,[j]+[i])

ifL==H:

print("L==H")

return0

#步骤3:计算eta

eta=2.0*oS线上销售.K[i网络营销的策略,j]-oStag是什么.K[i,i]-oS关键词排名快速提升.K[j,j]

ifeta>=0:

print("eta>=0")

return0

#步骤4:更新alpha_j

[j]-=at[j]*(Ei-Ej)/eta

#步骤5:修剪alpha_j

[j]=clipAlpha([j]互点,H,L)

#更新Ej至误差缓存

updateEk(oSseo教学,j)

if(abs([j]-alphaJold)<0.00001):

print("alpha_j变化太小")

return0

#步骤6:更新alpha_i

[i]+=at[j]*at[i]*(alphaJold-

[j])

#更新误差缓存

updateEk(oS苏州seo培训,i)

#步骤7:更新b_1和b_2

b1=oS.b-Ei-

at[i]*([i]-alphaIold)*oS.K[i,i]-

at[j]*([j]-alphaJold)*oS.K[i,j]

b2=oS.b-Ej-

at[i]*([i]-alphaIold)*oS恒牛网.K[i360vs百度,j]-

at[j]*([j]-alphaJold)*oS长沙网络推广.K[j,j]

#步骤8:根据b_1和b_2更新b

if(0<[i])and(oS韩城网.C>[i]):oS.b=b1

elif(0<[j])and(oS.C>[j]):oS什么是互动营销.b=b2

else:oS.b=(b1+b2)/2.0

return1

else:

return0

#函数说明:完整的线性SMO算法,用于计算超平的alpha博客推广方法,b

defsmoP(dataMatIn,classLabels,C404是什么意思,toler危机公关案例,maxIter,kTup=(lin,0)):

oS=optStruct((dataMatIn)常德百度推广,

(classLabels).transpose()刷排名软件,C网站推广宣传,toler,kTup)

#初始化数据结构

iter=0

#初始化当前迭代次数

entireSet=True;alphaPairsChanged=0

while(iter0)or

(entireSet)):

#遍历整个数据集都alpha也没有更新或者超过更大迭代

次数友情链接,则退出循环

alphaPairsChanged=0

ifentireSet:#遍历整个数据集

foriinrange(oS关键词优化公司.m):

alphaPairsChanged+=innerL(i,oS)#使用优化的

SMO算法

print("全样本遍历:第%d次迭代样本:%d竞价推广开户,

alpha优化次数:%d"%(iter网络营销的层次,i,alphaPairsChanged))

iter+=1

else:#遍历非边界值

nonBoundIs=o((.A>0)*

(静乐网.A

foriinnonBoundIs:

alphaPairsChanged+=innerL(i,oS)

print("非边界遍历:第%d次迭代样本:%d荆州网,

alpha优化次数:%d"%(iter,i关键字优化,alphaPairsChanged))

iter+=1

ifentireSet:#遍历一次后改为非边界遍历

entireSet=False

elif(alphaPairsChanged==0):#如果alpha没有更新,

计算全样本遍历

entireSet=True

print("迭代次数:%d"%iter)

returnoS.b100分seo,#返回SMO算法计算的b和alphas

#calcWs用于计算权重值w

defcalcWs(alphas,dataArr网络推销,classLabels):

X=(dataArr);labelMat=

(classLabels).transpose()

m襄樊seo,n=(X)

w=((n,1))

foriinrange(m):

w+=ly(alphas[i]*labelMat[i]潍坊网络推广,X[ipc端什么意思,:]搜索引擎排行.T)

returnw

#函数说明:通过核函数将数据转换更高维的空间#定义核转换函

数(径向基函数

defkernelTrans(X,A,kTup):

mrobots协议,n=(X)

K=(((m,1)))

ifkTup[0]==lin:K=X*A网络营销定义.T#线性核函数搜狗资源,只进行内积。

elifkTup[0]==rbf:#高斯核函数,根据高斯核函数公式进

行计算

forjinrange(m):

deltaRow=X[j,:]-A

K[j]=deltaRow*deltaRow百度被黑了.T

K=(K/(-1*kTup[1]**2))#计算高斯核K

else:raiseameError(核函数无法识别)

ReturnK

#返回计算的核K

#值得注意的是测试准确与k1和C的取值有关。

deftestRbf(k1=1.3):#给定输入参数K1

dataArr苏州seo,labelArr=

loadDataSet(C:/Users/asus/Desktop/machinelearninginaction/Ch06/t

)

#加载训练

b,alphas=smoP(dataArr,labelArr网站优化外包公司,200,0邵阳网站优化.0001,100什么网站建设,(rbf,k1))

#根据训练集计算b和alphas

datMat=(dataArr);labelMat=

(labelArr)关键字批量查询.transpose()

svInd=o(alphas.A>0)[0]#获得支持向量

sVs=datMat[svInd]

labelSV=labelMat[svInd];

print("支持向量个数:%d"%(sVs)[0])

m网站打开速度,n=(datMat)

errorCount=0

foriinrange(m):

kernelEval=kernelTrans(sVs网络营销服务,datMat[i网络营销推广的具体方法,:],(rbf,k1))#计

算各个点的核

predict=kernelEval爱站网.T*

ly(labelSV,alphas[svInd])+b

#根据支持向量的点成都网络,计算超平面视频外链,返回预测结果

(predict)!=(labelArr[i]):errorCount+=1

#返回数组中各元素的正负符号,用1和-1表示拉萨网,并统计

错误个数

print("训练集错误率:%创建企业网站.2f%%"%((float(errorCount)/m)*100))

#打印错误率

dataArr站点排名,labelArr=

loadDataSet(C:/Users/asus/Desktop/machinelearninginaction/Ch06/t

)

#加载测试集

errorCount=0

datMat=(dataArr);labelMat=

(labelArr).transpose()

m郴州网站制作公司,n=(datMat)

foriinrange(m):

kernelEval=kernelTrans(sVs友情链接交易,datMat[i,:],(rbfseo sem,k1))#计算

各个点的核

predict=kernelEval如何设计网站.T*ly(labelSV购物网站推广,alphas[svInd])

+b

#根据支持向量的点,计算超平面黑网站,返回预测结果

(predict)!=(labelArr[i]):errorCount+=1

#返回数组中各元素的正负符号百度快照软件,用1和-1表示,并统计

错误个数

print("测试集错误率:%seo行业.2f%%"%((float(errorCount)/m)*100))

#打印错误率

"基于SVM数字识别"

#转换为向量

defimg2vector(filename):

returnVect=zeros((1在线刷ip,1024))

fr=open(filename)

foriinrange(32):

lineStr=ne()

forjinrange(32):

returnVect[0,32*i+j]=int(lineStr[j])

returnreturnVect

#加载图像

defloadImages(dirame):

fromosimportlistdir

hwLabels=[]

trainingFileList=listdir(dirame)#加载训练集

m=len(trainingFileList)

trainingMat=zeros((m,1024))

foriinrange(m):

fileameStr=trainingFileList[i]

fileStr=(.)[0]#关闭txt

classumStr=int((_)[0])

ifclassumStr==9:#二分类

(-1)

else:

(1)

trainingMat[i,:]=img2vector(%s/%s%(dirame,

fileameStr))

returntrainingMat昆明网站设计,hwLabels

deftestDigits(kTup=(rbf78901,10)):

dataArrseo学习论坛,labelArr=

loadImages(C:/Users/asus/Desktop/trainingDigits)

#加载训练

b,alphas=smoP(dataArr,labelArr网页搜索优化,200,0.0001,1000搜索 百度,kTup)

#根据训练集计算b和alphas

datMat=(dataArr);labelMat=

(labelArr).transpose()

svInd=o(alphas网络营销的成功案例.A>0)[0]#获得支持向量

sVs=datMat[svInd]

labelSV=labelMat[svInd];

print("支持向量个数:%d"%(sVs)[0])

m田阳网,n=(datMat)

errorCount=0

foriinrange(m):

kernelEval=kernelTrans(sVs新余网,datMat[igoogle排名优化,:]内容营销,kTup)#计算各

个点的核

predict=kernelEval.T*

ly(labelSV,alphas[svInd])+b

#根据支持向量的点,计算超平面什么是超链接,返回预测结果

(predict)!=(labelArr[i]):errorCount+=1

#返回数组中各元素的正负符号,用1和-1表示中山百度推广,并统计

错误个数

print("训练集错误率:%南京网络推广.2f%%"%((float(errorCount)/m)*100))

#打印错误率

dataArr企业口碑推广,labelArr=

loadImages(C:/Users/asus/Desktop/testDigits)

errorCount=0

datMat=mat(dataArr);labelMat=mat(labelArr)()

m视频营销,n=shape(datMat)

foriinrange(m):

kernelEval=kernelTrans(sVs,datMat[i威海百度,:],kTup)

predict=kernelEval.T*multiply(labelSV,alphas[svInd])+b

ifsign(predict)!=sign(labelArr[i]):errorCount+=1

ifsign(predict)!=sign(labelArr[i]):errorCount+=1

print("测试集错误率:%南昌网站优化.2f%%"%((float(errorCount)/m)*100))

#打印错误率

if__name__==__main__:

"简化版的som"

#dataMat,labelMat=

loadDataSet(C:/Users/asus/Desktop/machinelearninginaction/Ch06/t

)

#b,alphas=smoSimple(dataMat南京seo顾问,labelMat,0.6,0.001,40)

"完整的线性SMO算法"

#dataArr,labelArr=

loadDataSet(C:/Users/asus/Desktop/machinelearninginaction/Ch06/t

)

#b云南网站设计,alphas=smoP(dataArr中卫网站设计公司,labelArr什么是cms,0.6网站查询,0.001,40)

"测试函数"

#testRbf()

"基于SVM数字识别"

testDigits((rbf好搜排名提升软件 好搜排名提升软件,20))

运行结果:

6-1

6-2

6-5

6-8

6-9

实验总结:

支持向量机从书上的讲解来看重庆网络推广,我明白了间隔、支持向量的概念,了解到它就是要到更大间

隔的划分超平面,从对应的模型应用拉格朗日乘子法,转化为对偶问题,对其推导公式的过程无疑

问软推网,但是对怎么求解这个对偶问题的方法仍有疑问搜索引擎有哪些,更不太理解从对偶问题解出的拉格朗日乘子,

和满足KKT条件之间的关系,以及和对偶问题解法有无关系王通seo。关于对核函数的选取和题目本身的要

求有什么关联目录提交,及其核函数如何进行维度转化上有些许不清楚。

关于支持向量机的理解:支持向量机方法是建立在统计学习理论基础上的如何删除百度快照,根据有限的样本信

息在模型的复杂性(即对特定训练样本的学习精度)和学习能力(即无错误地识别任意样本的能力)之

间寻求更佳折衷西安网站优化,以期获得更好的推广能力网站如何防攻击。支持向量机方法的几个主要优点有:1快速网站优化哪家好.它是专门针

对有限样本情况的,其目标是得到现有信息下的更优解而不仅仅是样本数趋于无穷大时的更优值;

2.算法最终将转化成为一个二次型寻优问题郴州网站制作公司,从理论上说,得到的将是全局更优点,解决了在神

经网络方法中无法避免的局部极值问题;3自然排名.算法将实际问题通过非线性变换转换到高维的特征空

间,在高维空间中构造线性判别函数来实现原空间中的非线性判别函数网络发软件,特殊性质能保证机器有较

好的推广能力成都网络营销,同时它巧妙地解决了维数问题,其算法复杂度与样本维数无关;

评分小项

1.实验报告格式排版

实验

2合肥吉尔seo.实验设计思路(科学性、可行性、创新性)

成绩

评定

3.实验代码编写(规范性、正确性、复杂性)

4.实验结果分析(正确性、合理性)

5.实验心得总结

分值

10分

30分

30分

20分

10分

得分总分:

如果我是梁山伯-篮球火