版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Ng机器学习课程(/materials.html)Notes理论要点,并且给出所有课程exercise的作业code和实验结果分析。”游泳是游会的“,希望通过这个系列可以深刻理解机器学习算法,并且自己动手写出work高效的机器学习算法code应用到真实数据集做实验,理论和实战兼备。Part1LinearRegression1.SupervisedLearning在SuperviseLearning的Setting中,我们有若干训练数据(xA(i),yA(i))i=1,...,m,这里i用于indextrainingexample。监督学习的任务就是要找到一个函数(又称为模型或者假设hypothesis)H:X->Y,使得h(x)是相应值y的好的预测。整个过程可以描述为下图Trainin?setLeiminsalgorithmkah―predictedylfT>iprodizlcd当待预测的目标变量是连续型数据时,我们称之为回归(regression)问题;当待预测的目标变量是离散型数据时,我们称之为分类(classification)问题。因此回归问题和分类问题是监督学习针对连续型数据预测和离散型数据预测的两种典型学习问题。2LinearRegression一般而言,我们会用feature向量来描述训练数据X,我们用x_jAi来表示,其中j用于indexfeature,i用于index训练样本。在监督学习里面,我们需要找到一个最佳的预测函数h(x),比如我们可以选取feature的线性组合函数遍3)..目fi+血工]+赢翊那么我们的问题就变成了要寻找最优的参^theta可以使得预测的error最小。把这个函数用向量表示机工)=而=射H机器学习里面一般默认变量为列向量,因此这里是参数向量theta的转置矩阵。同时我们还加上7”feature即)^0=1以便方便表示成为向量乘积的形式。为了寻找最优的参麴theta,我们可以最小化errorfunction即costfunction期=;史施函}-钠"-1=1这个就是least-squarescostfunction,通过最小化这个函数来寻找最优参数。3LMS算法为了寻找最优参数,我们可以随机初始化,然后沿着梯度慢慢改变参数值(需要改变theta所有维),观察costfunction值的变化,这就是梯度下降法的思想。假设我们只有一个训练样本(x,y),对参数\theta_j求偏导数有斜)=汐"拭ZOtfj=〔蛔工)F、寿(立练-y)=侬诚工)一#)咨我们可以得到下面的参数updaterule%:=Gj+"舟一柘(工国))率.其中\alpha叫learningrate,用于调节每次迭代参数变化的大小,这就是LMS(leastmeansquares)算法。用直观的角度去理解,如果我们看到一个训练样本满足yA(i)-h(x(i))等于0,那么说明参数就不必再更新;反之,如果预测值error较大,那么参数的变化也需要比较大。如果我们有多个训练样本,比如有m个样本,每个样本用n个feature来描述,那么GD的updaterule需要对n个feature对应的n个参数都做更新,有两种更新方式:batchgradient
descent和stochastic/incrementalgradientdescent。对于前者,每次更新一轮参数\theta_j(注意n个参数需要同步更新才算完成一轮)需要都需要考虑所有的m个训练样本,即Repeatuntilconvergence{%:=%+口(衲讣一曲3咛)工¥(forevery)也就是每更新一个\theta_j我们需要计算所有m个训练样本的predictionerror然后求和。而后者更新一轮参^\theta_j我们只需要考虑一个训练样本,然后逐个考虑完所有样本(因此是incremental的)即Loop《fori=Itoni,{&j;=+q(钠"—顽h"〕))矽)(Eoreveryj).当训练样本sizem非常大时,显然stochastic/incrementalgradientdescent会更有优势,因为每更新一轮参数不需要扫描所有的训练样本。我们也可以把costfunction写出矩阵相乘的形式,即令则有则有-g⑴-(上同件_5E⑴一仇(工同)一胛)因此代价函数J可以写成11m-矿即-切=豆£姻凹—网』(=1=®我们将J(\theta)对向量\theta求梯度(对于向量求导,得到的是梯度,是有方向的,这里需要用到matrixcalculus,比标量形式下求导麻烦一些,详见NG课程notes),令梯度为0可以直接得到极值点,也就是唯一全局最优解情形下的最值点(normalequations)B=这样可以避免迭代求解,直接得到最优的参^\theta值。3编程实战(注:本部分编程习题全部来自AndrewNg机器学习网上公开课)单变量的LinearRegression在单变量的LinearRegression中,每个训练样本只用一个feature来描述,例如某个卡车租赁公司分店的利润和当地人口总量的关系,给定若干人口总量和利润的训练样本,要求进行LinearRegression得到一条曲线,然后根据曲线对新的城市人口总量条件下进行利润的预测。主程序如下[plain]viewplaincopy%%Initializationclear;closeall;clc3.%%====================Part1:BasicFunction====================%CompletewarmUpExercise.mfprintf('RunningwarmUpExercise...\n');fprintf('5x5IdentityMatrix:\n');warmUpExercise()9.fprintf('Programpaused.Pressentertocontinue.\n');pause;12.13.%%=======================Part2:Plotting=======================fprintf('PlottingData...\n')data=load('ex1data1.txt');X=data(:,1);y=data(:,2);m=length(y);%numberoftrainingexamples19.%PlotData%Note:YouhavetocompletethecodeinplotData.mplotData(X,y);23.fprintf('Programpaused.Pressentertocontinue.\n');pause;26.%%===================Part3:Gradientdescent===================fprintf('RunningGradientDescent...\n')29.X=[ones(m,1),data(:,1)];%Addacolumnofonestoxtheta=zeros(2,1);%initializefittingparameters32.%Somegradientdescentsettingsiterations=1500;alpha=0.01;36.%computeanddisplayinitialcostcomputeCost(X,y,theta)39.%rungradientdescenttheta=gradientDescent(X,y,theta,alpha,iterations);42.%printthetatoscreenfprintf('Thetafoundbygradientdescent:');fprintf('%f%f\n',theta(1),theta(2));46.%Plotthelinearfitholdon;%keeppreviousplotvisibleplot(X(:,2),X*theta,'-')legend('Trainingdata','Linearregression')holdoff%don'toverlayanymoreplotsonthisfigure52.%Predictvaluesforpopulationsizesof35,000and70,000predictl=[1,3.5]*theta;fprintf('Forpopulation=35,000,wepredictaprofitof%f\n',...predict1*10000);predict2=[1,7]*theta;fprintf('Forpopulation=70,000,wepredictaprofitof%f\n',...predict2*10000);60.fprintf('Programpaused.Pressentertocontinue.\n');pause;63.%%=============Part4:VisualizingJ(theta_0,theta_1)=============fprintf('VisualizingJ(theta_0,theta_1)...\n')66.%GridoverwhichwewillcalculateJtheta0_vals=linspace(-10,10,100);theta1_vals=linspace(-1,4,100);70.%initializeJvalstoamatrixof0'sJ_vals=zeros(length(theta0_vals),length(theta1_vals));73.%FilloutJ_valsfori=1:length(theta0_vals)forj=1:length(theta1_vals)t=[theta0_vals(i);theta1_vals(j)];J_vals(i,j)=computeCost(X,y,t);endend81.82.%Becauseofthewaymeshgridsworkinthesurfcommand,weneedto%transposeJ_valsbeforecallingsurf,orelsetheaxeswillbeflippedJ_vals=J_vals';%Surfaceplotfigure;surf(theta0_vals,theta1_vals,J_vals)xlabel('\theta_0');ylabel('\theta_1');90.%Contourplotfigure;%PlotJ_valsas15contoursspacedlogarithmicallybetween0.01and100contour(theta0_vals,theta1_vals,J_vals,logspace(-2,3,20))xlabel('\theta_0');ylabel('\theta_1');holdon;plot(theta(1),theta(2),'rx','MarkerSize',10,'LineWidth',2);首先load进训练数据,并且visualize出来
0-弯*、X-板XX5IIIIIIIII4&B倡12Uw侣2D:2224population然后需要实现两个函数computeCost和graientDescent,分别计算代价函数和对参数按照梯度方向进行更新,结合LinearRegression代价函数计算公式和参数更新Rule,我们可以实现如下viewplaincopyfunctionJ=computeCost(X,y,theta)%COMPUTECOSTComputecostforlinearregression%J=COMPUTECOST(X,y,theta)computesthecostofusingthetaasthe%parameterforlinearregressiontofitthedatapointsinXandy5.%Initializesomeusefulvaluesm=length(y);%numberoftrainingexamples8.%YouneedtoreturnthefollowingvariablescorrectlyJ=0;11.%======================YOURCODEHERE======================%Instructions:Computethecostofaparticularchoiceoftheta%YoushouldsetJtothecost.15.J=1/(2*m)*(X*theta-y)'*(X*theta-y);17.%=========================================================================19.end实现的时候要注意X是m行2列,theta是2行1列,y是m行1列。由于matlab默认矩阵是叉乘,要注意保证相乘的矩阵的维数满足叉乘的要求。参数更新函数如下[plain]viewplaincopyfunction[theta,J_history]=gradientDescent(X,y,theta,alpha,num_iters)%GRADIENTDESCENTPerformsgradientdescenttolearntheta%theta=GRADIENTDESENT(X,y,theta,alpha,num_iters)updatesthetaby%takingnum_itersgradientstepswithlearningratealpha5.%Initializesomeusefulvaluesm=length(y);%numberoftrainingexamplesJ_history=zeros(num_iters,1);9.foriter=1:num_iters11.%======================YOURCODEHERE======================%Instructions:Performasinglegradientstepontheparametervector%theta.%%Hint:Whiledebugging,itcanbeusefultoprintoutthevalues%ofthecostfunction(computeCost)andgradienthere.%%BatchgradientdescentUpdate=0;fori=1:mUpdate=Update+alpha/m*(y(i)-X(i,:)*theta)*X(i,:)';endtheta=theta+Update;25.%============================================================27.%SavethecostJineveryiterationJ_history(iter)=computeCost(X,y,theta);30.end32.end这里用的是BatchGradientDescent也就是每更新一次参数都需要扫描所有1^个训练样本。Update就是每次参数的变化量,需要对所有trainingexample的训练误差进行求和。每次更新参数后重新计算代价函数,把所有历史的cost记录保存在J_history中。经过1500次迭代,我们可以输出求的的参数theta,画出拟合的曲线,并且对新的人口来预测利润值,即[plain]viewplaincopy1:RunningGradientDescent•ans=7276.Thetafoundbygradientdescent:-3.6302911.166362Forpopulation=35,000,wepredictaprofitof4519.767868Forpopulation=70,000,wepredict7276.Thetafoundbygradientdescent:-3.6302911.166362Forpopulation=35,000,wepredictaprofitof4519.767868Forpopulation=70,000,wepredictaprofitof45342.450129Programpaused.Pressentertocontinue.11拟合出的曲线如下图25IIIIIIII」,XTrainingdataLinearregression24下面这张图是在(theta_0,theta_1)上的投影等高线图,红叉处就是GD收敛到的最小值处对于linearregression只有全局最优解,所以这个也是我们想要的最优参数。多变量的LinearRegression如果每个训练样本用多个feature来描述,这就是多变量的LinearRegression问题。比如我们想根据房子的面积和卧室个数来预测房子的价格,那么现在每个训练样本就是用2个feature来描述。主程序如下[plain]viewplaincopy%%Initialization2.%%================Part1:FeatureNormalization================4.%%ClearandCloseFiguresclear;closeall;clc7.fprintf('Loadingdata...\n');9.%%LoadDatadata=load('ex1data2.txt');X=data(:,1:2);y=data(:,3);m=length(y);15.%Printoutsomedatapointsfprintf('First10examplesfromthedataset:\n');fprintf('x=[%.0f%.0f],y=%.0f\n',[X(1:10,:)y(1:10,:)]');19.fprintf('Programpaused.Pressentertocontinue.\n');pause;22.%Scalefeaturesandsetthemtozeromeanfprintf('NormalizingFeatures...\n');25.[Xmusigma]=featureNormalize(X);27.%AddintercepttermtoXX=[ones(m,1)X];30.31.%%================Part2:GradientDescent================33.%======================YOURCODEHERE======================%Instructions:Wehaveprovidedyouwiththefollowingstarter%codethatrunsgradientdescentwithaparticular%learningrate(alpha).%%Yourtaskistofirstmakesurethatyourfunctions-%computeCostandgradientDescentalreadyworkwith%thisstartercodeandsupportmultiplevariables.%%Afterthat,tryrunninggradientdescentwith%differentvaluesofalphaandseewhichonegives%youthebestresult.%%Finally,youshouldcompletethecodeattheend%topredictthepriceofa1650sq-ft,3brhouse.%%Hint:Byusingthe'holdon'command,youcanplotmultiple%graphsonthesamefigure.%%Hint:Atprediction,makesureyoudothesamefeaturenormalization.%55.fprintf('Runninggradientdescent...\n');57.%Choosesomealphavaluealpha=0.01;num_iters=1000;61.%InitThetaandRunGradientDescenttheta=zeros(3,1);[theta,J_history]=gradientDescentMulti(X,y,theta,alpha,num_iters);65.%Plottheconvergencegraphfigure;plot(1:numel(J_history),J_history,'-b','LineWidth',2);xlabel('Numberofiterations');ylabel('CostJ');71.%Displaygradientdescent'sresultfprintf('Thetacomputedfromgradientdescent:\n');fprintf('%f\n',theta);fprintf('\n');76.%Estimatethepriceofa1650sq-ft,3brhouse%======================YOURCODEHERE======================%RecallthatthefirstcolumnofXisall-ones.Thus,itdoes%notneedtobenormalized.x_predict=[116503];fori=2:3x_predict(i)=(x_predict(i)-mu(i-1))/sigma(i-1);endprice=x_predict*theta;86.%============================================================88.fprintf(['Predictedpriceofa1650sq-ft,3brhouse'...'(usinggradientdescent):\n$%f\n'],price);91.fprintf('Programpaused.Pressentertocontinue.\n');pause;94.%%================Part3:NormalEquations================96.
00101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131fprintf('Solvingwithnormalequations...");%======================YOURCODEHERE======================.%Instructions:Thefollowingcodecomputestheclosedform.%solutionforlinearregressionusingthenormal.%equations.Youshouldcompletethecodein.%normalEqn.m.%.%Afterdoingso,youshouldcompletethiscode.%topredictthepriceofa1650sq-ft,3brhouse..%.%%LoadData.data=csvread('ex1data2.txt');.X=data(:,1:2);.y=data(:,3);.m=length(y);..%AddintercepttermtoX.X=[ones(m,1)X];..%Calculatetheparametersfromthenormalequation.theta=normalEqn(X,y);..%Displaynormalequation'sresult.fprintf('Thetacomputedfromthenormalequations:\n');.fprintf('%f\n',theta);.fprintf('\n');...%Estimatethepriceofa1650sq-ft,3brhouse.%======================YOURCODEHERE======================.x_predict=[116503];.price=x_predict*theta;.%============================================================
132.fprintf(['Predictedpriceofa1650sq-ft,3brhouse'(usingnormalequations):\n$%f\n'],price);FeatureNormalization通过观察feature的特征可以知道,房子的面积的数值大约是卧室个数数值的1000倍左右,当遇到不同feature的数值范围差异非常显著的情况,需要先进行featurenormalization,这样可以加快learning算法的收敛。要进行FeatureNormalization,需要首先对每一列feature值计算均值\mu和标准差'sigma,然后normalization/scale之后的feature值x'与原始feature值x满足x'=(x-\mu)八sigma。即把原始的feature减去均值然后除以标准差。因此我们可以这样实现featurenormalization的函数GradientDescent这一步同样需要实现计算代价函数和更新参数的函数,对于多变量的线性回归,其代价函数也可以写成如下的向量化表示的形式皿=£W*即Fwhere—-S⑴产-(把)丁-,A矿=,-■■—(网)T一一-舟上面给出的单变量情形的代价函数和参数updaterule同样适用于多变量情形,只是现在X有很多列,同样支持。注意这个时候没有办法^\theta_0,\theta_1,\theta_2)上面可视化代价函数J,一共有四维。但是可以画出代价函数J随迭代次数的变化曲线如下Numberofiterations这里设置的learningrate\alpha=0.01,迭代1000次,可以看出在400次左右时代价函数J就几乎收敛,不再变化。我们也可以调节learningrate\alpha,选取合适的learningrate很重要,选得太小收敛很慢,选得太大有可能无法收敛(每次迭代参数变化太大没法找到极值点)Ng建议选取\alpha时按照logscale,比如不断除以3,0.3,0.1,0.03,0.01...NormalEquationsAlternately,我们也可以直接用下面这个公式来计算最优M\theta,推导过程是代价函数对参数向量\theta求导数,令导数为0.9={XTX}-iXry.函数实现如下[plain]viewplaincopyfunction[theta]=normalEqn(X,y)%NORMALEQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版劳动者劳动社会保险合同(特殊工种)3篇
- 二零二五版水沟施工与承包劳务合同范本2篇
- 二零二五版家政服务公司家政服务与品牌建设合同3篇
- 二零二五版宅基地使用权转让与房屋租赁一揽子合同2篇
- 二零二五版远程办公劳动合同签订与工作质量监控3篇
- 二零二五版办公用品耗材行业联盟采购合同2篇
- 二零二五版旅游租车服务合同范本2篇
- 2025年草原草原生态保护与资源合理利用合同3篇
- 二零二五版家具原料采购合同与供应链管理协议3篇
- 展会市场调研服务合同(2篇)
- 非ST段抬高型急性冠脉综合征诊断和治疗指南(2024)解读
- 产品共同研发合作协议范本5篇
- 风水学的基础知识培训
- 2024年6月高考地理真题完全解读(安徽省)
- 吸入疗法在呼吸康复应用中的中国专家共识2022版
- 1-35kV电缆技术参数表
- 信息科技课程标准测(2022版)考试题库及答案
- 施工组织设计方案针对性、完整性
- 2002版干部履历表(贵州省)
- DL∕T 1909-2018 -48V电力通信直流电源系统技术规范
- 2024年服装制版师(高级)职业鉴定考试复习题库(含答案)
评论
0/150
提交评论