模型选择,深度学习常用定理,单层感知器实现多元输入一元输出的线性回归问题

2023-11-19

前言

这是补的昨天的学习内容总结,算下来有两天没更了。那两天,第一天我上午做了一上午实验,晚上开了一晚上的大创组会,收获也颇丰。第二天我码了一点代码,后来发现matlab有工具箱能直接预测,又试了下工具箱,因为内容较为简单,便没有写一篇总结。

现在进度到能实现多元输入一元输出的线性预测模型了,之后做出多元输入一元输出的非线性回归预测就能解决问题了,先结合预测和实际做实验测真实值看看实际效果,效果不好还得再改进。

接下来的一两天我想学一学图像识别,做一做集创赛的东西。

模型选择

拟合能力强模型复杂程度高,容易过拟合。如果限制模型复杂度,降低拟合能力,容易欠拟合。

如何选择模型呢?并不是在训练集上错误率越低越好,往往会导致过拟合,在选择模型时,测试集不可见。

解决方法:引入验证集。将训练集分为两部分,训练集和验证集,在训练集上训练不同模型,选择在验证集上错误最小的模型。

一些准则:赤池信息量准则和贝叶斯信息准则。

赤池信息量准则(英语:Akaike information criterion,简称AIC)是评估统计模型的复杂度和衡量统计模型“拟合”资料之优良性(英语:Goodness of Fit,白话:合身的程度)的一种标准。

在一般的情况下,AIC可以表示为:

{\displaystyle AIC=2k-2\ln(L)\,}

其中:K是参数的数量,L是似然函数。

假设条件是模型的误差服从独立正态分布。

n为观察数,RSS为残差平方和,那么AIC变为:

{\displaystyle AIC=2k+n\ln(RSS/n)\,}

增加自由参数的数目提高了拟合的优良性,AIC鼓励数据拟合的优良性但是尽量避免出现过度拟合(Overfitting)的情况。

所以优先考虑的模型应是AIC值最小的那一个。赤池信息量准则的方法是寻找可以最好地解释数据但包含最少自由参数的模型。

在统计学当中,贝叶斯信息量准则(英语:Bayesian information criterion或者:Schwarz information criterion;缩写:BICSICSBCSBIC)是在有限集合中进行的模型选择准则:BIC最低的模型是最好的。该准则部分基于似然函数并与赤池信息量准则(AIC)紧密相关。

拟合模型时,增加参数可提高似然,但如此下去可能导致过拟合。BIC与AIC都致力于向模型中引入关于参数数量的惩罚项;其中,BIC中的惩罚项会大于AIC中的惩罚项。

深度学习常用定理

没有免费午餐定理

对于基于迭代的最优化算法,不存在某种算法对所有问题都有效,如果一个问题对某些问题有效,那么它一定在另外一些问题上比纯随机搜索算法更差。

奥卡姆剃刀原理

如无必要,勿增实体。假如一个简单模型就能解决的话,没必要引入复杂模型。复杂模型会带来过拟合,计算量过大等问题。

归纳偏置

很多学习算法都会对学习的问题做出一些假设,这些假设称为归纳偏置。在最近邻分类器中,我们会假设在特征空间中,一个小的局部区域中的大部分样本都同属一类。在朴素贝叶斯分类器中,我们会假设每个特征的条件概率是相互独立的。

PAC学习

根据大数定律,当训练集大小趋向无穷时,泛化误差趋向于0,经验风险趋近于期望风险。PAC学习理论可以帮助分析一个机器学习在什么条件下可以学习到一个近似正确的分类器,如果希望模型的假设空间越大,泛化误差越小,需要的样本数越多。

MP理论及代码实现

MP模型

MP是单层感知器,单层多个MP模型并联,可以实现多线性回归问题,通过多层MP模型串联,可以构建多层感知器,解决非线性。

MP的输入和输出都是N维向量,客观上存在一个绝对的函数f,能够建立输入到输出的精准映射。

前馈形式:f的具体表达式

具体计算如下:

 激活函数,达到阈值激活。

梯度下降法——局部极小值收敛

梯度下降算法在有些情况下得到的解不是唯一的,取决于初始值, 容易陷入局部收敛。解决这个可以后期找论文。

简单MP模型

只能解决线性回归问题,训练模型如下

 单层感知器预测代码如下,能实现多元输入,一元输出的回归预测

# -*- coding = utf-8 -*-
# @Time : 2022/4/12 20:15
# @Author : yeye
# @File : MP.py
# @software: PyCharm

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

