正规方程,梯度下降,岭回归——机器学习【百变AI秀】

举报
神的孩子在歌唱 发表于 2021/09/09 21:21:26 2021/09/09
【摘要】 @TOC悄悄介绍自己:作者:神的孩子在跳舞本人是大四的小白,在山西上学,学习的是python方面的知识,希望能找到一个适合自己的实习公司,哪位大佬看上我的可以留下联系方式我去找您,或者加我微信chenyunzhiLBP 一. 介绍定义:线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。公式:y=k...

@TOC

悄悄介绍自己:

作者:神的孩子在跳舞
本人是大四的小白,在山西上学,学习的是python方面的知识,希望能找到一个适合自己的实习公司,哪位大佬看上我的可以留下联系方式我去找您,或者加我微信chenyunzhiLBP

一. 介绍

  1. 定义:线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
  2. 公式:y=kx+b
  3. 特征值目标值之间建立了一个关系,这个关系可以理解为线性模型
  4. 非线性:y=kx2+b

1. 1 线性回归API介绍——LinearRegression

  1. 获取数据集
  2. 机器学习
#导入线性回归API
from sklearn .linear_model import LinearRegression
import numpy as np
#生成数据数据
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]
#模型训练
#1.实例化一个估计器
estimator=LinearRegression()
#2. 调用fit方法,进行训练
estimator.fit(x,y)
#查看系数值
coef=estimator.coef_
print("系数值:\n",coef)# [2.22073791 2.65648855]就可以知道x中两列的数乘什么值可以的到y值

#预测:
pre=estimator.predict([[80,100]])
print("预测值(目标值):\n",pre)
系数值:
 [0.3 0.7]
预测值(目标值):
 [94.]

二. 线性回归的损失和优化

  1. 损失函数:预测值减真实值的平方求和(最小二乘法)

  2. 如何减小损失函数

    (1)正规方程:调整系数(w)的矩阵(适合样本特征较少的情况) 
    (2)梯度下降法 -- 循序渐进
     举例:
         山  -- 可微分的函数
         山底 -- 函数的最小值
     梯度的概念
         单变量 -- 切线
         多变量 -- 向量
     梯度下降法中关注的两个参数
         α  -- 就是步长
             步长太小 -- 下山太慢
             步长太大 -- 容易跳过极小值点(*****)
         为什么梯度要加一个负号
             梯度方向是上升最快方向,负号就是下降最快方向
    (3)梯度下降法和正规方程对比:
     梯度下降                 正规方程
     需要选择学习率          不需要
     需要迭代求解            一次运算得出
     特征数量较大可以使用     需要计算方程,时间复杂度高O(n3)
    

2.1 全梯度下降算法(FG)

计算所有样本的误差平均值,作为我的目标函数

缺点:数据量太大

2.2 随机梯度下降算法(SG)

只取其中一个样本,通过一个样本来反复的重复的下降迭代

缺点:一个不能代表全部

2.3 小批量梯度下降算法(mini-batch)

选取一部分来进行迭代更新

缺点:对其他样本不公平

2.4 随机平均梯度下降算法(SAG)

首先计算一个权重维度,就是外面有很多个样本,算的时候算出来一个权重样本给赋值到样本中,样本有了这个权重以后,下一次在计算的时候,我依旧把这个权重带到这个样本里面进行计算.如此,每一轮更新仅需计算一个样本的梯度,计算成本等同于SG,但收敛速度快得多。

三. 波士顿房价预测——正规方程(线性回归)

均方误差:真实值预测值的平方求和除于所有样本的值

导入对应API

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#模型评估

3.1 获取数据

boston=load_boston()
boston

部分数据:

{'data': array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,
      ...
        23.1, 19.7, 18.3, 21.2, 17.5, 16.8, 22.4, 20.6, 23.9, 22. , 11.9]),
 'feature_names': array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
        'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7'),

3.2 数据基本处理

#数据集划分
x_train, x_test, y_train, y_test = train_test_split(boston.data,boston.target,test_size=0.2)
x_train

部分数据:

array([[6.6170e-02, 0.0000e+00, 3.2400e+00, ..., 1.6900e+01, 3.8244e+02,
        9.9700e+00],
       ...,
       [5.4250e-02, 0.0000e+00, 4.0500e+00, ..., 1.6600e+01, 3.9560e+02,
        6.2900e+00]])

3.3 特征工程 标准化

transfer=StandardScaler()#实例化一个对象
x_train=transfer.fit_transform(x_train)#通过transform进行转换
x_test=transfer.fit_transform(x_test)
x_train

部分数据:

