[机器学习] 线性回归

初识线性回归

线性回归
是利用回归函数对一个或多个自变量和因变量之间关系进行建模的一种分析方法。
只有一个自变量的情况称为单变量回归,多于一个自变量的情况叫多元回归。

线性回归的分类
线性关系
非线性关系

线性回归api初步

from sklearn.linear_model import LinearRegression
x = [[80,86],[82,80],[85,78],[90,90],[86,82],[82,90],[78,80],[92,94]]
y = [84.2,80.6,80.1,90,83.2,87.6,79.4,93.4]
estimator = LinearRegression()
estimator.fit(x, y)
# 线性回归系数
print(estimator.coef_)
# 预测一组数据
print(estimator.predict([[100, 80]]))

线性回归的损失和优化

损失函数

yi是第i个训练样本的真实值
h(xi)是第i个训练样本特征值组合预测函数
又称为最小二乘法

优化
目的就是通过调权重,使得J(w)得到最小值
线性回归所常用的两种优化算法
正规方程、梯度下降法

正规方程

梯度下降法
在单变量的函数中,梯度就是函数的微分,代表这函数在某个给定点的切线斜率

在多变量的函数中,梯度是一个向量,向量有方向,指出函数在给定点上升最快的方向。求出这个方向后,相反方向就是下降最快的方向,就可以很快的找到函数的最小值。

注意梯度下降法不能保证求的的一定是最小值,也有可能只是极小值

常见梯度下降算法

1、全梯度下降算法-FG
计算训练集所有样本误差,对其求和再取平均值作为目标函数。
权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。
因为在执行每次更新时,我们需要在整个数据集上计算所有的梯度,所以批梯度下降法的速度会很慢,同时,批梯度下降法无法处理超出内存容量限制的数据集。
批梯度下降法同样也不能在线更新模型,即在运行的过程中,不能增加新的样本。
在这里插入图片描述

2、随机梯度下降算法-SG
其每轮计算的目标函数不再是全体样本误差,而仅是单个样本误差,即每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程,直到损失函数值停止下降或损失函数值小于某个可以容忍的阈值.
每次只使用一个样本迭代,若遇上噪声则容易陷入局部最优解。

3、小批量梯度下降算法-min-batch
每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用全梯度下降算法迭代更新权重。

4、随机平均梯度下降算法-SAG
在内存中为每一个样本 都维护一个旧的梯度,随机选择第i个样本来更新此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新了参数。如此,每一轮更新仅需计算一个样本的梯度, 计算成本等同于SG,但收敛速度快得多。

案例-波士顿房价预测

正规方程

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
boston = load_boston()
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)

transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)

estimator = LinearRegression()
estimator.fit(x_train, y_train)

print("模型偏置:\n", estimator.intercept_)
print("模型系数:\n", estimator.coef_)

y_pre = estimator.predict(x_test)
print("预测值:\n", y_pre)

ret = mean_squared_error(y_test, y_pre)
print("均方误差:\n", ret)

梯度下降法

boston = load_boston()
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)

transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)

estimator = SGDRegressor(max_iter=1000)
estimator.fit(x_train, y_train)

print("模型偏置:\n", estimator.intercept_)
print("模型系数:\n", estimator.coef_)

y_pre = estimator.predict(x_test)
print("预测值:\n", y_pre)

ret = mean_squared_error(y_test, y_pre)
print("均方误差:\n", ret)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H4ppyD0g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值