机器学习小白修炼之路---多项式回归

机器学习基本算法之多项式回归算法

简单的多项式

引用自斯坦福大学吴老师机器学习课程中讲解的例子。估计房价的时候,倘若有房子的长度(length)和宽度(width)两个特征,即占地面积的宽度和占地面积的长度,我们完全可以把这两个特征乘起来生成一个新的占地面积特征(Area)。
***Area = length * width**那么就可以只用Area这一个变量作为模型的特征。通过选择合适的特征,构建简单的多项式,hθ(x) = θ0 + θ1x 。x即面积Area。
在这里插入图片描述

一般多项式

假如有部分住房价格数据集点是以下点:
在这里插入图片描述
为了拟合数据,会有多种解决问题的模型。显然线性的函数是拟合不出这样的效果,它只能你和线性区分度高的数据集,参考下图即可了解线性回归函数的缺点:在这里插入图片描述

不过可以选用二次函数模型,但是知道二次函数图像的都知道,开口朝下的二次函数,顶点是最高的,之后便会下来,这明显和我们现实生活中的房价背道而驰(房价不会高到一定程度后下降趴)。
因此我们会转而使用另一种模型,比如三次函数模型使用多元线性回归的方法,可以将我们的模型进行简单的修改。

假设我们使用三次函数作为选用的模型。按照以前的假设形式(hθ(x) = θ0 +θ1x1 +θ2x2 +θ3x3),自定义 θ0、θ1、和θ2。
特征值乘方之后值会很大,因此要一定要特征缩放 !!!
在这里插入图片描述
上述文字和图片基本都是课程里面所讲述的。

多项式回归算法实现

梯度下降函数和计算损失值函数的m文件就是上个博客写的,不再赘述。

自己生成满足正态分布的一个列向量,之后计算出适合多项式回归算法的y值。为了避免重,每个值再加上随机噪声(数据集没找到,所以自己生成了)。下面是多项式回归算法实现的m文件:

function [ ] = polynomial_regression(  )
    x=randn(100,1);  %随机生成一个满足正态分布的100*1的列向量
    y=0.5*x+x.^2+randn(100,1);  %加上随机噪声
    plot(x,y,'ko');
    x=[ones(100,1),x];
    d_x=sort(x);
    l_x=d_x;
    i=1;
    j=2;
    while i<=1,     %i表示往矩阵第二列后面加的列数
        x(:,i+2)=x(:,i+1).*x(:,2);  %后面的每一列都乘上第一列的数
        i=i+1;
    end;
    while j<=3,
        x(:,j)=(x(:,j)-mean(x(:,j)))./std(x(:,j));  %因为特征值乘方之后值会很大,因此要特征缩放 
        j=j+1;
    end;
    theta=[0 0 0];
    theta_new=gradient_decline(x,y,theta);  %因为是随机种子生成的特征矩阵,所以每次loss达到的最低值都会不一样
    hold on;
    d_y=theta_new(1)+theta_new(2)*d_x+theta_new(3)*d_x.*d_x;
    l_y=theta_new(1)+theta_new(2)*d_x+theta_new(3)*d_x;
    plot(d_x,d_y);
    title('fitted curve');
    legend('data point','polynomial regression');
end






结果:
在这里插入图片描述
损失函数(因为是随机种子,所以每次运行得到的最低loss值都会不一样,迭代次数也会变化。这个问题困扰我许久,现在想想有点zz的):
在这里插入图片描述
Matlab最后一条竖线暂时不知道那里出来的,知道的大佬告诉我一声哈。

线性回归算法和多项式回归算法比较

脚本代码:

	d_x=sort(x);
    l_x=d_x;
    d_y=theta_new(1)+theta_new(2)*d_x+theta_new(3)*d_x.*d_x;
    l_y=theta_new(1)+theta_new(2)*d_x+theta_new(3)*d_x;
    plot(d_x,d_y);
    plot(l_x,l_y);
    title('fitted curve');
    legend('data point','polynomial regression','line regression');

结果:
在这里插入图片描述

结论

较准确,快速!希望大家多多支持、推广,感谢大家!!!

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

猜你喜欢

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