机器学习小白修炼之路---多变量线性回归

机器学习基本算法之多变量线性回归模型

监督学习

给算法一个数据集,其中包含着正确的答案;
该算法的目的:输入一组数,给出更多预测的正确答案。
回归问题就是监督学习中的某个分支,本篇文章以斯坦福大学的吴老师所讲的房价预测为例,解释多变量线性回归模型。

房价预测的处理流程

流程

多变量线性回归例子

1、房价预测
在这里插入图片描述上面的图是视频上截图的,基本意思直接看下面的图吧:

在这里插入图片描述
最后的价格等于矩阵Xtheta(列向量),通常要把X矩阵的第一列置成1。因为一次函数的原型是f(x)=ax+b,如果我们要表示成上面形式的话,令x0等于1,等价于f(theta)=x0theta0+x1theta1(假设此时只有two variables)。

2、数据集下载
Matlab可视化文件中的47个点。
在这里插入图片描述3、多变量的假设函数(在本文也可以叫线性回归函数) ,用假设函数来模拟。下面要讲的梯度下降法和正则方程法都是试图找到一条直线,使所有样本到直线上的损失之和最小;
多变量的代价函数(在本文也可以叫方差和损失函数),用代价函数来表示误差值值。
在这里插入图片描述4、梯度下降(stimultaneously update every theta!)

在这里插入图片描述
手动求导:

在这里插入图片描述5、Matlab实现(梯度下降法):

计算损失函数的m文件

function result = cost_1_FunctionJ( x,y,theta )
    m=length(x(:,1));
    n=length(x(1,:));
    prediction=x*theta;  %预测值,这里的theta是列向量
    sqrErrors=(prediction-y).^2;  %方差
    result=1/(2*m)*sum(sqrErrors);
end

梯度下降的m文件

function  destination = gradient_decline( X,y,theta )
    alpha=0.01;
    i=1;
    iter=1000;
    m=length(X(:,1));   %样本数
    J=zeros(1,iter);
    while i<iter,
        %注释是当theta为列向量时候的做法
        %J(i)=cost_1_FunctionJ(X,y,theta);
        %offset=((X*theta-y)'*X)';  
        J(i)=cost_1_FunctionJ(X,y,theta');
        offset=(X*theta'-y)'*X;
        theta=theta-1/m*alpha*offset;
        i=i+1;
    end;
    plot(1:iter,J);
    title('loss funciton');
    destination=theta;
end




线性回归demo,此处采用最标准的特征缩放。当然也可以采用简单的缩放,比如直接除以那一列特征值中的最大数。

function theta_new = line_regression(  )
    x=load('D:\machineLearning\线性回归模型\ex3Data\ex3x.dat');
    y=load('D:\machineLearning\线性回归模型\ex3Data\ex3y.dat');
    plot3(x(:,1), x(:,2), y, 'r*');
    n=length(x(1,:));
    m=length(x(:,1));    %样本数
    %x(:,2)=x(:,2)./max(x(:,2));    较为简单的特征缩放  直接除以某个特征值中的最大值
    %x(:,3)=x(:,3)./max(x(:,3));
    x(:,1)=(x(:,1)-mean(x(:,1)))./std(x(:,1));  %特征缩放  mean表示某个特征值中的平均值,std表示某个特征值中的标准差
    x(:,2)=(x(:,2)-mean(x(:,2)))./std(x(:,2));
    x=[ones(m,1), x];  %x0为1
    %theta=[0;0;0];  %theta为列向量时候做出相应修改
    theta=[0 0 0];
    theta_new=gradient_decline(x,y,theta);
end


最后在Matlab的实时脚本里面实现整个逻辑。

在这里插入图片描述在这里插入图片描述最后,这个误差值的数量级是非常大的,因为房价的都是百万为单位的,不是算法实现有问题。是data有问题。
第一次写博客,有点小激动!

6、正规方程在这里插入图片描述
当X的转置矩阵和X矩阵乘积的矩阵不可逆的时候,Matlab里面用pinv()函数可以解决这个问题。不可逆问题的本质是矩阵的特征值有相同的,所以只要去掉重复的特征值,确保特征值不同,在对矩阵缩放也可以搞出来。

在这里插入图片描述

发布了33 篇原创文章 · 获赞 5 · 访问量 2308

猜你喜欢

转载自blog.csdn.net/cj1561435010/article/details/100630134