首页 > 其他分享 >机器学习:线性回归:最小二乘法应用一元线性回归(持续更新)

机器学习:线性回归:最小二乘法应用一元线性回归(持续更新)

时间:2024-12-24 16:56:22浏览次数:10  
标签:plt R2 回归 cost 拟合 线性 sum 乘法

目录

前言 (基础知识的准备 最小二乘法在回归中的应用)

利用最小二乘法解决最简单的一元线性回归问题

第一步:引入必要的库并且创建数据集(这里使用的例子是房价与面积的关系)

第二步 利用某些方法去用一条直线去拟合你的数据

第三步 观察与测评求出的W,B值与数据集的拟合程度并且做出预测


前言 (基础知识的准备 最小二乘法在回归中的应用)

    1. 简单线性回归中的最小二乘法公式

     2. 多元线性回归中的最小二乘法公式

利用最小二乘法解决最简单的一元线性回归问题

第一步:引入必要的库并且创建数据集(这里使用的例子是房价与面积的关系)

这里用的是随机的数据(房价与房屋面积)

  • 假设房屋价格与房屋面积呈近似线性关系

In [194]:

import numpy as np
import math
import matplotlib.pyplot as plt

In [195]:

def make_data():
    np.random.seed(1)
    x = np.random.rand(50)*30+50 #随机数生成100个数据表示房屋面积 以数组形式
    noise = np.random.rand(50)*50 #噪声
    y = x*8-100+noise   #表示房屋价格 数组形式
    return x,y

利用图标展现房屋价格与房屋面积的关系

In [197]:

# 生成房屋价格与房屋面积的散点图
x,y=make_data()
plt.xlabel('area')
plt.ylabel('prize')
plt.title('Area-Prize Table')
plt.scatter(x, y, c='r', marker='.', alpha=0.6, label='prize', linewidths=3)
plt.legend()
plt.show()

很明显他呈现近似一元线性关系,因此我们可以用一些方法去最大程度上拟合这条直线

第二步 利用某些方法去用一条直线去拟合你的数据

  • 采用最小二乘法解决一元线性回归 (它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。) 设拟合直线的公式为 y=wx+by=wx+b

In [199]:

def Ordinaryleastsquares(x,y):
    D = 0
    D2 = 0
    E = 0
    head = 0
    x_aver = int(sum(x)) / 50
    y_aver = int(sum(y)) / 50
    for i  in range(0,50):         #
      #  print(i)
        D=  abs(x[i]-x_aver)
        D2= abs(y[i]-y_aver)
        head = head + (D * D2)
        E=E + (D**2)
    K=head/E
    B = y_aver - K * x_aver
    print(f"w:{K},  b:{B}")
    return K,B

第三步 观察与测评求出的W,B值与数据集的拟合程度并且做出预测

