机器学习实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1一月二月三月产品名称数量金额利润产品名称数量金额利润产品名称数量金额利润合计合计合计四月五月六月产品名称数量金额利润产品名称数量金额利润产品名称数量金额利润合计合计合计1.问题描述:用逻辑回归根据学生的考试成绩来判断学生是否可以入学,因此,需要根据traingingset训练出一个classificationmodel。然后,拿着这个classificationmodel来评估新学生能否入学。训练数据的成绩样例如下:第一列表示第一次考试成绩,第二列表示第二次考试成绩,第三列表示入学结果(0--不能入学,1--可以入学)。2.内容:逻辑回归根据学生的考试成绩来判断学生是否可以入学,训练数据图形表示如下:橫坐标是第一次考试的成绩,纵坐标是第二次考试的成绩,右上角的+表示允许入学,圆圈表示不允许入学。该训练数据的图形可以通过MatlabplotData函数画出来,它调用Matlab中的plot函数和find函数,图形画出来之后,对训练数据就有了一个大体的可视化的认识了。接下来就要实现模型了,这里需要训练一个逻辑回归模型。对于logisticregression而言,它针对的是classificationproblem。这里只讨论二分类问题,比如上面的“根据成绩入学”,结果只有两种:y==0时,成绩未合格,不予入学;y==1时,可入学。即,y的输出要么是0,要么是1,而如果引入了sigmoidfunction,就可以把假设函数的值域“约束”在[0,1]之间。总之,引入sigmoidfunction,就能够更好的拟合分类问题中的数据,即从这个角度看:regressionmodel比linearmodel更合适classificationproblem.3.知识:(1)逻辑回归Logisticregression(逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。之前在经典之作《数学之美》中也看到了它用于广告预测,也就是根据某广告被用户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方,然后叫他“你点我啊!”用户点了,你就有钱收了。这就是为什么我们的电脑现在广告泛滥的原因了。还有类似的某用户购买某商品的可能性,某病人患有某种疾病的可能性啊等等。这个世界是随机的(当然了,人为的确定性系统除外,但也有可能有噪声或产生错误的结果,只是这个错误发生的可能性太小了,小到千万年不遇,小到忽略不计而已),所以万物的发生都可以用可能性或者几率(Odds)来表达。“几率”指的是某事物发生的可能性与不发生的可能性的比值。Logisticregression可以用来回归,也可以用来分类,主要是二分类。还记得上几节讲的支持向量机SVM吗?它就是个二分类的例如,它可以将两个不同类别的样本给分开,思想是找到最能区分它们的那个分类超平面。但当你给一个新的样本给它,它能够给你的只有一个答案,你这个样本是正类还是负类。例如你问SVM,某个女生是否喜欢你,它只会回答你喜欢或者不喜欢。这对我们来说,显得太粗鲁了,要不希望,要不绝望,这都不利于身心健康。那如果它可以告诉我,她很喜欢、有一点喜欢、不怎么喜欢或者一点都不喜欢,你想都不用想了等等,告诉你她有49%的几率喜欢你,总比直接说她不喜欢你,来得温柔。而且还提供了额外的信息,她来到你的身边你有多少希望,你得再努力多少倍,知己知彼百战百胜,哈哈。Logisticregression就是这么温柔的,它给我们提供的就是你的这个样本属于正类的可能性是多少。还得来点数学。(假设我们的样本是{x,y},y是0或者1,表示正类或者负类,x是我们的m维的样本特征向量。那么这个样本x属于正类,也就是y=1的“概率”可以通过下面的逻辑函数来表示:这里θ是模型参数,也就是回归系数,σ是sigmoid函数。实际上这个函数是由下面的对数几率(也就是x属于正类的可能性和负类的可能性的比值的对数)变换得到的:所以说上面的logistic回归就是一个线性分类模型,它与线性回归的不同点在于:为了将线性回归输出的很大范围的数,例如从负无穷到正无穷,压缩到0和1之间,这样的输出值表达为“可能性”才能说服广大民众。当然了,把大值压缩到这个范围还有个很好的好处,就是可以消除特别冒尖的变量的影响(不知道理解的是否正确)。而实现这个伟大的功能其实就只需要平凡一举,也就是在输出加一个logistic函数。另外,对于二分类来说,可以简单的认为:如果样本x属于正类的概率大于0.5,那么就判定它是正类,否则就是负类。实际上,SVM的类概率就是样本到边界的距离,这个活实际上就让logisticregression给干了。(2)模型的代价函数(costfunction)把训练好的模型对新数据进行预测,那预测结果有好有坏。因此,就用costfunction来衡量预测的准确性。costfunction越小,表示测的越准。这里的代价函数的本质是”最小二乘法“---ordinaryleastsquares代价函数的最原始的定义是下面的这个公式:可见,它是关于theta的函数。(X,y是已知的,由trainingset中的数据确定了)那如何求解costfunction的参数theta,从而确定J(theta)呢?有两种方法:一种是梯度下降算法(Gradientdescent),另一种是正规方程(NormalEquation),本文只讨论Gradientdescent。而梯度下降算法,本质上是求导数(偏导数),或者说是:方向导数。方向导数所代表的方向--梯度方向,下降得最快。而我们知道,对于某些图形所代表的函数,它可能有很多个导数为0的点,这类函数称为非凸函数(non-convexfunction);而某些函数,它只有一个全局唯一的导数为0的点,称为convexfunction可以看出,引入log函数(对数函数),让non-convexfunction变成了convexfunction再精简一下costfunction,其实它可以表示成:4.环境:win10,matlab5.步骤:(1)加载数据(2)引入sigmoid(3)调用costfunction.m文件中定义的coustFunction函数,从而运行梯度下降算法找到使代价函数J(theta)最小化的逻辑回归模型参数theta。(4)逻辑回归的正则化6.结果:7.程序:costFunctionReg.mfunctionplotData(X,y)pos=find(y==1);neg=find(y==0);plot(X(pos,1),X(pos,2),'k+','LineWidth',2,'MarkerSize',7);plot(X(neg,1),X(neg,2),'ko','MarkerFaceColor','y','MarkerSize',7);%holdoff;Enddata=load('ex2data1.txt');X=data(:,[1,2]);y=data(:,3);plotData(X,y);%Putsomelabelsholdon;%LabelsandLegendxlabel('Exam1score')%标记图形的X轴ylabel('Exam2score')%标记图形的Y轴%Specifiedinplotorderlegend('Admitted','Notadmitted')%图形的右上角标签holdoff;functiong=sigmoid(z)%SIGMOIDComputesigmoidfunctoonEndplotData.mfunctionplotData(X,y)figure;holdon;pos=find(y==1);neg=find(y==0);plot(X(pos,1),X(pos,2),'k+','LineWidth',2,'MarkerSize',7);plot(X(neg,1),X(neg,2),'ko','MarkerFaceColor','y','MarkerSize',7);holdoff;enddata=load('ex2data1.txt');X=data(:,[1,2]);y=data(:,3);plotData(X,y);functiong=sigmoid(z)g=zeros(size(z));g=1./(ones(size(z))+exp(-z));%‘点除’表示endholdon;xlabel('Exam1score')%标记图形的X轴ylabel('Exam2score')%标记图形的Y轴legend('Admitted','Notadmitted')holdoff;function[J,grad]=costFunction(theta,X,y)m=length(y);%numberoftrainingexamplesJ=0;grad=zeros(size(theta));J=(log(sigmoid(theta'*X'))*y+log(1-sigmoid(theta'*X'))*(1-y))/(-m);%theta=theta-(alpha/m)*X'*(X*theta-y);grad=(X'*(sigmoid(X*theta)-y))/m;endoptions=optimset('GradObj','on','MaxIter',400);[theta,cost]=...fminunc(@(t)(costFunction(t,X,y)),initial_theta,options);prob=sigmoid([14585]*theta);%这是一组测试数据,第一次考试成绩为45,第二次成绩为85fprintf(['Forastudentwithscores45and85,wepredictanadmission'...'probabilityof%f\n\n'],prob);%Computeaccuracyonourtrainingsetp=predict(theta,X);%调用predict函数测试模型fprintf('TrainAccuracy:%f\n',mean(double(p==y))*100);fprintf('\nProgrampaused.Pressentertocontinue.\n');pause;Forastudentwithscores45and85,wepredictanadmissionprobabilityof0.774323TrainAccuracy:89.000000Costfunction.mfunction[J,grad]=costFunction(theta,X,y)%COSTFUNCTIONComputecostandgradientforlogisticregression%J=COSTFUNCTION(theta,X,y)computesthecostofusingthetaasthe%parameterforlogisticregressionandthegradientofthecost%w.r.t.totheparameters.%Initializesomeusefulvaluesm=length(y);%numberoftrainingexamples%YouneedtoreturnthefollowingvariablescorrectlyJ=0;grad=zeros(size(theta));%Instructions:Computethecostofaparticularchoiceoftheta.%J=(log(theta'*X')*y+(1-y)*log(1-theta'*X'))/(-m);%attentionmatlab'susageJ=(log(sigmoid(theta'*X'))*y+log(1-sigmoid(theta'*X'))*(1-y))/(-m);%theta=theta-(alpha/m)*X'*(X*theta-y);grad=(X'*(si

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功