#定义函数,读取函数数据
def get_all_data(dataset_path):
    all_data = pd.read_csv(dataset_path)
    # 单独取两列,实际做时可以去掉,但是是以行向量的形式,需要转成列向量
    x_df = all_data[["RM","LSTAT"]].values
    x_np = np.array(x_df,dtype=np.float32).reshape(-1,2,1)   #生成2*1矩阵
    #这里的-1被理解为unspecified value,意思是未指定为给定的。如果我只需要特定的行数,
    # 列数多少我无所谓,我只需要指定行数,那么列数直接用-1代替就行了,计算机帮我们算有多少列
    y_df = all_data[["PRICE"]].values
    y_np = np.array(y_df,dtype=np.float32).reshape(-1,1)
    return x_np,y_np

#进行w,b的初始化,可以随便赋值
#有两个自变量,所以w为二维
def initialize():
    w = np.array([
        [1],
        [1]
    ],dtype=np.float32)
    b = np.array([0],dtype=np.float32)
    return w,b

def model(w,b,x):
    return np.dot(w.T,x) + b    #令激活函数f=x,前馈形式退化为y=w.T*x+b,由此计算出y_pre

def loss(y,y_pre):
    return np.mean(0.5 * np.power(y-y_pre,2))

#基于loss函数进行梯度下降
def gd(w, b, x, y, lr):
    #np.dot(w.T,x) + b -y  生成的是向量,用reshape变成标量
    #得到三个梯度
    d_w0 = np.dot((np.dot(w.T,x) + b - y).reshape(-1,1).T, x[:,0]).reshape(1) / len(x)
    d_w1 = np.dot((np.dot(w.T,x) + b - y).reshape(-1,1).T, x[:,1]).reshape(1) / len(x)
    d_b  = np.mean(np.dot(w.T,x) + b - y)
    #不断更新三个梯度
    w[0] = w[0] - lr * d_w0
    w[1] = w[1] - lr * d_w1
    b = b - lr * d_b
    return w,b

def train():
    x , y = get_all_data(r"C:\Users\xiaomi\PycharmProjects\bpyuce\dataset\train_dataset.csv")
    w , b = initialize()
    losses = list()
    #进行1000次迭代,梯度下降
    for i in range(1000):
        y_pre = model(w,b,x)
        ls = loss(y,y_pre)
        losses.append(losses)
        w, b = gd(w, b, x, y, 1e-3)
        print("Epoch:{}/{} Loss:{:.4f}".format(i,1000,ls))
    print(w, b)
    #绘制loss的变化曲线
    plt.figure(figsize=(100, 100), dpi=100)
    plt.plot(losses)
    plt.show()
