热线电话:13121318867

登录
2020-08-17 阅读量: 1098
线性回归
  • 机器学习本质是优化问题,没有作任何假设。尝试使用优化的办法来对损失函数找极小值,优化方法有拉格朗日、求导、梯度下降、牛顿法、坐标下降等方法来找到极值

  • 统计中的方法,大部分的方法是概率分布的问题,构建很多严格的假设,求解出结果,并且还要不断的检查假设,通过很严谨的方法来求解问题。

  • 线性回归可以处理离散的特征也可以处理离散的特征,比较偏连续

  • 主要做回归预测

  • 需要去量纲处理

  • 应用比较广泛,标签是连续的都可以用

经典的回归模型:

  • 逻辑非常严谨

  • 首先提出一些假设,原假设:回归里面参数模型所有的值都为0

  • 模型的假设:

    • 残差独立、平均值为0、方差为固定的常数 、正态分布;

    • 各个特征是独立的,没有共线性,且正态;

    • y值是类似于正态的分布

  • 优点:非常严谨,结果很精确

  • 缺点:时间很长

机器学习中的回归模型:

  • 逻辑不严谨,没有任何的假设

  • 找到一个合理的损失函数,通过对损失函数的优化,来使损失函数最小。是将概率分布问题转化成了优化问题

1、最大似然估计(MLE):

2、最小二乘法(OLS):

最小二乘线性回归:

  • 在特征具有完全共线性的时候,最小二乘法无法计算。

  • 在特征具有高度相关性的时候,模型得出的参数偏差太大。

  • 优点:可以直接通过求导=0的方式,求得全局最优点,在没有共线性的前提下,可以找到全局最优

  • 缺点:对数据的要求高,不允许多重共线性,如果出现共线性,X.T*X不满秩,逆运算不出来;找不到全局最优

  • 使用残差平方个来描述信息损失的程度,对最小二乘法的损失函数做偏微分,计算出参数值

正则方式--lasso回归:

  • 可以直接做特征筛选,解决共线性的问题,也可以解决稀疏性的问题

  • 解决稀疏性问题的原理:在惩罚项中λ变大时,系数会变小,并且很可能会变为0

  • 优点:直接针对最小二乘的损失函数进行优化,对参数进行惩罚,可以达到消除共线性或者做特征筛选的效果

  • 缺点:效果差,R方差

  • 更改了损失函数

正则方式--岭回归(Ridge):

  • 可以解决共线性的问题

  • 优缺点同lasso回归

  • 更改了损失函数

ridge和lasso结合起来使用就是弹性网:

梯度下降:

  • 可以解决共线性的问题,是对损失函数解的优化

  • 梯度下降的算法比较万能,不止针对最小二乘,只要有一个可以求导的损失函数都可以使用梯度下降,例如perception(感知器)中,也可以使用梯度下降

  • 对于有的算法来说,损失函数是可连续可导的。但是,直接用导数=0的方法来求解最低值,算不出来,那这个时候就可以尝试使用梯度下降,比如:逻辑回归的损失函数就是这样。

  • 梯度是一个向量;梯度向量的方向是损失函数增长的方向;梯度的长度是SSE上升的趋势;在这个点,目标是尝试最小的SSE,沿着梯度反方向来移动;更新的距离是可以随便选的,可以使用梯度的长度,来帮助我们更新参数,因为正好梯度的长度越接近最低点,长度就越接近0。这样字的话,帮助算法收敛

  • 梯度下降很难有全局最优解,只能说是不断逼近最优解

  • 对所有可以求导的损失函数来说,肯定有一个全局最优

  • 梯度的方向是损失函数增长最快的方向

  • 优点:只要损失函数可以求导,不管损失函数长什么样,都可以直接通过梯度的下降的方式进行全局最优值的寻找。可以求导的损失函数有哪些呢?SSE的损失函数,Ridge的损失函数,感知机损失函数,等等(lasso)不行。

  • 缺点:不好处理非凸的损失函数,很容易陷入局部最优,需要尝试各种优化方法尽量避免局部最优,比如说随机梯度下降。

  • 梯度下降在sklearn中没有单独的包,都是被嵌入到模型中的

对向量进行求导:

批量梯度下降:

  • 使用整体的数据集来进行梯度的计算

  • 缺点计算出来的梯度,非常的稳定

  • 缺点因为稳定性非常高,可能导致模型落入到局部最优中去了

  • 优点,数据量少的情况下,相对来说优点快

随机梯度下降:

  • 使用随机的一条数据来计算梯度

  • 优点:

    • 每次梯度的方向很随机

    • 可以很大程度上绕过局部最优

    • 在数据量大的情况下,快


  • 缺点:最后的结果难收敛

平均梯度下降:

  • 使用随机的一小部分数据来进行梯度的计算

最小二乘回归代码:

# sklearn实现

# 读取abalone.csv数据来尝试

data = pd.read_csv('abalone.txt',header=None,sep='\t')

data.columns=['性别','长度','直径','高度','整体重量','肉重量','内脏重量','壳重','年龄'] # 补充

data.head()

# 使用原始的

X = data.iloc[:, :-1]

Y = data.iloc[:, -1]

LR = LinearRegression().fit(X, Y)

# 预测以及评估指标

LR.score(X, Y)

#查看当前文件路径

import os

os.getcwd()

# E:\\数据分析师就业培训班\\正式课程\\机器学习\\回归分析\\可练习的代码'

岭回归代码:

# 如何用sklearn里面的ridge来进行回归的分析

from sklearn.linear_model import Ridge

LR_Ridge = Ridge(alpha = 0.0005).fit(X, Y)

LR_Ridge.intercept_, LR_Ridge.coef_

# 比较R平方

LR_Ridge.score(X, Y)

文件位置:同最小二乘回归

lasso回归

from sklearn.linear_model import Lasso

lasso = Lasso(alpha = 0.2).fit(X, Y)

lasso.coef_, lasso.score(X, Y)

文件位置:同最小二乘回归


32.3250
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子