在上一个博客里面,我们写了单变量的线性回归问题,现在我们来完成多变量的线性回归问题!
多变量的线性回归——预测房价
在这个房价问题中,我们的数据存放在ex1data2.txt这个文件里面,第一列是房间大小,第二列是房间的卧室数目,第三列是房价,也就是说对比单变量的线性回归问题,我们这个问题存在两个特征,一个是size,一个是number of bedrooms!
存储数据进入数组里面:
data = load('ex1data2.txt');%存储数据
X = data(:, 1:2);%前面两列存入X,第一列是房间大小,第二列是卧室的数目
y = data(:, 3);%第三列是房价
m = length(y);%m表示实例的个数
(1)特征归一化-feature normalization
我们是使用梯度下降算法之前,如果多个特征的规格是不一样的,我们第一步必须要先特征归一化,这样才能更快的使得梯度下降收敛!因为房子的大小是房间卧室数目的1000倍,所以我们就是要完成featureNormalize.m里面的代码以实现特征归一化!
step1:得到数据集中的各个特征的平均值
step2:得到数据集X各个特征的标准差,使得每一个特征先减去均值再除以标准差,实现归一化操作!
(注1:并不是一定要计算标准差,你也可以使用特征的变化幅度(max-min);matlab计算标准差用的是std函数,比如说X(:,1)表示的是房间的大小,那么std(X(:,1))表示的就是求解特征房间大小的标准差!)
(注2:在进行这样的操作之后,我们需要注意当我们给这个模型一个新的房间的参数x,那么我们首先也要先归一化x,然后才能进行预测房价!)
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));
sigma = zeros(1, size(X, 2));
% ====================== 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, comp