if __name__=="__main__":
    train()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型选择,深度学习常用定理,单层感知器实现多元输入一元输出的线性回归问题 的相关文章

  • 嵌套函数中的变量作用域

    有人可以解释为什么以下程序失败 def g f for in range 10 f def main x 10 def f print x x x 1 g f if name main main 带有消息 Traceback most re
  • 用于读取类似 CSV 行的 Python 正则表达式

    我想解析传入的类似 CSV 的数据行 值用逗号分隔 逗号周围可能有前导和尾随空格 并且可以用 或 引用 例如 这是有效的行 data1 data2 data3 data4 data5 但这是格式错误的 data1 data2 da ta3
  • MacOS Big Sur 中的 NPM 错误“找不到 Python 可执行文件”

    我已经花了整整一周的时间寻找这个问题的答案 但没有成功 我查看了每个 StackOverflow 帖子 Google 的每一篇文章以及我能找到的每个相关的 Github 问题 大多数相关错误似乎都比较旧 所以我想知道我的问题是否由于我使用的
  • 如何进行重定向并保留查询字符串?

    我想进行重定向并保留查询字符串 就像是self redirect加上发送的查询参数 那可能吗 newurl my new route urllib urlencode self request params self redirect ne
  • 使用 Poetry 创建的 Python 项目:如何在 Visual Studio Code 中调试它?

    我有一个根据基本 Poetry 创建的 Python 项目指示 https python poetry org docs basic usage 项目文件夹是这样的 my project my project my project py F
  • 如何同时有效地运行多个 Pytorch 进程/模型? Traceback:分页文件太小,无法完成此操作

    背景 我有一个非常小的网络 我想用不同的随机种子进行测试 该网络几乎只使用了我的 GPU 计算能力的 1 因此理论上我可以同时运行 50 个进程来同时尝试许多不同的种子 Problem 不幸的是我什至无法在多个进程中导入 pytorch 当
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • matplotlib - 将文本包装在图例中

    我目前正在尝试绘制一些pandas数据通过matplotlib seaborn 然而我的一个专栏标题特别长 拉长了情节 考虑以下示例 import random import pandas as pd import matplotlib p
  • 关于具有自定义损失的 3 输出 ANN 的加权

    我正在尝试定义一个自定义损失函数 它在回归模型中接收 3 个输出变量 def custom loss y true y pred y true c K cast y true float32 Shape batch size 3 y pre
  • 熊猫系列到二维数组

    所以 我使用了来自的答案将二维数组放入 Pandas 系列中 https stackoverflow com questions 38840319 put a 2d array into a pandas series将 2D numpy
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • python os.fork 使用相同的 python 解释器吗?

    据我所知 Python 中的线程使用相同的 Python 解释器实例 我的问题是与创建的流程相同os fork 或者每个进程创建的os fork有自己的翻译吗 每当你 fork 时 整个 Python 进程都会在内存中复制 包括Python
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • 配置 Django 和 Google 云存储?

    I am not使用应用引擎 我有一个在虚拟机上运行的普通 Django 应用程序 我想使用 Google Cloud Storage 来提供静态文件 以及上传 提供媒体文件 我有一个水桶 如何将 Django 应用程序链接到我的存储桶 我
  • 我应该在哪里对对象和字段进行 django 验证?

    我正在创建一个 Django 应用程序 它使用 Django Rest Framework 和普通的 django views 作为用户的入口点 我想对模型的独立字段以及整个对象进行验证 例如 字段 根据正则表达式函数输入的车牌是否正确 与
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • model.predict() 返回类而不是概率

    Hello 我是第一次使用 Keras 我训练并保存了一个模型 作为 json 文件及其权重 该模型旨在将图像分为 3 个类别 我的编译方法 model compile loss categorical crossentropy optim
  • 如何使用 Matplotlib 可视化标量二维数据?

    所以我有一个网格网格 矩阵 X 和 Y 以及标量数据 矩阵 Z 我需要将其可视化 最好是一些 2D 图像 在各点处带有颜色 显示 Z 值 我做了一些研究 但没有找到任何能完全满足我想要的效果的东西 pyplot imshow Z 看起来不错
  • Docker Python 脚本找不到文件

    我已经成功构建了一个 Docker 容器 并将应用程序的文件复制到 Dockerfile 中的容器中 但是 我正在尝试执行引用输入文件 在 Docker 构建期间复制到容器中 的 Python 脚本 我似乎无法弄清楚为什么我的脚本告诉我它无
  • Python 中的可逆 STFT 和 ISTFT

    有没有通用的形式短时傅立叶变换 https en wikipedia org wiki Short time Fourier transform与内置于 SciPy 或 NumPy 或其他什么中的相应逆变换 这是pyplotspecgram

