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

下载本文档

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

文档简介

本文格式为Word版,下载可任意编辑——机器学习上机作业

GradientDescent

1.题目描述:

用梯度下降法对所给数据进行一元线性回归。

2.算法描述及步骤:

回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,假使这个曲线是一条直线,那就被称为线性回归,假使曲线是一条二次曲线,就被称为二次回归,回归还有好多的变种,如locallyweighted回归,logistic回归,等等。

对于梯度下降法来说,可以先对数据作出一个估计函数:

θ在这儿称为参数,表示每个特征的重要性。为了假使我们令X0=1,就可以用向量的方式来表示了:

然后需要一个机制去评估θ是否比较好,所以说需要对我们做出的h函数进行评估,一般这个函数称为损失函数(lossfunction)或者错误函数(errorfunction),描述h函数不好的程度,在下面,我们称这个函数为J函数。在这儿我们可以做出下面的一个错误函数:

梯度下降法是按下面的流程进行的:

(1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。(2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。对于函数J(θ)求偏导:

下面是更新的过程,也就是θi会向着梯度最小的方向进行减少。θi表示

更新之前的值,-后面的部分表示按梯度方向减少的量,α表示步长,也就是每次依照梯度减少的方向变化多少。

3.程序代码及解释:clearall;

loadshuju

sizeshuju=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;end

J=J/(2*sizeshuju(1));

gJ=[diff(J,theta0)diff(J,theta1)];gJ=subs(gJ,theta1,theta11);gJ=subs(gJ,theta0,theta00);ifnorm(gJ)根据上式,将预计得到的x(i)数据的分类h?(x(i)),标准分类y(i)带入上式

并迭代,直至算法收敛,就可以得到最终的参数?。

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%fori=1:300

hypothesis(i)=1/(1+exp(hypothesis(i)));end

loss=0;%更新theta值forj=1:thetasize

updata=(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;end

ifabs(J-J_old)=0.5

iftest_label(i)==1right=right+1;endelse

iftest_label(i)==0right=right+1;endendend

acc=right/60

5.运行结果:

6.反思总结:

老师给的数据有好多种类,不适合用logistic进行分类,所以从中选择了两类数据进行分类。在数据处理上不是很熟练,本道题需要随机在原始数据中选择训练样本和测试样本,才能得到较好的结果。算法原理很简单,就是不停的迭代,更新系数,但logistic简单产生过拟合的现象,这对分类结果显然是很不利的。

Perceptron

1.题目描述:

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,令e?t?a,则下次迭代的

a?hardlim?w*p_train?b?w_new?w_old?e*p,b_new?b_old?e;

(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;end

endthetab

x2=-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:3

T_test(i,j)=hardlim(theta(i,:)*P_test(j,:)'+b(i));endendT_test

4.运行结果:

(1)数据点及分界限:

(2)theta、b、测试数据输出结果:

与题目给出结果对比,完全一致!

5.反思总结:

在课堂上学的感知器学习算法都是多个输入,单个输出,但是这道题却是

多个输入多个输出的形式,刚开始做的时候有点丈二和尚摸不着头脑,后来思考了一会儿才想出来可以把每个输出都进行一次感知器学习,每一端都输出一个0,1,这样最终再一组合,就可以把数据进行多分类了。

Softmaxregression

1.问题描述:

用Softmax分类器实现对IndianPines遥感数据的分类:

试验要求:

1.统计分类正确率(AA,OA即:每一类的正确率的平均,和整体正确率)2.训练时间。3.参数分析

2.算法原理:

在之前的softmax学习中,我们知道logisticregression很适合做一些非线性方面的分类问题,不过它只适合处理二分类的问题,且在给出分类结果时还会给出结果的概率。但是假使要进行多分类的问题,我们就需要用到另外一种算法,softmaxregression.

在Logisticregression中,所学习的系统的假设为:

其对应的损失函数为:

可以看出,给定一个样本,就输出一个概率值,该概率值表示的含义是这个样本属于类别’1’的概率,由于总共才有2个类别,所以另一个类别的概率直接用1减掉刚刚的结果即可。假使现在的假设是多分类问题,譬如说总共有k个类别。在softmaxregression中这时候的系统的假设为:

其中的参数?不再是列向量,而是一个矩阵,矩阵的每一行可以看做是一个类别所对应分类器的参数,总共有k行。所以矩阵?可以写成下面的形式:

此时,系统损失函数的方程为:

其中的1{.}是一个指示性函数,即当大括号中的值为真时,该函数的结果就为1,否则其结果就为0。

当然了,假使要用梯度下降法,牛顿法,或者L-BFGS法求得系统的参数的话,就必需求出损失函数的偏导函数,softmaxregression中损失函数的偏导函数如下所示:

注意公式中

?J(?)的是一个向量,表示的是针对第i个类别而求得的。??jl所以上面的公式还只是一个类别的偏导公式,我们需要求出所有类别的偏导公式。

??jJ(?)表示的是损失函数对第j个类别的第l个参数的偏导。

比较好玩儿的时,softmaxregression中对参数的最优化求解不只一个,每当求得一个优化参数时,假使将这个参数的每一项都减掉同一个数,其得到的损失函数值也是一样的。这说明这个参数不是唯一解。为了解决这个问题,可以加

入规则项,参与规则项后的损失函数表达式如下:

温馨提示

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

评论

0/150

提交评论