昆明理工大学人工智能大报告 房价问题.docx

上传人:b****6 文档编号:7446845 上传时间:2023-01-24 格式:DOCX 页数:12 大小:340.89KB
下载 相关 举报
昆明理工大学人工智能大报告 房价问题.docx_第1页
第1页 / 共12页
昆明理工大学人工智能大报告 房价问题.docx_第2页
第2页 / 共12页
昆明理工大学人工智能大报告 房价问题.docx_第3页
第3页 / 共12页
昆明理工大学人工智能大报告 房价问题.docx_第4页
第4页 / 共12页
昆明理工大学人工智能大报告 房价问题.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

昆明理工大学人工智能大报告 房价问题.docx

《昆明理工大学人工智能大报告 房价问题.docx》由会员分享,可在线阅读,更多相关《昆明理工大学人工智能大报告 房价问题.docx(12页珍藏版)》请在冰豆网上搜索。

昆明理工大学人工智能大报告 房价问题.docx

昆明理工大学人工智能大报告房价问题

昆明理工大学信息工程与自动化学院学生实验报告

(2014—2015学年第1学期)

课程名称:

人工智能开课实验室:

信自楼5042014年12月30日

年级、专业、班

学号

姓名

成绩

实验项目名称

含一个或两个变量的房价预测线性回归问题

指导教师

王剑

教师评语

该同学是否了解实验原理:

A.了解□B.基本了解□C.不了解□

该同学的实验能力:

A.强□B.中等□C.差□

该同学的实验是否达到要求:

A.达到□B.基本达到□C.未达到□

实验报告是否规范:

A.规范□B.基本规范□C.不规范□

实验过程是否详细记录:

A.详细□B.一般□C.没有□

教师签名:

年月日

一、上机目的及内容

1.上机内容:

用于预测房价的线性回归(一元或二元的例子)

2.上机目的:

(1)掌握线性回归的实质;

(2)能够用MATLAB实现线性回归。

二、实验原理及基本技术路线图(方框原理图或程序流程图)、步骤

这个试验我采用机器学习的方法来进行实现,所谓的机器学习就是通过开始的时候拿数据(训练数据)给机器学习,当训练完成获得技能后,再将待测数据拿给机器进行解决,看效果如何,如果效果不好则返回去继续学习,直到能完美的解决数据后才算毕业。

流程图如下:

那么学习算法是如何工作的呢?

下面给出学习算法的流程图:

得到了训练数据之后就要进行实战演练,用x表示住房面积,可以得到一个目标函数