随机推荐

  • pandas 数据导出为csv Excel格式

    import pandas as pd string to show exporting data to csv df to csv filepath or buffer path to story to sep column separa
  • 月薪1000到游戏创业赚百万,程序员到自媒体达人,他是怎么做到的?

    深圳雷哥 一位8年游戏开发经验的程序员游戏创业赚了百万从程序员转战自媒体写作与职场教练目前副业每月收入高达4K全网粉丝2 万 预计年底破5万下面来听听雷哥的传奇故事 希望对大家有所启发和帮助 01 我的学生时代 我叫雷巍 今年32岁 来自湖
  • 一位毕业生的自我分享

    活动地址 毕业季 进击的技术er 1 毕业后的去向 继续读研还是直接就业 我的大学是一个普通二本 学的是物联网工程专业 二本院校大家也都知道 是考研的主力军 我的很多同学从大二开始就决定考研了 而我从大二就决定毕业直接就业 他们考研的原因也
  • ESP32cam系列教程001:使用webcam摄像头实时查看视频

    文章目录 1 ESP32cam 介绍 2 arduino IDE 2 1 安装 arduino IDE 2 2 arduino IDE 获取 ESP32 开发环境 3 内网视频实时查看 3 1 选择 文件 gt 示例 gt ESP32 gt
  • LeetCode每日刷题:多数元素

    题目 给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数 大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 解题思路 通过Hashmap的方法来解答 通过Hashmap来统计每个元素的个
  • HbuilderX运行uni-app开发的微信小程序

    HbuilderX运行uni app开发的微信小程序 Hbuilder下载地址 https www dcloud io hbuilderx html 当咱们创建了个uni app项目后 将整个项目用HbuilderX打开 记住一定是项目的根
  • BLE Mesh中广播包类型Mesh Beacon、Mesh Message、PB-ADV,以及代理的PB-GATT

    在BLE Mesh中常用于数据通信的几种方式 Mesh Beacon Mesh Message PB ADV PB GATT 前三种是广播类型 最后一种是基于代理走BLE连接的一种数据通信 广播包种类 广播包类型 Mesh Beacon 0
  • Python3,为了无损压缩gif动图,我不得不写了一个压缩神器,真香。

    gif动图无损压缩 1 引言 2 代码实战 2 1 模块介绍 2 2 安装 2 3 代码示例 3 总结 1 引言 小屌丝 鱼哥 求助 求助 求助 小鱼 你这是告诉我 重要的事情 说三遍吗 小屌丝 你可以这么理解 小鱼 好吧 什么事情 这么慌
  • Java获取当前时间前3分钟

    获取当前时间前3分钟 param stuff return public String getCurrentTime SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd HH mm ss
  • Java面试——从JVM角度比较equals和==的区别

    1 Java中数据类型分类 1 1 基本数据类型 又称为原始数据类型 byte short char int long float double boolean 他们之间的比较应该使用 比较的是他们的值 1 2 复合数据类型 当复合数据类型
  • android 检测是否模拟器,Android全面检测设备是否模拟器

    前言 前段时间工作有个需求 要求检测App是否在模拟器环境下运行 就像在有些手机游戏上可以看到这个功能 乍一看蛮简单的 后来我查了一下资料 然后头都大了 这多亏了国内pc端模拟器的发展 现在市面上的模拟器越来越多 也越来越 逼真 了 模拟器
  • Android修改Eclipse 中的Default debug keystore路径

    打开系统属性 gt 环境变量 gt 在 系统变量 那一个GroupBox下面选择 新建 gt 变量名为 ANDROID SDK HOME 注意 这个变量名不能改变 只能是这个名字 然后 把变量值改为你想把AVD所在的 android 文件夹
  • Ray Tracing in One Weekend01无法查看ppm的问题及一个C++字符缓冲传参引发的bug

    最近在学习光线追踪的经典教程 lt
  • AWS服务器,如何设置成密码登录

    公司一直有AWS服务器 但是每次启动的实例都是通过秘钥进行登录的 这里写个文章说明一下 如何将秘钥登录的服务器修改成密码登录 1 在新服务器中 创建root账户的密码 使用命令 sudo passwd root 按照步骤进行设置 2 设置完
  • 跨境独立站引流怎么做?必看的高转化教学

    熟悉跨境外贸的小伙伴应该清楚 不同于国内消费者习惯于在购物平台消费 国外买家大多喜欢登录品牌独立网站 独立站 进行购物 这也是许多跨境小伙伴入局独立站的原因之一 但是 即使你拥有一个精美的网站 如果没有足够的流量它也不会取得成功 因此 辛苦
  • 手把手实现语义分割项目

    手把手视频讲解 代码讲解 1 如何实现输入 完全免费解析直达 致力干货分享 2 如何实现模型 完全免费解析直达 致力干货分享 3 如何实现输出 完全免费解析直达 致力干货分享 截图如下 基础知识必备 Pytorch数据加载顺序 使用pyto
  • cf体验服老显示与服务器出现异常,穿越火线体验服出现网络异常

    我女神是taylor 回答数 4 被采纳数 133 2019 04 29 12 44 53 一天朋友求救说自己的机器无法运行游戏了 我询问具体情况 他刚买了一块赛扬 850 装上后DF3 DF1都不能玩了 二话没说拿起我的工具包就直奔现场
  • IT运维管理体系建设规划

    更多专业文档请访问 www itilzj com 公众号回复 218 获取高清pdf版本 福利 圈子构建 学习资料获取 1000 份重磅材料已分享 ITIL4 PPT教材 试题 视频 信息化 IT运维管理各类文档解决方案报告等 ITIL 培
  • HTML+CSS制作网页推广界面

    今天这个网页 其实用以前的基本方法也可以做出来 在这里主要是用到了CSS3的新特性font face以及fontawesome的应用 HTML部分 这一部分的主要框架如下图 黑色的div里面存放的是英文 h3和p标记存放的相应的文字 紫色的
  • 模型选择,深度学习常用定理,单层感知器实现多元输入一元输出的线性回归问题

    前言 这是补的昨天的学习内容总结 算下来有两天没更了 那两天 第一天我上午做了一上午实验 晚上开了一晚上的大创组会 收获也颇丰 第二天我码了一点代码 后来发现matlab有工具箱能直接预测 又试了下工具箱 因为内容较为简单 便没有写一篇总结