机器学习.线性回归

news2025/1/15 17:13:08

斯塔1和2是权重项,斯塔0是偏置项,在训练过程中为了使得训练结果更加精确而做的微调,不是一个大范围的因素,核心影响因素是权重项

为了完成矩阵的运算,在斯塔0后面乘x0,使得满足矩阵的转换,所以在处理数据时候会添加如有上图所示的x0一列全是1的数据

为了得出这个平面,我们要做的就是找出所有的未知量斯塔

  • y为真实值,斯塔乘x是预测值,伊普西隆是误差值,每个样本的真实值和误差值都存在误差
  • 什么是机器学习呢:就是你给机器一堆数据,机器通过数据不断学习,调整参数,最终得出完美符合数据特征的参数,机器学习==调参侠
  • 我们要想求斯塔,就要将关于伊普西隆的算式转化成关于斯塔的算式

上图第三个算式左边的解释:x与斯塔组合后与y的数值越相近越好

所以p值越大越好

为什么是累乘?因为需要大量的数据去完善最后的参数,使得参数更加准确,因为乘法难解,所以可以加上对数转换成加法,而且转换后虽然L的数值改变了,但是我们要求取的是斯塔为何值使得L最大,所以不改变最后的斯塔数值

要让似然函数数值最大化,由于前面的项是一个常数项,所以后面的项就要最小化

这里的x和斯塔不是一个数,而是一个矩阵

经过求偏导,得出斯塔,但是机器学习是一个通过不断学习的过程不断完善斯塔这个参数,但是上面求解决斯塔的过程并没有一个学习的过程

做切线,走一小步,然后继续做切线,继续一小步,直到走到最低点

有一个问题:计算斯塔1和斯塔0的时候是一起计算好还是分别单独计算好呢?答案是分别计算,因为参数具有独立性

第二个问题:如何找到当前最合适的方向,求偏导

解释一下这张图上的目标函数为什么多了个平方:是因为将数据的误差效果放大

这个公式就是对目标函数求偏导得出方向,因为梯度下降是沿这原来的反方向走,所以后面那个公式前面的符号改变成+号,表示在原来的初始位置斯塔j的位置走那么长的距离

由于批量梯度下降和随机梯度下降各有各的毛病,所以一般采用小批量梯度下降法,每次更新选择一小部分数据来算,比较实用

小批量梯度下降法公式中的α就是学习率,一般是0.01或者0.001

在写代码时,只需要完成上图花圈的部分就可以,m代表所有样本的个数,y代表真实值,h斯塔是预测值,xij也是样本中本来有的
import numpy as np


def prepare_for_training(data, polynomial_degree, sinusoid_degree, normalize_data):
    pass


class LinearRegression:#polynomial_degree,sinusoid_degree,normalize_data目前来说没有用,当成摆设,data是数据,label是真实值y
    def __init__(self,data,labels,polynomial_degree=0,sinusoid_degree=0,normalize_data=True):
        '''对数据进行预处理操作:data_processed表示处理后的数据,features_mean表示处理后数据的平均值,features_deviation表示处理后数据的方差'''
        (data_processed,
         features_mean,
         features_deviation)=prepare_for_training(data,polynomial_degree=0,sinusoid_degree=0,normalize_data=True)
        self.data=data_processed
        self.labels=labels
        self.features_mean=features_mean
        self.features_deviation=features_deviation
        self.polynomial_degree=polynomial_degree
        self.sinusoid_degree=sinusoid_degree
        self.normalize_data=normalize_data

        num_feature=self.data.shape[1]#得到data数据据中的列数,因为theta与data是一一对应的关系,故此将data中的列数取出来作为theta中的行数
        self.theta=np.zeros((num_feature,1))#初始化theta,num_feature行,1列的矩阵

    def train(self,alpha,num_iteration=500):#训练模型
        cost_history=self.gradient_descent(alpha,num_iteration)
        return self.theta,cost_history


    def gradient_descent(self,alpha,num_iteration):#梯度下降
        cost_history=[]#存储损失值
        for _ in range(num_iteration):
            self.gradient_step(alpha)
            cost_history.append(self.cost_function(self.data,self.labels))#添加损失值
        return cost_history

    def gradient_step(self,alpha):#公式实现&&参数的更新
            num_examples=self.data.shape[0]
            prediction=LinearRegression.hypothesis(self.data,self.theta)
            delta=prediction-self.labels
            theta=self.theta
            theta=theta-alpha*(1/num_examples)*(np.dot(delta.T,self.data)).T
            self.theta=theta

    def cost_function(self,data,labels):#损失函数,计算cost损失值
        num_examples=data.shape[0]
        delta=LinearRegression.hypothesis(self.data,self.theta)-labels
        cost=(1/2)*np.dot(delta.T,delta)/num_examples
        return cost[0][0]
    @staticmethod#计算预测值
    def hypothesis(data,theta):
            predictions=np.dot(data,theta)
            return predictions

    def get_cost(self,data,labels):
        data_processed=prepare_for_training(data,self.polynomial_degree,self.sinusoid_degree,self.normalize_data)[0]
        return self.cost_function(data_processed,labels)

    def predict(self,data):
        data_processed=prepare_for_training(data,self.polynomial_degree,self.sinusoid_degree,self.normalize_data)[0]
        predictions=LinearRegression.hypothesis(data_processed,self.theta)
        return predictions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5 文字游戏(1) 仅UI截图转换为texture2d(适用于window端)

