机器学习分享上机作业_第1页
机器学习分享上机作业_第2页
机器学习分享上机作业_第3页
机器学习分享上机作业_第4页
机器学习分享上机作业_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GradientDescent1.题目描述:用梯度下降法对所给数据进行一元线性回归。2.算法描述及步骤:回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回归还有很多的变种,如locallyweighted回归,logistic回归,等等。对于梯度下降法来说,可以先对数据作出一个估计函数:θ在这儿称为参数,表示每个特征的重要性。为了如果我们令X0=1,就可以用向量的方式来表示了:然后需要一个机制去评估θ是否比较好,所以说需要对我们做出的h函数进行评估,一般这个函数称为损失函数(lossfunction)或者错误函数(errorfunction),描述h函数不好的程度,在下面,我们称这个函数为J函数。在这儿我们可以做出下面的一个错误函数:梯度下降法是按下面的流程进行的:(1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。(2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。对于函数J(θ)求偏导:下面是更新的过程,也就是θi会向着梯度最小的方向进行减少。θi表示更新之前的值,-后面的部分表示按梯度方向减少的量,α表示步长,也就是每次按照梯度减少的方向变化多少。3.程序代码及解释:clearall;loadshujusizeshuju=size(shuju);x=shuju(:,1)';y=shuju(:,2)';plot(x,y,'+');holdon;symstheta0theta1theta00=1;%初始化值theta11=1;alpha=0.005;%设定迭代步长n=0;J=0;while1n=n+1;J=0;fori=1:sizeshuju(1)J=J+(theta0+theta1.*x(i)-y(i)).^2;endJ=J/(2*sizeshuju(1));gJ=[diff(J,theta0)diff(J,theta1)];gJ=subs(gJ,theta1,theta11);gJ=subs(gJ,theta0,theta00);ifnorm(gJ)<0.3break;endtheta00=theta00-alpha*gJ(1);%根据公式,更新值。theta11=theta11-alpha*gJ(2);endh=theta11.*x+theta00;J=0;;fori=1:sizeshuju(1)J=J+(h(i)-y(i)).^2;endx2=1:0.01:5;%画拟合直线和点数据分布y2=theta00+theta11.*x2;plot(x2,y2,'r');theta00%显示最终theta11J=J/(2*sizeshuju(1));%计算损失函数值n%显示算法迭代次数4.实验结果:由结果可知,算法迭代63次才得以收敛,theta的值为[1.2463,1.9055]。拟合直线:损失函数J随n的变化曲线:LogisticRegression1.题目描述:YouareofferedaYaleandORLdataset(Facialdatasets).YouareaskedtowriteaprograminMATLAB,touselogisticregressiontodoabinaryclassificationtaskandtestyourmethod.Theclasses(twoclasses)、thenumberoftrainingsamplesandtestsamplesaredecidedbyyourself.Pleasecomputetherecognitionaccuracy.2.算法描述:对于目标值是离散变量的两分类问题,假设目标值是{0,1},所以先改变模型使其预测值在[0,1]之间,选择这样一个函数:有了这个函数,对于对于一个样例,就可以得到它分类的概率值:将上述公式组合起来,就可以得到公式如下:而在logistic回归问题中的损失函数与线性回归中的损失函数不同,这里定义的为:对上式求最大似然估计并用梯度下降法求解极值,得到参数的更新迭代公式:根据上式,将预测得到的数据的分类,标准分类带入上式并迭代,直至算法收敛,就可以得到最终的参数。3.编程实现步骤:(1)初始化参数,迭代步长;(2)导入数据;(3)计算损失函数;(4)梯度下降法求解;(5)参数更新;(6)测试数据,得到准确率。4.程序代码及解释:clearall;%因为logistic只能进行2分类,而YaleandORL数据中却有很多类,从中选择两类的话难免数据两太少,所以,本程序用到了weather数据,同样可以进行正确的练习A=load('C:\Users\lisai\Desktop\weather.mat');data=A.Data;label=A.Label;%原始数据有多类,但是由于logisticregression只能进行两分类的任务,所以,把数据的第二、三类挑出来,作为要处理数据的第0、1类。select=find(label>1);data=data(select,:);label=label(select,:);label(label==2)=0;label(label==3)=1;dsize=size(data);ran=randperm(dsize(1));data=data(ran,:);label=label(ran,:);onesColum=ones(dsize(1),1);data=[data,onesColum];train_data=data(1:300,:);%随机选择测试样本和训练样本。test_data=data(301:dsize(1),:);test_label=label(301:dsize(1),:);train_label=label(1:300,:);thetasize=dsize(2)+1;theta=zeros(thetasize,1);%初始化theta的值。esp=0.00001;%loss=inf;iter=0;maxiter=10000;%定义最大迭代次数,防止算法不收敛alpha=0.1;%初始化J,alphaJ=0;flag=1;whileflag&&iter<maxiterhypothesis=-(train_data*theta);%fori=1:300hypothesis(i)=1/(1+exp(hypothesis(i)));endloss=0;%更新theta值forj=1:thetasizeupdata=(hypothesis-train_label)'*train_data(:,j)*alpha;theta(j)=theta(j)-updata;endJ_old=J;fori=1:300%计算损失函数J=J+(hypothesis(i)-train_label(i))^2;endifabs(J-J_old)<esp%判断损失函数值是否收敛flag=0;enditer=iter+1;enditerright=0;fori=1:60%对测试样本进行测试,计算准确率hypo=1/(1+exp(-test_data(i,:)*theta));ifhypo>=0.5iftest_label(i)==1right=right+1;endelseiftest_label(i)==0right=right+1;endendendacc=right/605.运行结果:6.反思总结:老师给的数据有好多种类,不适合用logistic进行分类,所以从中选择了两类数据进行分类。在数据处理上不是很熟练,本道题需要随机在原始数据中选择训练样本和测试样本,才能得到较好的结果。算法原理很简单,就是不停的迭代,更新系数,但logistic容易产生过拟合的现象,这对分类结果显然是很不利的。Perceptron1.题目描述:Trainthedesignednetworkusingthetrainingsamplesprovidedbelow,andtesttheeffectivenessofthenetworkusingthetestsamples.Thetrainingexamplesare:P_train=[-1103221-1-2-1;0121-10-2211];T_train=[0000000111;0000111000];Thetestingexamplesare:P_test=[-2,0,3;2,1,-1;];T_test=[1,0,0;0,0,1];Aftertheaboveprocess,drawthelearnedclassificationlineandthecorrespondingsamplesinthe2Dspace.2.算法描述:(1)本题中感知器有两个输出,有三个类别,所以应该设计两个感知器进行判别;(2)初始化增广权向量w和b,迭代次数time=100;(3)输入训练数据p_train,计算判别函数值(4)设数据正确输出为t,令,则下次迭代的(5)重复上述步骤,直至达到最大迭代次数100。3.程序代码及解释:clearall;p_train=[-1103221-1-2-1;0121-10-2211];t_train=[0000000111;0000111000];P_test=[-2,0,3;2,1,-1;]';T_test=zeros(2,3);p=p_train';x=[p(:,1);P_test(:,1)]y=[p(:,2);P_test(:,2)]plot(x,y,'*');holdont=t_train';psize=size(p);theta=[00;00];%初始化thetab(1)=0;fortime=1:100fori=1:psize(1)e=t_train(1,i)-hardlim(theta(1,:)*p(i,:)'+b(1));%e=t-atheta(1,:)=theta(1,:)+e*p(i,:);%theta=theta+e*pb(1)=b(1)+e;%b=b+e,以下同上endendb(2)=0;fortime=1:100fori=1:psize(1)e=t_train(2,i)-hardlim(theta(2,:)*p(i,:)'+b(2));theta(2,:)=theta(2,:)+e*p(i,:);b(2)=b(2)+e;endendthetabx2=-2:0.1:3;y2=(-b(1)-theta(1,1).*x2)/theta(1,2);%画两条判别线,将数据分类plot(x2,y2,'r');holdonx3=-2:0.1:3;y2=(-b(2)-theta(2,1).*x2)/theta(2,2);plot(x2,y2,'g')fori=1:2forj=1:3T_test(i,j)=hardlim(theta(i,:)*P_test(j,:)'+b(i));endendT_test4.运行结果:(1)数据点及分界线:(2)theta、b、测试数据输出结果:与题目给出结果对比,完全相同!5.反思总结:在课堂上学的感知器学习算法都是多个输入,单个输出,但是这道题却是多个输入多个输出的形式,刚开始做的时候有点丈二和尚摸不着头脑,后来思考了一会儿才想出来可以把每个输出都进行一次感知器学习,每一端都输出一个0,1,这样最后再一组合,就可以把数据进行多分类了。Softmaxregression1.问题描述:用Softmax分类器实现对IndianPines遥感数据的分类:实验要求:1.统计分类正确率(AA,OA即:每一类的正确率的平均,和整体正确率)2.训练时间。3.参数分析2.算法原理:在之前的softmax学习中,我们知道logisticregression很适合做一些非线性方面的分类问题,不过它只适合处理二分类的问题,且在给出分类结果时还会给出结果的概率。但是如果要进行多分类的问题,我们就需要用到另外一种算法,softmaxregression.在Logisticregression中,所学习的系统的假设为:其对应的损失函数为:可以看出,给定一个样本,就输出一个概率值,该概率值表示的含义是这个样本属于类别’1’的概率,因为总共才有2个类别,所以另一个类别的概率直接用1减掉刚刚的结果即可。如果现在的假设是多分类问题,比如说总共有k个类别。在softmaxregression中这时候的系统的假设为:其中的参数不再是列向量,而是一个矩阵,矩阵的每一行可以看做是一个类别所对应分类器的参数,总共有k行。所以矩阵可以写成下面的形式:此时,系统损失函数的方程为:其中的1{.}是一个指示性函数,即当大括号中的值为真时,该函数的结果就为1,否则其结果就为0。当然了,如果要用梯度下降法,牛顿法,或者L-BFGS法求得系统的参数的话,就必须求出损失函数的偏导函数,softmaxregression中损失函数的偏导函数如下所示:注意公式中的是一个向量,表示的是针对第i个类别而求得的。所以上面的公式还只是一个类别的偏导公式,我们需要求出所有类别的偏导公式。表示的是损失函数对第j个类别的第l个参数的偏导。比较有趣的时,softmaxregression中对参数的最优化求解不只一个,每当求得一个优化参数时,如果将这个参数的每一项都减掉同一个数,其得到的损失函数值也是一样的。这说明这个参数不是唯一解。为了解决这个问题,可以加入规则项,加入规则项后的损失函数表达式如下:这个时候的偏导函数表达式如下所示:接下来就是用数学优化的方法来求解了,显而易见,softmaxregression是logisticregression的扩展。3.编程实现步骤:Step0:初始化常数和参数;Step1:导入数据;Step2:计算softmaxCost;Step3:梯度下降法求解;Step4:参数学习;Step5:数据测试。4.程序代码及解释:clearall;A=load('C:\Users\lisai\Desktop\IndianaPines.mat');alpha=1e-10;data=A.pixels;data=data';label=A.Label;label(label==0)=17;%将类标为0的数据类标换位17dsize=size(data);column=ones(dsize(1),1);data=[column,data];dsize=size(data);lsize=size(label);ran=randperm(dsize(1));data=data(ran,:);label=label(ran,:);train_data=data(1:15000,:);%选择训练样本和测试样本train_label=label(1:15000,:);test_data=data(15001:end,:);test_label=label(15001:end,:);trsize=size(train_data);tesize=size(test_data);theta=0.005*randn(17*dsize(2),1);theta=reshape(theta,17,dsize(2));lambda=1e-4;cost=0;cost_old=0;%初始化各个参数iter=0;sign=0;thetagrad=zeros(17,dsize(2));h=zeros(trsize(1),17);whileabs(cost_old-cost)<0.000000001%更新thetacost_old=cost;m=train_data*theta';m=exp(m);forj=1:17fori=1:trsize(1)h(i,j)=m(i,j)/sum(m(i,:));iftrain_label(i)==jsign=1;%指示变量elsesign=0;end%此处theta是一个二维向量,所以更新公式和logistic不太一样thetagrad(j,:)=thetagrad(j,:)-1/trsize(1)*(sign-h(i,j))*train_data(i)+lambda*theta(j,:);endendtheta=theta+thetagrad*alpha;%theta更新公式fori=1:trsize(1)forj=1:17iftrain_label(i)==jsign=1;elsesign=0;endcost=cost-1/trsize(1)*sign*log(h(i,j));%+lambda/2*sum(theta(:).^2);endendcost=cost+lambda/2*sum(theta(:).^2);iter=iter+1;endsoft=theta*test_data';[M,I]=max(soft);right=0;esch_right=zeros(1,17);fori=1:size(test_data,1)%统计准确率forj=1:17ifI(i)==test_label(i)right=right+1;ifI(i)==j-1esch_right(j)=esch_right(j)+1;endendendendfori=1:17each_acc(i)=esch_right(i)/size(find(test_label==i))endacc=right/6025each_accitertheta5.实现结果:(1)整体准确率:每一类的准确率:其均值为0.4366。(2)训练时间:可以发现,迭代次数为2344次。(3)参数分析:Theta数据太大,不能全部展示,只截一部分进行说明:6.实验总结:Softmaxregression就是对logisticregression的扩展,它可以进行多分类,有了logisticregression的基础,在实现Softmaxregression的时候就容易了许多,只需要把原来的一列的变为一个二维的值即可,在思维和数据处理上都增加了一定的难度。Svm1.问题描述:用svm分类器实现对IndianPines遥感数据的分类:2.算法描述及基本流程:SVM的主要思想可以概括为两点:⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;⑵它基于结构风险最小化理论之上在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。先把svm算法的基本流程说明一下。首先是函数间隔与几何间隔,由它们引出最优间隔分类器;为了多快好的解决最优间隔分类器问题,使用了拉格朗日对偶性性质,于是,先要理解原始优化问题与对偶问题及它们在什么条件(KKT条件)下最优解等价,然后写出最优间隔分类器的对偶形式;通过对最有间隔分类器对偶问题求解,发现求解时目标函数中存在内积形式的计算,据此引入了核技法;引入核技法后就得到了完完全全的svm求解问题,使用序列最小化算法(SMO)进行求解,svm算法很复杂,这只是对其作出的一个很抽象的解释。声明一下,svm算法讲原来的类标[0,1]变为了[-1,1],假设函数变为:使用数学语言对最优间隔分类器进行表示:该问题不易解决,因为约束是非凸性约束,最优解容易达到局部最优。于是,我们对该问题进行转换该问题对应的拉格朗日方程是:然后再求解其对偶问题:再利用核技法等对其进行求解即可。3.程序代码及解释:clearall;load('IndianaPines.mat');%导入数据maxnum=21025;classnum=16;traintestnum=0;fivenum=0;k=1;everynum=30;eachnum=zeros(classnum,1);thenum=0;fori=1:maxnumif(Label(i)~=0)eachnum(Label(i))=eachnum(Label(i))+1;traintestnum=traintestnum+1;train_test(:,traintestnum)=pixels(:,i);train_test_label(traintestnum)=Label(i);endendtraineachnum=zeros(classnum,1);fori=1:16forj=1:traintestnumif(train_test_label(j)==i)pixel_train(:,k)=train_test(:,j);traineachnum(i)=traineachnum(i)+1;label_train(k)=i;k=k+1;thenum=th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论