正规方程,梯度下降,岭回归——机器学习(代码片段)

神的孩子都在歌唱 神的孩子都在歌唱     2022-12-25     720

关键词:

悄悄介绍自己:

作者:神的孩子在跳舞
本人是快升大四的小白,在山西上学,学习的是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
转载说明:跟我说明,务必注明来源,附带本人博客连接。

请给我点个赞鼓励我吧

机器学习线性回归优化损失函数(代码片段)

目录1损失函数2优化算法2.1正规方程2.1.1什么是正规方程2.1.2正规方程求解举例2.1.3正规方程的推导2.2梯度下降2.2.1什么是梯度下降2.2.2梯度的概念2.2.3梯度下降举例2.2.4梯度下降公式3梯度下降和正规方程的对比3.1两种方法对比3.2算... 查看详情

机器学习:线性回归——理论与代码实现(基于正规方程与梯度下降)(代码片段)

一线性模型给定由n个属性描述的列向量(f(mathbfx)=(x^(1);x^(2);...;x^(n))),其中(x^(j))是( extbfx)在第(j)个属性的取值。线性模型即为通过对属性进行线性组合的函数,即[f(mathbfx)=w_0+w_1x^(1)+...+w_nx^(n)]写成向量形式如下:[f( extbf 查看详情

机器学习梯度下降法应用波士顿房价预测(代码片段)

...1案例背景介绍2.2案例分析2.3回归性能评估2.4代码实现2.4.1正规方程2.4.2梯度下降法2.5小结1线性回归api介绍机器学习梯度下降算法:https://blog.csdn.net/ZGL_cyy/article/details/127037949sklearn.linear_model.LinearRegression(f 查看详情

机器学习100天(十四):014梯度下降算法求解线性回归

...解线性回归问题。一、梯度下降更新公式之前我们介绍了正规方程法直接求解线性回归问题,但是梯度下降算法在机器学习中更为常用,因为面对复杂问题时,梯度下降算法能够更加容易获得全局最优解。上一节我们已经介绍了... 查看详情

机器学习100天(十四):014梯度下降算法求解线性回归

...解线性回归问题。一、梯度下降更新公式之前我们介绍了正规方程法直接求解线性回归问题,但是梯度下降算法在机器学习中更为常用,因为面对复杂问题时,梯度下降算法能够更加容易获得全局最优解。上一节我们已经介绍了... 查看详情

线性回归scikit-learnlinearregression最小二乘法梯度下降sdg多项式回归学习曲线岭回归lasso回归(代码片段)

github:https://github.com/gaowanlu/MachineLearning-DeepLearning线性回归scikit-learn关键词:LinearRegression、最小二乘法、梯度下降、SDG、多项式回归、学习曲线、岭回归、Lasso回归LinearRegression#使用scikit-learn中的线性回归模型fromoperatorimpor 查看详情

吴恩达机器学习17:正规方程

1.对某些线性回归问题,正规方程给出了更好的解决方法,来求得参数θ,截止到目前我们一直使用线性回归算法是梯度下降法,为了最小化代价函数J(θ),我们使用梯度下降多次迭代,来收敛得到全局的最小值。与此相反的正规... 查看详情

sklearn机器学习基础(day02基础入门篇)(代码片段)

...策树案例可视化决策树随机森林回归与聚类算法线性回归正规方程梯度下降岭回归逻辑回归与二分类分类的评估K-means无监督聚类算法模型加载与保存总结导图(大致&# 查看详情

机器学习入门之单变量线性回归(上)——梯度下降法(代码片段)

...,线性回归(英语:linearregression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况... 查看详情

第04周-多变量线性回归

...二次方模型、三次方模型。当然,我们也可以这样做:4.6正规方程除了使用梯度下降,对于某些线性回归问题,珍贵方程方法是更好的解决方案。如:  对于不可逆的矩阵,正规方程方法是不适用的。但是大部分情况下式... 查看详情

吴恩达-coursera-机器学习-week2

...征缩放4.4梯度下降法实践2-学习率4.5特征和多项式回归4.6正规方程4.7正规方程及不可逆性(可选)五、Octave教程(OctaveTutorial)5.1基本操作5.2移动数据5.3计算数据5.4绘图数据5.5控制语句:for,whil 查看详情

第二篇[机器学习]学习机器学习,从最简单的线性回归开始

...能到不了局部最小值,步长越小,下降越慢,计算越多2.正规方程直接求解:最小二乘法正规方程组的详细推导:https://zhuanlan.zhihu.c 查看详情

机器学习之——正规方程法

...梯度下降法在特征变量很多的情况下也能运行地相当好2.正规方程法(1)不需要选择学习率a(2)不需要迭代(3)正规方程法不需要做特征缩放 缺点:当正规方程法的特征矩阵维度比较大时,会慢很多总结:当n维比较小时,正规方... 查看详情

机器学习经典算法源码分析系列--线性回归

...数代入展开:  Matlab代码实现:  2) 正规方程 Matlab代码实现:  关于正规方程的推导:   查看详情

斯坦福公开课-机器学习2.监督学习应用-梯度下降(吴恩达andrewng)(代码片段)

...(linearregression)梯度下降(gradientdescent)正规方程组(thenormalequations)1线性代数(linearalgebra)1-1符号(Notation)m代表训练样本的数量,numberoftrainingexamples;x代表输入变量或者特征&#... 查看详情

机器学习之线性回归岭回归lasso回归(代码片段)

...常有两种方法,一种是利用普通最小二乘法,另一种则是梯度下降法。普通最小二乘法:利用矩阵求解在进行矩阵求解中,为了简化运算,我们通常将函数的形式改为y=w1*x1+w2*x2+w3*x3+...+wn*1(wn*1表示的就是偏置顶b),输入数据处... 查看详情

机器学习-线性回归算法(房价预测项目)(代码片段)

文章目录简介损失函数优化算法正规方程梯度下降项目实战前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介线性回归(LinearRegression)是回归... 查看详情

机器学习向量化计算--机器学习路上必经路(代码片段)

...录专栏✨—机器学习—✨专栏内容✨—【机器学习】浅谈正规方程法&梯度下降—✨✨—【机器学习】梯度下降之数据标准化—✨✨—【机器学习】logistic分类回归算法—✨✨—第十届“泰迪杯“感谢学习总结—✨【机器学习... 查看详情