返回顶部
首页 > 资讯 > 后端开发 > Python >机器学习-线性回归
  • 820
分享到

机器学习-线性回归

线性机器 2023-01-30 23:01:53 820人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

  ~~~不积跬步,无以至千里~~~ 为了更好的学习线性回归,首先复习一次函数的特性:     什么是线性回归? 假设现在有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作为回归,如下图所示:  

 

~~~不积跬步,无以至千里~~~

为了更好的学习线性回归,首先复习一次函数的特性:

 

 

什么是线性回归?

假设现在有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作为回归,如下图所示:

 

机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

回归问题分为模型的学习预测两个过程。基于给定的训练数据集构建一个模型,根据新的输入数据预测相应的输出。

回归问题按照输入变量的个数可以分为一元回归多元回归;按照输入变量和输出变量之间关系的类型,可以分为线性回归非线性回归

 

 

一元线性回归

在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线表示,这种回归分析称为一元线性回归分析,可以用y=ax+b表示。假设有一个房屋销售的数据如下(例子来源于网络):

面积(m^2)  销售价钱(万元)

   123            250

   150            320

   87              160

   102            220

   …               …

根据面积和总价作图,x轴是房屋的面积,y轴是房屋的售价:

利用曲线对数据集进行拟合,如果这个曲线是一条直线,那就被称为一元线性回归。

假设要销售一个新的面积,没有对应的价格,这个时候可以用一条曲线去尽量准的拟合原始数据,然后根据新的面积,在将曲线上这个点对应的值返回。如果用一条直线去拟合,可能是下面的样子:

    image

绿色的点就是我们想要预测的点。

机器学习过程:首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。就如同上面的线性回归函数。

image

 

 

多元线性回归

假设我去银行申请贷款,银行会根据我们的工资、年龄等条件给我们计算贷款额度。假设额度只与年龄和工资有关,下面有5个申请人的基本信息(样本)。那么,如何根据这些数据构建一个模型,来预测其他人的贷款额度呢?(表格数据来源于网络)

对于一个线性关系,我们使用y=ax+b表示,但在这种关系中y只受一个x的影响,二者的关系可用一条直线近似表示,这种关系叫一元线性回归。

而在本例中,额度(Y)工资(X1)和年龄(X2)的影响,可以近似的看成下图:

 

图中红点为样本数据,现在,我们的目标是根据给定的数据集拟合一个平面,使得各个样本数据到达平面的误差最小。由此得到线性回归的模型函数。额度受到多个变量的影响,称之为多元线性回归

  • 参数θ1 、θ2为权重项,对结果影响较大;
  • 参数θ0为偏置项,因为偏置项不与数据组合,在数据预处理时,需要数据前加入值为1一列,才能保证偏置项值不变。偏置项也可以看成是回归函数的截距,如果没有偏置项,则导致所有的拟合平面都要经过圆点(0,0),所以在处理数据时不要忘记加入偏置项。偏置项的理解请点击此处

将上式中的θ和x分别表示成两个一维矩阵[θ0   θ1   θ2]和[x0   x1   x2],则可将上式化为(x0为我们加入的一列,每个值为1)。

然而,实际结果不可能完全符合我们的预期,样本和拟合平面必定存在误差,假设对于每一个样本,都存在:(实际值=预测值+误差),其中为真实误差。

误差独立并且具有相同的分布(通常认为是均值为0的高斯分布)。

  •  独立:每个红点到拟合平面的距离都不相同
  •  相同的分布:可以理解成在同一家银行申请信用卡(因为每个银行的额度评估标准不同)

 

因此,把误差值带入高斯分布函数:,得到概率密度函数:

            

                                                { p(y|x;θ)表示在给定了参数θ的情况下,给定一个x就能求出对应的y }

因此,如果存在大量的样本,我们就可以通过做关于θ的参数估计

这里思考一个问题:当误差趋于0时,预测的值越接近真实值。上面的概率密度函数是不是可以理解为:参数θ和x样本数据组合后的预测值接近y的概率越大越好呢?x是已知的样本数据,要想误差趋于0时,那么预测值要越大越好(越接近真实值),也就是参数θ越大越好。那么怎样才能让参数θ越大越好呢?

 

引入似然函数

          

极大似然估计定义

对于因变量Y,最大似然估计就是去找到Y的参数值θ ,使其发生概率最大,利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值θ 。

由极大似然估计的定义,我们需要L(θ )最大,需要两边取对数对这个表达式进行化简如下:

        

 红色方框被标记的两个部分均为常数,不会影响最终结果。因此,减法后面的式子应当越小越好:

