Linear regression with multiple variables
2016-06-02 12:57
399 查看
1.Promble:
Suppose you are selling your house and you want to know what a good market price would be. One way to do this is to first collect information on recent houses sold and make a model of housing prices.The file ex1data2.txt contains a training set of housing prices in Portland, Oregon. The first column is the size of the house (in square feet), the second column is the number of bedrooms,
and the third column is the price of the house.
此部分采用了2种求解方法,一种方法就是采用的是梯度下降的方法,另一种采用的是正规方程的方法。
2.采用梯度下降的方法求解:
1)step 1: Feature NormalizationBy looking at the values(ex1data2.txt), note that house sizes are about 1000 times the number of bedrooms. When features differ by orders of magnitude, first performing feature scaling
can make gradient descent converge much more quickly
采用的特征标准化公式:
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
新数据=(原数据-均值)/标准差。
MATLAB代码如下:
<span style="font-size:18px;">function [X_norm, mu, sigma] = featureNormalize(X) %FEATURENORMALIZE Normalizes the features in X % FEATURENORMALIZE(X) returns a normalized version of X where % the mean value of each feature is 0 and the standard deviation % is 1. This is often a good preprocessing step to do when % working with learning algorithms. % You need to set these values correctly X_norm = X; mu = zeros(1, size(X, 2)); % mean value 均值 size(X,2) 列数 sigma = zeros(1, size(X, 2)); % standard deviation 标准差 % ====================== YOUR CODE HERE ====================== % Instructions: First, for each feature dimension, compute the mean % of the feature and subtract it from the dataset, % storing the mean value in mu. Next, compute the % standard deviation of each feature and divide % each feature by it's standard deviation, storing % the standard deviation in sigma. % % Note that X is a matrix where each column is a % feature and each row is an example. You need % to perform the normalization separately for % each feature. % % Hint: You might find the 'mean' and 'std' functions useful. % mu = mean(X); % mean value sigma = std(X); % standard deviation X_norm = (X - repmat(mu,size(X,1),1)) ./ repmat(sigma,size(X,1),1);%新数据=(原数据-均值)/标准差 end</span>
2)step 2:Gradient Descent
梯度下降的更新公式:
theta = theta - alpha / m * X' * (X * theta - y);
此部分Matlab 代码如下:
function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters) %GRADIENTDESCENTMULTI Performs gradient descent to learn theta % theta = GRADIENTDESCENTMULTI(x, y, theta, alpha, num_iters) updates theta by % taking num_iters gradient steps with learning rate alpha % Initialize some useful values m = length(y); % number of training examples J_history = zeros(num_iters, 1); for iter = 1:num_iters % ====================== YOUR CODE HERE ====================== % Instructions: Perform a single gradient step on the parameter vector % theta. % % Hint: While debugging, it can be useful to print out the values % of the cost function (computeCostMulti) and gradient here. % theta = theta - alpha / m * X' * (X * theta - y); % ============================================================ % Save the cost J in every iteration J_history(iter) = computeCostMulti(X, y, theta); end end
3.采用正规方程求解
Normal Equations:
the closed-form solution to linear regression is:Using this formula does
not require any feature scaling, and you will get an exact solution in one calculation: there is no“loop until convergence”like
in gradient descent
Matlab代码如下:
function [theta] = normalEqn(X, y) %NORMALEQN Computes the closed-form solution to linear regression % NORMALEQN(X,y) computes the closed-form solution to linear % regression using the normal equations. theta = zeros(size(X, 2), 1); % ====================== YOUR CODE HERE ====================== % Instructions: Complete the code to compute the closed form solution % to linear regression and put the result in theta. % % ---------------------- Sample Solution ---------------------- theta = pinv( X' * X ) * X' * y; end
最终运行结果:
可以看出运行到500次左右,采用梯度下降的损失函数的值就收敛了
此练习的完整代码请参见:点击打开链接
相关文章推荐
- 10大实用web应用界面技术
- 新手必看:Photoshop 165条实操技巧
- Android Satudio的使用记录
- BZOJ4563: [Haoi2016]放棋子
- PS加强网页设计中像素化细节的技巧
- Photoshop用光与影表现3D立体字效…
- 数据结构学习笔记之模板栈
- Photoshop入门实例教程:透视效果…
- XP环境下查看psd文件缩略图显示补…
- Java中equals和==的区别
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
- 在某范围内的内容(包括图片、文字)…
- 取标题多少字数,多出加上省略号
- 一个去掉HTML格式的ASP函数
- 图片多方向滚动控制效果
- Illustrator制作透明质感立体方块…
- 二级收缩菜单,点击出现二级菜单
- 跳转菜单如何实现新窗口打开连接
- 网页简体转繁体的JS代码
- Photoshop制作超酷的金属立体字