接下来用梯度下降法来得到minJ(

步骤:

①设置

的初始值(可任意设置,一般设置为0)

②按如下算法迭代修改

,直到J(

)最小或

收敛

(对所有的

求偏导数),α:

学习率(每次迭代的步长)流程图如下:

迭代之后的J(θ)是一抛物线

房价预测的具体步骤:

(1)用MATLAB生成训练数据,分别是sizeX.dat和priceY.dat;

(2)取测试数据,分别附给x和y;

(3)定义最大迭代次数,以及学习率,通过梯度下降法,进行迭代

grad=(1/m).*x'*((x*theta)-y)

theta=theta-alpha.*grad

(4)如果没有得到预期目的,返回(3);

(5)如果得到回归曲线则停止,输出图形,否则返回(3)。

三、所用仪器、材料(设备名称、型号、规格等或使用软件),

1台PC及MATLAB软件

四、实验方法(或:

程序代码或操作过程)

首先生成训练数据;

cd'D:

\我的文档\MATLAB'%设置当前工作路径为桌面,每个人的路径不一样的

pwd%查看当前工作路径

x=[0.36;0.44;0.55;0.64;0.76;0.87;0.90;1.21;1.34;1.67;2.04;2.26;2.38;2.43;2.65;3.22]%单位:

百平米

y=[0.275;0.312;0.408;0.499;0.513;0.696;0.766;0.935;0.925;1.188;1.356;1.559;1.618;1.604;1.961;1.932]%单位:

百万元

t=ones(16,1)

x=[t,x]%x增加一列

savesizeX.datx-ascii;%测试数据保存到文件

savepriceY.daty-ascii;

运行代码:

x=load('sizeX.dat')%取测试数据,赋给xx

y=load('priceY.dat')

m=length(y);%m保存测试数据数,16条

figure;

plot(x(:

2),y,'o')%画出数据点

xlabel('百平米');

ylabel('百万元');

theta=zeros(2,1);

fori=1:

200%迭代200次

grad=(1/m).*x'*((x*theta)-y);%求梯度

theta=theta-0.05.*grad;%0.05是学习率

end

theta%打印最终theta值

holdon;

plot(x(:

2),x*theta,'-')

%Exercise2LinearRegression

%forhouse

%

%xreferstoahouse'sarea

%yisahouse'sprice

%

clearall;closeall;clc%清空所有记录和关闭之前打开的所有窗口

x=load('ex2x.dat');%从ex2x.da这个数据包中下载数据到x

y=load('ex2y.dat');%从ex2y.dat这个数据包中下载数据在y

m=length(y);%numberoftrainingexamples

%定义训练的样本(y)的长度或大小

%Plotthetrainingdata(开始训练函数)

figure;%openanewfigurewindow(打开一个新的窗口)

plot(x,y,'o');%定义输出样本用O表示

ylabel('priceofx*100万元')%定义y轴的值为住房的房价

xlabel('areaofx*60squaremeter')%定义x轴的值为住房的面积,单位为平方米

%Gradientdescent

x=[ones(m,1)x]%Addacolumnofonestox(添加到x的那些列:

就是将m设为1的那些列)

theta=zeros(size(x(1,:

)))'%initializefittingparameters(对theta进行初始化)

%将x中第一行和所有列初始化

MAX_ITR=5000;%训练或者是迭代的最大次数为5000次

alpha=0.07;%定义学习率为0.07

fornum_iterations=1:

MAX_ITR%梯度下降发开始,对回归函数开始迭代,从1到1500

%Thisisavectorizedversionofthe

%gradientdescentupdateformula

%It'salsofinetousethesummationformulafromthevideos

%Hereisthegradient

grad=(1/m).*x'*((x*theta)-y);%梯度下降发函数实现语句

%Hereistheactualupdate

theta=theta-alpha.*grad;%计算theta的值

%Sequentialupdate:

Thewrongwaytodogradientdescent

%grad1=(1/m).*x(:

1)'*((x*theta)-y);

%theta

(1)=theta

(1)+alpha*grad1;

%grad2=(1/m).*x(:

2)'*((x*theta)-y);

%theta

(2)=theta

(2)+alpha*grad2;

end

%printthetatoscreen

theta

%Plotthelinearfit

holdon;%keeppreviousplotvisible

plot(x(:

2),x*theta,'-')%寻找一个最低点,并将其输出来

legend('Trainingdata','Linearregression')%对数据进行训练

holdoff%don'toverlayanymoreplotsonthisfigure

%Closedformsolutionforreference

%Youwilllearnaboutthismethodinfuturevideos

exact_theta=(x'*x)\x'*y%确定theta值

%Predictvaluesforarea120and150

predict1=[80,120]*theta%预测距离工作地80万,120平米的住房是否符合训练样本的规律

predict2=[110,150]*theta%预测距离工作地110万,150平米的住房是否符合训练样本的规律

%CalculateJmatrix

%GridoverwhichwewillcalculateJ

theta0_vals=linspace(-3,3,100);%theta0的值为-3到3,并分割为100等分,并将其用等高线输出

theta1_vals=linspace(-1,1,100);%theta1的值为-1到1,并分割为100等分

%initializeJ_valstoamatrixof0's

J_vals=zeros(length(theta0_vals),length(theta1_vals))

fori=1:

length(theta0_vals)%开始迭代,i从1到1500

forj=1:

length(theta1_vals)%开始迭代,j从1到1500

t=[theta0_vals(i);theta1_vals(j)];

J_vals(i,j)=(0.5/m).*(x*t-y)'*(x*t-y);

end

end

%Becauseofthewayhouseinthesurfcommand,weneedto

%transposeJ_valsbeforecallingsurf,orelsetheaxeswillbeflipped

J_vals=J_vals';%将J_vals'矩阵付给J_vals

%Surfaceplot

figure;

surf(theta0_vals,theta1_vals,J_vals)%利用surf函数求theta0_vals、theta1_vals、J_vals的值

xlabel('\theta_0');ylabel('\theta_1');%x轴表示theta_0,y轴表示theta_1

%Contourplot

figure;

%PlotJ_valsas15contoursspacedlogarithmicallybetween0.01and100

contour(theta0_vals,theta1_vals,J_vals,logspace(-2,2,15))%输出梯度下降中的最低点,用等高线表示

xlabel('\theta_0');ylabel('\theta_1');%x轴表示theta_0,y轴表示theta_1

五、运行截图

六、实验总结

在这个试验中,采用了梯度下降法在实现,梯度下降的原理可以理解为:

将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;梯度下降法有以下特点

(1)初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;

(2)越接近最小值时,下降速度越慢;

通过实现掌握和了解了线性回归的基本特性,通过实验编程实现了住房价格和面积之间关系的线性分析。

在实验中遇到了很多的问题:

一开始的时候对软件不是很熟悉,不知道如何将数据写到数据包中,后来在老师的帮助下,解决了这个问题。

数据写到数据包有两种方式:

一是在matlab软件中手工输入或随机生成数据,然后用命令程序写到数据包(保存为数据包的形式);而是利用存储技术,也就是利用数据库语言生成数据包;其次遇到的问题是,迭代中出现了了问题,后来发现自己没有初始化学习率;最后的问题是,画不出图像,经过老师的帮助和自己的努力,最后实现了。

总之,在这次实验中不但对MATLAB有了进一步的了解和认识,同时也获得了很多宝贵的经验和知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1