目录 需求 思路 1.截图并读取到本地 2.本地读取图片并转换为纹理2d 效果展示 找了好多的解决办法,都不管用。这个算是折中的。 需求 将当前的用户控件(ui)截图下来,并赋值到一个texture2d上。 我的需求:文字游戏…

matlab 三质量-弹簧系统受激振力

1、内容简介 略 44-可以交流、咨询、答疑 建立系统运动方程,研究固有频率和对应主振型 2、内容说明 略 三质量-弹簧系统受激振力,并不考虑各自的阻尼。建立系统运动方程。 解:由于阻尼对固有频率没有影响,故本文不…

力扣1290. 二进制链表转整数

Problem: 1290. 二进制链表转整数 文章目录 题目描述思路复杂度Code 题目描述 思路 1.记录一个变量res初始化为0,指针p指向链表头; 2.循环每次res res * 2 p -> val;p p -> next;(充分利用二进制数的特性;其中利用指针先…

Camera sensor调试与bringup帧率计算

Camera sensor调试 前言DVP并行接口sensor调试方法硬件调试出图调试错误调试地址无响应问题获取帧缓存失败 DVP Wrapper调试 MIPI 串行差分接口sensor调试方法硬件调试MIPI错误调试PCB设计要求ISP时钟大小要求CSI Controller配置时钟部分其他部分 Sensor HS-PREPARE配置 Camera…

L1、L2、Smooth L1 loss

L1 loss 均绝对误差(Mean Absolute Error,MAE),公式如下 优点:因为梯度不变,对离群点不敏感 缺点:因为梯度不变,不管是误差小还是大,梯度都一样,不利于模型…

Hikvision SPON IP网络对讲广播系统命令执行漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 1.漏洞描述 Hikvision Intercom Broadcasting System是中国海康威视&a…

深入理解Java中的Reader类:一步步剖析

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

Android Gradle开发与应用 (二) : Groovy基础语法

1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点,意味着,如果我们完全不懂…

应用配置管理

一、Pod 配置管理 可变配置用 ConfigMap; 敏感信息用 Secret; 身份认证用 ServiceAccount 这几个独立的资源来实现的; 资源配置用 Resources; 安全管控用 SecurityContext; 前置校验用 InitContainers 这几个在 …

nginx之状态页 日志分割 自定义图表 证书

5.1 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态 server{…

吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 文章目录 引入——改进下需求预测模型ReLU函数(整流线性单元 rectified linear unit)线性激活函数(linear activation function)激活函数的选择实现方式为什么需要激活函数 到现在…

计算机设计大赛 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…

【Redis】安装与部署-Ubuntu

在Ubuntu上部署redis 安装环境:ubuntu 20.04 1.安装Redis: 在终端中运行以下命令来安装Redis: linuxubuntu:/mnt/hgfs/GB28181$ sudo apt install redis-server2.配置Redis: Redis的默认配置文件位于/etc/redis/redis.conf 一…

vue3新特性-defineOptions和defineModel

defineOptions 背景说明&#xff1a; 有 <script setup> 之前&#xff0c;如果要定义 props, emits 可以轻而易举地添加一个与 setup 平级的属性。 但是用了 <script setup> 后&#xff0c;就没法这么干了 setup 属性已经没有了&#xff0c;自然无法添加与其平…

基础复习(IDA调试器)

1.选择IDA调试后端 在顶部有一个下拉菜单&#xff0c;选择调试器后端位置 很多用户实际上使用的是Windows版本的IDA&#xff0c;该IDA可以直接调试Windows下32bit和64bit的程序 2.本地调试启动方法 载入IDA后&#xff0c;程序实际上在对程序内置的一个字符串进行base64解码…

Go编译到linux运行出现 cannot execute binary file

1.初学Go就在windows上写了个"Hello,World!",在windown上编译了一下&#xff0c;生成了可执行文件。运行无问题 go build text.go .\text.exe Hello,World!2.但是按照网上的教程进行生成linux的可执行文件时出现报错 set CGO_ENABLED0 set GOOSlinux set GOARCHam…

Ubuntu22.04.3LTS安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 安装 libx264 开发库&#xff08;一个开源的视频压缩库&#xff0c;用于编码视频流为 H.264/MPEG-4 AVC 视频格式&#xff09;。这是编译 FFmpeg 时如果要支持 H.264 编码必须的。 sudo apt install l…

低功耗设计——门控时钟

1. 前言 芯片功耗组成中&#xff0c;有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观&#xff0c;因为这些时钟树在系统中具有最高的切换频率&#xff0c;而且有很多时钟buffer&#xff0c;而且为了最小化时钟延时&#xff0c;它们通常具有很高的驱动强度。此外&…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

时序预测 | Matlab实现基于GRNN广义回归神经网络的光伏功率预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 1.时序预测 | Matlab实现基于GRNN广义回归神经网络的光伏功率预测模型 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高; 4.excel数据,方便替换,运行环境2020及以上。 广义回…