化简后得到目标函数:

        最小二乘法)

 

最小二乘法定义:最小二乘法又称最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

 

接下来最小化目标函数,θ 取何值的时,目标函数取得最小值,而目标函数连续,那么 θ 一定为目标函数的极值点,因此对目标函数求偏导就可以找到极值点。将上式化简,并对θ求偏导(矩阵求导知识):

        

化简过程:

 最终结果:

        

 

代码的实现:

首先导入三大件:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 数据集分布情况:

#数据分布情况展示
x_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
x_train = np.array(x_train) #把数据转换为ndarray结构方便矩阵计算
y_train = np.array(y_train) #把数据转换为ndarray结构方便矩阵计算
plt.plot(x_train,y_train,'r.')
plt.show()

计算损失值:

# 计算损失值得函数
def cost(x,y,k,b):
    cost = 0
    for i in range(len(x)):
        cost += (y[i] - (x[i] * k + b)) ** 2
    return cost / (2 * len(x))

定义基本变量:

k = 0 # 定义参数
b = 0 # 定义截距 
lr = 0.001 # 步长
apochs = 5000 # 迭代次数

梯度下降函数:

# 梯度下降函数
def gradient_descent(x,y,k,b,lr,apochs):
    m = len(x)
    for i in range(apochs):
        k_grad = 0
        b_grad = 0
        for j in range(len(x)):
            b_grad += (-1/m) * (y[j] - (k * x[j] + b)) #对b求导
            k_grad += (-1/m) * (y[j] - (k * x[j] + b)) * x[j] #对k求导
        k = k - lr * k_grad #参数更新
        b = b - lr * b_grad #参数更新
    return k,b

最后结果:

print("staring: k= {} b={} cost={}".fORMat(k,b,cost(x_train,y_train,k,b))) #进行梯度下降前的值
k,b = gradient_descent(x_train,y_train,k,b,lr,apochs)
print("runing......")
print("ending: k= {} b={} cost={}".format(k,b,cost(x_train,y_train,k,b))) # 梯度下降后损失值由原来的93降到了0.9
plt.plot(x_train,y_train,'r.')
plt.plot(x_train,k * x_train + b,'b')
plt.show()

 

使用sklearn模块实现:

from sklearn.linear_model import LinearRegression
model = LinearRegression() #创建线性回归模型
model.fit(x_train, y_train) #把数据放入模型
 
xx = np.linspace(0, 26, 100)#生成了0-26之间(包含0和26)的1行100列的一个矩阵
#print(xx)
xx = xx.reshape(-1, 1)#将1行100列的矩阵转化成100行1列的矩阵形式
#print(xx)
yy = model.predict(xx) #根据假设的xx值,进行预测

plt.scatter(x_train, y_train)
plt1, = plt.plot(xx, yy, label="Degree=1")
plt.axis([0, 25, 0, 25])
plt.xlabel('pizza size')
plt.ylabel('Pizza price')
plt.legend()
plt.show()
 
print('model score:', model.score(x_train, y_train)) # 模型评分

 

end~

--结束END--

本文标题: 机器学习-线性回归