array([[-0.3787068 , -0.51054284, -1.09701944, ..., -0.69607865,
         0.26568234, -0.32873461],
       ...,
       [-0.38005317, -0.51054284, -0.97801505, ..., -0.83515668,
         0.4119297 , -0.86543003]])

3.4机器学习(线性回归)

estimator=LinearRegression()#实例化一个对象
estimator.fit(x_train,y_train)#训练
print("这个模型的偏置是:\n",estimator.intercept_)
这个模型的偏置是:
 22.930198019801995

3.5 模型评估

#预测值和准确率
y_pre=estimator.predict(x_test)
print("预测值:\n",y_pre)
score=estimator.score(x_test,y_test)
print("准确率:\n",score)
#均方误差
ret=mean_squared_error(y_test,y_pre)#输出测试的目标值和预测后的预测值
print("均方误差是:\n",ret)
预测值:
 [27.2896495  14.9985836  20.11931172 20.78720261  8.36920169 16.54422763
 ...
 33.51147164  8.14587979  8.80369598 25.18907243 25.66926574 20.9526319
 23.15306736 25.19316154 22.7180993  20.67159295 17.03417655 18.92520514]
准确率:
 0.6694454216146718
均方误差是:
 31.60855906567943

四 波士顿房价预测——梯度下降(SGDRegressor)

api:

sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)
  1. loss – 损失 (最小二乘)
  2. learning_rate – 学习率
    一般学习率都是进行动态的更新,也可以指定常数,但是不推荐。
from sklearn.linear_model import SGDRegressor#梯度下降

4.1 修改一下机器学习

#修改一下机器学习
estimator=SGDRegressor(max_iter=10000,learning_rate="constant",eta0=0.000001)#实例化一个对象,max_iter迭代几次,learning_rate学习率,eta设置学习率
estimator.fit(x_train,y_train)#训练
print("这个模型的偏置是:\n",estimator.intercept_)
这个模型的偏置是:
 [21.43629149]

4.2 重新模型评估

#预测值和准确率
y_pre=estimator.predict(x_test)
print("预测值:\n",y_pre)
score=estimator.score(x_test,y_test)
print("准确率:\n",score)
#均方误差
ret=mean_squared_error(y_test,y_pre)#输出测试的目标值和预测后的预测值
print("均方误差是:\n",ret)
预测值:
 [25.29790506 14.11914061 19.48652432 19.74929904  6.48583548 13.37014642
	...
 32.58145984  7.03392801  7.19451762 24.52285962 24.28395461 18.7156821
 21.33737494 23.77922648 18.49322604 19.06555468 16.46683163 20.78219838]
准确率:
 0.6802348744819791
均方误差是:
 30.57684121772666

出现以下警告:修改成这样子:SGDRegressor(max_iter=1000)

在这里插入图片描述

五. 波士顿房价预测——岭回归(RidgeCV)

标准化:是对前面一些方法的封装,在使用线性回归,梯度下降,岭回归,我们会涉及到数据大小的计算,都需要特征工程里面的把数据变成到特定范围内(标准化),在进行值的变换

API——Ridge:

Ridge方法相当于SGDRegressor(penalty=‘l2’, loss=“squared_loss”),只不过SGDRegressor实现了一个普通的随机梯度下降学习,推荐使用Ridge(实现了SAG)

sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)

参数介绍

  1. 具有l2正则化的线性回归
  2. alpha:正则化力度,也叫 λ,通过这个力度来进行响应值的判断,值越大,正则化力度越大,相应的系数会越小,默认值是1
  3. solver:会根据数据自动选择优化方法 sag:如果数据集、特征都比较大,选择该SAG随机梯度下降优化
  4. normalize:默认进行标准化处理 normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
  5. Ridge.coef_:回归权重
  6. Ridge.intercept_:回归偏置

API——RidgeCV:

这个API封装的更牛逼:可以把λ对应的值,可以通过网格搜索进行值的传递

sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
  1. 具有l2正则化的线性回归,可以进行交叉验证

  2. coef_:回归系数

代码:

from sklearn.linear_model import RidgeCV#岭回归

修改一下机器学习

estimator=RidgeCV(alphas=(0.001,0.1,1,1.0))#实例化一个对象,自动选择一个参数看看那个最好

输出:

这个模型的偏置是:
 22.54529702970301
预测值:
 [20.80073917 22.01968705 22.07129549 13.1739321  29.19152411 33.26611376
 ...
 31.36346221 25.80495191 10.39900086 25.39191069 16.09318826 24.79786881]
准确率:
 0.7216861974681366
均方误差是:
 23.6001418609719

本人博客:https://blog.csdn.net/weixin_46654114
本人b站求关注:https://space.bilibili.com/391105864
转载说明:跟我说明,务必注明来源,附带本人博客连接。

请给我点个赞鼓励我吧
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200