当前位置: 首页 > article >正文

机器学习:一元线性回归

一元线性回归(Simple Linear Regression)是一种统计方法,用于分析一个自变量(independent variable)和一个因变量(dependent variable)之间的线性关系。它是线性回归分析中最简单和最基本的形式。

一元线性回归的数学模型可以表示为:
y = w x + b y = w x + b y=wx+b
估计一元线性回归模型的最常用方法是最小二乘法,它是一种常用的参数估计方法,用于求解一元线性回归模型的斜率 w w w和截距 b b b

损失函数:
L ( w , b ) = ∑ i = 1 n ( y i − ( w x i + b ) ) 2 L(w,b) = \sum_{i=1}^n(y_i - (wx_i + b))^2 L(w,b)=i=1n(yi(wxi+b))2
分别对 w w w b b b求偏导,并令其等于0,之后进行求解:
w = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 w = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2} w=(xixˉ)2(xixˉ)(yiyˉ)

b = y ˉ − w x ˉ b = \bar{y} - w \bar{x} b=yˉwxˉ

Python实现一元线性回归

准备数据:Student Performance (Multiple Linear Regression) | Kaggle,下载数据。

处理数据:由于是一元线性回归模型,因此仅需要 x x x y y y两个变量,在这里选取了以往成绩作为 x x x表现指数作为 y y y

import numpy as np
import pandas as pd

def get_data():
    """
    x:以往成绩
    y:表现指数
    """
    data = pd.read_csv('./Student_Performance.csv', header=0)
    dataXY = np.array((data.iloc[0:,[1,5]].values))

    return dataXY[:,0], dataXY[:,1]

print(get_data())

实现一元线性回归模型:根据上面给出的公式进行实现即可。

由于numpy向量化更优,故仅使用numpy,不使用list等python原始类型。

import numpy as np
import pandas as pd

"""
 y = wx + b
"""

# print(dataset)
# print(x)
# print(y)
def get_w_b(inputx: np.array, inputy: np.array):
    x = np.array(inputx)
    y = np.array(inputy)
    # w = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean())**2).mean()
    w = ( (y * (x - x.mean())).sum()) / ( (x**2).sum() - (x.sum()**2) / len(x))
    b = y.mean() - w * x.mean()
    return w, b


使用算法

导入数据集:

import data_processing_1LR as gd
x, y = gd.get_data()
print(x)

查看数据:

plt.scatter(x, y)

在这里插入图片描述

引入实现的算法模型:

import LinearRegression1 as LR1
w ,b = LR1.get_w_b(x, y)
print(w,b)
y_hat = w*x + b
plt.plot(x, y_hat, color='r')
plt.scatter(x, y)

在这里插入图片描述

南瓜书 PumpkinBook-课程详情 | Datawhale


http://www.kler.cn/a/488468.html

相关文章:

  • 使用vue-pdf预览pdf和解决pdf电子签章显示问题
  • java通过ocr实现识别pdf中的文字
  • 基于Python实现的通用小规模搜索引擎
  • 软考信安18~网络安全测评技术与标准
  • Perl语言的循环实现
  • Huawei Cloud EulerOS上安装sshpass
  • Python基于jieba和wordcloud绘制词云图
  • gateway在eureka注册报java.lang.IndexOutOfBoundsException
  • Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求
  • 基于Spring Boot的宠物健康顾问系统的设计与实现(LW+源码+讲解)
  • 国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档
  • Docker Desktop的使用方法
  • 什么是Transformer模型中的KV缓存:上下文新增那之前计算的KV还可用,在原有基础上对新增的进行计算就行
  • opencv 学习(3)
  • js代理模式
  • 用c实现C++类(八股)
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/09】小测-【第9章 VRRP原理及基本配置考试】理论和实操
  • UniAPP和Vue3生命周期hook
  • 【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
  • mysql和redis的最大连接数
  • Linux之线程池与单例模式
  • GPT-1模型详解及代码复现
  • 利用Python爬虫获取义乌购店铺所有商品列表:技术探索与实践
  • 开启Excel导航仪,跨表跳转不迷路-Excel易用宝
  • IntelliJ IDEA中Maven项目的配置、创建与导入全攻略
  • windows C#-泛型类型参数的约束详解(一)