线性回归——机器学习的第一个算法

介绍

定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。

(小萌A:)什么意思?

简单来说,我们把每个数据样本比作一个点,对于这堆点,我们试着用一条直线去拟合它们,尽可能的使得这些点均匀的分布在直线的两边,像这样:
在这里插入图片描述

我们拟合出一条最优的直线后,当有新的数据出现时,我们可以通过这条直线来预测对应的y值,就是这个意思。

(小萌B:)怎么拟合呢?

首先,我们有一个函数模型:X为我们的数据样本,W就是我们需要设法找到的系数

X为我们的数据样本,W就是我们需要设法找到的系数
对于我们的训练数据:
Y为X对应的结果

便于计算机的计算,我们将我们的样本写成举证的形式:上标为样本索引,下标为属性所对应的值

(小萌B突然发问:)为什么每行都会多出来一个1?

请看到我们的上上上一张图,W0 就是我们的函数模型的截距,它的系数始终为1。

然后我们通过已知的Y值和X值来找到这个神秘的W值,我们的函数模型每次都完美的拟合所有的数据是不可能的,这时候我们引入损失函数cost(拿最小二乘法来说):y表示真值,h表示预测值,为了防止样本数量给cost函数带来影响并方便对其求导,我们对它取平均,cost函数表示预测值与真实值之间的差异,最后平方取得正值

为了防止样本数量给cost函数带来影响并方便对其求导,我们对它取平均,cost函数表示预测值与真实值之间的差异,最后平方取得正值
(小萌D:)然后呢?
当我们的矩阵满秩时求解,直接对其求导:
在这里插入图片描述

当矩阵不满秩时,采用梯度下降法:

简述梯度下降

梯度下降

梯度下降原理:

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

1、首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。

2、改变θ的值,使得J(θ)按梯度下降的方向进行减少。
假设我们得到X,Y,然后初始化一个W

对损失函数求导可以得到:
这个步骤

不断的迭代上面的步骤,最后当我们导数几乎为零是,我们就求得了这个W值。

但是我们需要知道的是,梯度下降算法是一种求局部最优解的方法

Tips:

1)为了更好更迅速的进行梯度下降,我们需要对数据进行归一化或者标准化,使得数据分布在某一个范围内(比如将值从1-100000的数据归一化到0-1的范围内)

2)对于线性回归模型而言,符合高斯分布的数据可以获得更好的准确率,所以适当的时候我们需要对数据进行数据处理,让其尽可能的满足高斯分布

判断数据分布情况,并使其尽可能的满足高斯分布

#拿我原来的一个代码中的一部分来做个demo,对数据里面的windspeed特征进行检测
from scipy.stats import norm

fig =plt.subplot(211)

sns.distplot(data['windspeed'].values, bins=30, kde=True,fit=norm)

plt.xlabel('Median value of owner-occupied homes', fontsize=12)

cs =plt.subplot(212)

from scipy import stats

res = stats.probplot(data['windspeed'], plot=plt)

plt.tight_layout()

plt.show()

在这里插入图片描述
在第一个图中我们可以看出该特征的分布情况和该数据规范的高斯分布之间的差异,
在第二个图中我们可以看出我们的分布情况离该数据上规范的高斯分布之间的差异,把它称作我们的偏度

在这里插入图片描述

#box_cox的用法如下
from scipy.special import boxcox1p

#这里需要选择最优的参数,使得特征的数据尽可能的向高斯分布接近
lam = 0.5

transform_after = boxcox1p(transform_before,lam)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值