本文链接: https://lsjlt.com/news/181009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 机器学习-线性回归
      ~~~不积跬步,无以至千里~~~ 为了更好的学习线性回归,首先复习一次函数的特性:     什么是线性回归? 假设现在有一些数据点,我们利用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作为回归,如下图所示:  ...
    99+
    2023-01-30
    线性 机器
  • 机器学习——线性回归
    1 from sklearn.externals import joblib 2 from sklearn.model_selection import train_test_split 3 from sklearn....
    99+
    2023-01-30
    线性 机器
  • 【机器学习】线性回归
    Model Representation 1、问题描述2、表示说明3、数据绘图4、模型函数5、预测总结附录 1、问题描述 一套 1000 平方英尺 (sqft) 的房屋售价为300,000美元,一套 2000 平方英尺的房屋...
    99+
    2023-08-23
    机器学习 线性回归 人工智能
  • python机器学习之线性回归详解
    目录一、python机器学习–线性回归二、OLS线性回归2.1 Ordinary Least Squares 最小二乘法2.2 OLS线性回归的代码实现三、梯度下降算法3.1 GDL...
    99+
    2024-04-02
  • 机器学习——线性回归-KNN-决策树(实
    1 import numpy as np 2 import pandas as pd 3 from sklearn.linear_model import LinearRegression 4 from sklearn.preproc...
    99+
    2023-01-30
    线性 机器 决策树
  • 机器学习线性回归算法怎么实现
    实现机器学习线性回归算法一般需要以下步骤:1. 导入所需的库:例如,numpy用于数值计算,matplotlib用于可视化数据等。2...
    99+
    2023-09-21
    机器学习
  • Python 机器学习之线性回归详解分析
    为了检验自己前期对机器学习中线性回归部分的掌握程度并找出自己在学习中存在的问题,我使用C语言简单实现了单变量简单线性回归。 本文对自己使用C语言实现单变量线性回归过程中遇到的问题和心...
    99+
    2024-04-02
  • python机器学习基础线性回归与岭回归算法详解
    目录一、什么是线性回归1.线性回归简述2.数组和矩阵数组矩阵3.线性回归的算法二、权重的求解1.正规方程2.梯度下降三、线性回归案例1.案例概述2.数据获取3.数据分割4.数据标准化...
    99+
    2024-04-02
  • 机器学习(一):线性回归之最小二乘法
    文章目录 专栏导读 1、线性回归简介 2、最小二乘法原理 3、实战案例 专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知...
    99+
    2023-09-05
    机器学习 线性回归 python 最小二乘法
  • 机器学习(二):线性回归之梯度下降法
    文章目录 专栏导读 1、梯度下降法原理 2、梯度下降法原理代码实现 3、sklearn内置模块实现 专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,...
    99+
    2023-09-07
    机器学习 线性回归 python 梯度下降法
  • Python中怎么创建线性回归机器学习模型
    Python中怎么创建线性回归机器学习模型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。线性回归机器学习模型1.要使用的数据集由于线性回归是我们在本文中学习的第一个机器学习模型...
    99+
    2023-06-16
  • 机器学习线性回归算法的优缺点是什么
    线性回归是一种常用的机器学习算法,其优点和缺点如下:优点:1. 简单易用:线性回归是一种简单的建模方法,易于理解和实施。2. 计算效...
    99+
    2023-09-21
    机器学习
  • Python机器学习之逻辑回归
    目录一、题目二、目的三、平台四、基本原理4.1 逻辑回归4.2 损失函数五、实验步骤一、题目 1.主题:逻辑回归 2.描述:假设你是某大学招生主管,你想根据两次考试的结果决定每个申请...
    99+
    2024-04-02
  • 线性回归
    传送门:人工智能视频列表-尚学堂,点开任意一个之后会发现他们会提供系列课程整合到一起的百度网盘下载,包括视频+代码+资料,都是免费的 这里:博客园小技巧,我觉得这个很好玩,可以拿来用。 对于机器学习、深度学习的什么介绍,百度吧,有很多,这...
    99+
    2023-01-30
    线性
  • 机器学习实验——单变量线性回归(披萨价格预测问题)
    实验内容 假设某披萨店的披萨价格和披萨直径之间有下列数据关系: 训练样本直径(英寸)价格(美元)1672893101341417.551818 根据上面的训练数据,预测12英寸的披萨的可能售价。 1、...
    99+
    2023-09-30
    机器学习 线性回归 python
  • python机器学习Logistic回归原理推导
    目录前言Logistic回归原理与推导sigmoid函数目标函数梯度上升法Logistic回归实践数据情况训练算法算法优缺点前言 Logistic回归涉及到高等数学,线性代数,概率论...
    99+
    2024-04-02
  • pytorch机器学习softmax回归的简洁实现
    目录初始化模型参数重新审视softmax的实现优化算法通过深度学习框架的高级API也能更方便地实现分类模型。让我们继续使用Fashion-MNIST数据集,并保持批量大小为256。 ...
    99+
    2024-04-02
  • python机器学习Logistic回归原理是什么
    这篇“python机器学习Logistic回归原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python机器学习L...
    99+
    2023-07-02
  • 【数学建模】-多元线性回归分析
    文章目录 回归的思想回归分析:研究X和Y之间相关性的分析。相关性因变量Y自变量X 回归分析的使命回归分析的分类数据的分类一元线性回归对于线性的理解回归系数的解释内生性的探究内生性...
    99+
    2023-10-05
    线性回归 回归 机器学习 matlab
  • Python可视化学习之seaborn绘制线型回归曲线
    目录本文速览1、绘图数据准备2、seaborn.regplotregplot默认参数线型回归图分别设置点和拟合线属性置信区间(confidence interval)设置拟合线延伸与...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作