对于线性回归我们可以使用以下几种来评定拟合效果的好坏:

  1. 均方误差(MSE - Mean Squared Error)
  • 定义:均方误差是预测值与真实值之差的平方的平均值。假设我们有(n)(n)个样本,真实值为(yi)(yi)预测值为(^yi)(y^i),那么均方误差的计算公式为(MSE=1n∑ni=1(yi−^yi)2)(MSE=1n∑i=1n(yi−y^i)2)。
  • 解释:它衡量的是预测值与真实值之间的平均平方差异。MSE的值越小,说明模型的拟合效果越好。例如,在一个房价预测的线性回归模型中,如果MSE很大,意味着预测的房价和实际房价之间的差距在平方后平均起来很大,模型可能没有很好地捕捉到数据中的规律。
  1. 均方根误差(RMSE - Root Mean Squared Error)

     2.平均绝对误差(MAE - Mean Absolute Error)

  • 3. 决定系数((R2)((R2) - Coefficient of Determination)

In [213]:

    #图片生成(散点图,回归直线)
plt.xlabel('area')
plt.ylabel('prize')
plt.title('house-area map')
k,b=Ordinaryleastsquares(x,y)
prize = k * x+ b

#误差线
plt.errorbar(x, y, yerr=abs(y-prize), fmt='o', color='g',label='Data Points with Error Bars')
plt.plot(x, prize, 'r', label='Fitted Line')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Data Points with Error Bars and Fitted Line')

plt.legend()
plt.show()
w:8.137163841113459,  b:-83.47848583126137

让我们计算各个值与直线上的点的值的误差,即误差函数为多少

In [215]:

def compute_cost(x_train,y_train,w,b):
    m = x_train.shape[0]
    cost = 0
    for i in range(m):
        jwb=w*x_train[i]+b-y_train[i]
        cost+=jwb**2
    total_cost= (1/(2*m))*cost
    return total_cost

In [217]:

cost = compute_cost(x,y,k,b)
print(f"cost : {cost}")
plt.hist(y-prize, bins='auto')
plt.xlabel('Residuals')
plt.ylabel('Frequency')
plt.title('Histogram of Residuals')
plt.show()
cost : 98.50617138629528

  • 从图上来看误差普遍分布在-20到20上
  • 让我们计算相关系数 R2

  • (R2)(R2)的值介于0和1之间,越接近1,表示模型的拟合效果越好

In [ ]:

def compute_R2(x,y,w,b):
         n = x.shape[0]#获取样本数量
         sum_1=0
         sum_2=0
         for i in range(n):
             sum_2+=(y[i]-np.average(y))**2
             sum_1+=(y[i]-w*x[i]-b)**2
         R2 = 1- sum_1/sum_2
         return R2

In [ ]:

R2 = compute_R2(x,y,k,b)
print(f"R2 = {R2}")
R2 = 0.9657412767801896
  • 好了,通过本次学习,我们掌握了如何使用最小二乘法解决一元线性回归问题,但是拟合效果不好。但是当我们遇到多个特征的变量时,该如何去拟合这些数据呢,或者这些数据点并不都是线性关系,我们该如何拟合呢
  • 下节我们将了解梯度下降法解决多特征的问题以及如何用梯度下降法去很好的拟合我们的数据并且做出很好的预测

ipynb::笔记
链接: https://pan.baidu.com/s/1A84Wrks6taEFKlkoAETiaQ?pwd=6666 提取码: 6666

标签:plt,R2,回归,cost,拟合,线性,sum,乘法
From: https://blog.csdn.net/2302_80554221/article/details/144631010

相关文章

  • 机器学习:线性回归:梯度下降法应用多元线性回归(持续更新)
    目录第二节梯度下降法在线性回归中的应用情景带入这里提出误差函数即残差函数的概念:我们这里采用MSE损失函数来刻画预测值与真实值之间的误差大小下面是基于梯度下降法求解线性回归方程中参数(θ)(θ)的推导过程:于是我们重复的过程是:我们先观察各个特征数据与房价的......
  • 逻辑回归全解析:概念、估计、评估与特征工程及应用大揭秘
    一、基本概念定义与用途逻辑回归主要用于二分类问题,例如预测一个用户是否会购买某产品(是/否)、一封邮件是否是垃圾邮件(是/否)等。它也可以扩展到多分类问题,但本质上是通过组合多个二分类来实现的。逻辑回归模型输出的是事件发生的概率,而不是像线性回归那样直接输出一个数值。......
  • 线性回归模型
    一、基本概念定义线性回归是一种统计分析方法,用于研究一个或多个自变量(解释变量)与一个因变量(被解释变量)之间的线性关系。它试图找到一条最佳拟合直线(在简单线性回归中)或超平面(在多元线性回归中),使得因变量的预测值与实际值之间的误差最小。简单线性回归模型的数学表达式为:\(y......
  • 线性表详解:一文彻底玩转线性表(万字长文,新手必看)
    目录1、线性表(线性存储结构)是什么线性表的顺序存储和链式存储前驱和后继2、顺序表(顺序存储结构)详解顺序表的使用3、顺序表的基本操作(C语言实现)顺序表插入元素顺序表删除元素顺序表查找元素顺序表更改元素实例演示4、链表(单链表)是什么结点(节点)头结点、头指针和首......
  • 非线性规划和线性规划的区别是什么?
    以下是线性规划和非线性规划的定义及区别的详细解释:定义线性规划(LinearProgramming,LP)是运筹学中数学规划的一个重要分支,旨在找到一组变量的最优解,这些变量满足一系列线性约束条件,并最大化或最小化一个线性目标函数。线性规划问题中的目标函数和约束条件都是线性的,即都是......
  • 线性规划和非线性规划算法
    线性规划和非线性规划是数学规划中的两个重要分支,它们在算法和应用上有着不同的特点。线性规划算法线性规划问题主要关注目标函数和约束条件均为线性的情况。其标准形式可以表示为:目标函数:最大化(或最小化)一个线性函数,即z=c1x1+c2x2+...+cnxn约束条件:一组线性不等式或等式,如a1......
  • QRCNN-Attention多变量时序预测 基于分位数回归的卷积神经网络结合注意力机制的多变量
    目录Matlab基于QRCNN-Attention多变量时序预测基于分位数回归的卷积神经网络结合注意力机制的多变量时序预测效果分析基本介绍订阅专栏只能获取专栏内一份代码。程序设计参考资料Matlab基于QRCNN-Attention多变量时序预测基于分位数回归的卷积神经网络结合注意力......
  • 乘法逆元笔记(蒙哥马利快速幂模)
    乘法逆元笔记(蒙哥马利快速幂模)定义何为逆元?逆元,又称数论倒数。若整数a、b满足同余方程a*b=1(modn),那么a,b互为模n意义下的逆元。前置\(1\):快速幂给你三个整数\(a,b,p\),求\(a^b\bmodp\)。如果直接算复杂度太高了,我们优化。基本的快速幂公式\(a^b\)有两种情况,一种是......
  • 线性模型入门指南:从原理到实践
    1线性模型的基础概念1.1线性模型的本质线性模型是机器学习中最基础也最优雅的模型之一。其核心思想源于一个简单而深刻的假设:在许多现实问题中,输出变量与输入特征之间存在某种线性关系。这种关系可以用数学表达式精确描述:  在这个表达式中,每个代表一个输入特征,是对应......
  • Unity Shader学习日记 part 3 线性代数--矩阵变换
            之前我们学到了矩阵的相关基础,了解矩阵使用了进行变幻的。可是在三维空间中我们不管是表示点还是向量,都是通过x,y,z来表示的。那我们如何在三维向量中,表示出来变换的呢?齐次坐标    齐次坐标:将原本的n维向量用n+1维来表示。    原因:1.不论是......