神经网络与深度学习(一)

线性回归

定义

  • 利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法

要素

  • 训练集(训练数据)
  • 输出数据
  • 拟合函数
  • 数据条目数

场景

  • 预测价格(房屋、股票等)、预测住院时间(针对住院病人等)、预测需求(零售销量等)

实例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LinearRegression
from sklearn import metrics# 创建一些随机的线性数据
np.random.seed(0)
x = np.random.rand(100, 1)
y = 2 + 3 * x + np.random.rand(100, 1)# 将数据分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)# 创建线性回归模型
regressor = LinearRegression()  # 使用训练数据来训练模型
regressor.fit(x_train, y_train) # 使用测试数据来评估模型
y_pred = regressor.predict(x_test)# 计算模型的准确度
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))  
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred))  
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))# 绘制原始数据和拟合的直线
plt.scatter(x_test, y_test,  color='gray')
plt.plot(x_test, y_pred, color='red', linewidth=2)
plt.show()

线性回归

分类与回归

线性二分类

定义

线性分类器则透过特征的线性组合来做出分类决定,以达到此种目的。简言之,样本通过直线(或超平面)可分。

  • 线性分类器输入:特征向量
  • 输出:哪一类。如果是二分类问题,则为0和1,或者是属于某类的
  • 概率:即0-1之间的数。

线性分类与线性回归差别

  • 输出意义不同:属于某类的概率VS回归具体值
  • 参数意义不同:最佳分类直线VS最佳拟合直线
  • 维度不同:一维的回归VS二维的分类

Sigmoid函数

  • 用于结果转换,归入0-1区间
    请添加图片描述

梯度下降法

  • 梯度下降法(Gradient Descent)是一种用于找到函数局部极小值的优化算法。它通过向函数上当前点对应梯度的反方向迭代搜索,以寻找最小值。如果相反地向梯度正方向迭代搜索,则会接近函数的局部极大值点,这个过程被称为梯度上升法。

二分类实例

import numpy as np
import matplotlib.pyplot as plt# 设定随机种子以便结果可复现
np.random.seed(0)# 生成数据集
X = np.random.randn(100, 2)  # 生成100个样本,每个样本有2个特征
Y = np.where(X[:, 0] + X[:, 1] > 0, 1, 0)  # 根据线性方程生成标签# 绘制原始数据
plt.scatter(X[Y == 0][:, 0], X[Y == 0][:, 1], color='red', label='Class 0')
plt.scatter(X[Y == 1][:, 0], X[Y == 1][:, 1], color='blue', label='Class 1')
plt.legend()
plt.title('Original Data')
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()# 梯度下降函数
def gradient_descent(X, Y, theta, alpha, iterations):m = len(X)for i in range(iterations):h = np.dot(X, theta)loss = h - Ygradient = np.dot(X.transpose(), loss) / mtheta = theta - alpha * gradientreturn theta# 初始化参数
theta = np.zeros(2)  # 特征数量 + 截距项
alpha = 0.01  # 学习率
iterations = 1000  # 迭代次数# 运行梯度下降
theta = gradient_descent(X, Y, theta, alpha, iterations)# 绘制决策边界
def plot_decision_boundary(theta, X, Y):x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1h = (theta[0] * x_min + theta[1] * y_min) / -theta[2]k = -theta[0] / theta[1]xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))Z = np.dot(np.array([xx.ravel(), yy.ravel()]), theta)Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)plt.scatter(X[Y == 0][:, 0], X[Y == 0][:, 1], color='red', label='Class 0')plt.scatter(X[Y == 1][:, 0], X[Y == 1][:, 1], color='blue', label='Class 1')plt.legend()plt.title('Decision Boundary')plt.xlabel('X1')plt.ylabel('X2')plot_decision_boundary(theta, X, Y)
plt.show()

请添加图片描述

指数回归

实例

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit# 定义指数函数
def exponential_func(x, a, b, c):return a * np.exp(b * x) + c# 创建模拟数据
x = np.linspace(0, 4, 50)
y = 3 * np.exp(2.5 * x) + 0.5
np.random.seed(1729)
yn = y + 0.2 * np.random.normal(size=len(x))# 使用curve_fit进行拟合
popt, pcov = curve_fit(exponential_func, x, yn)# 输出最优参数
print("最优参数: ", popt)# 使用最优参数进行预测
y_pred = exponential_func(x, *popt)# 绘制原始数据和拟合曲线
plt.figure(figsize=(8, 6))
plt.scatter(x, yn, label='原始数据')
plt.plot(x, y_pred, 'r-', label='拟合曲线')
plt.legend()
plt.show()

请添加图片描述

多分类回归

  • 多分类回归通常指的是多目标回归问题,即预测多个连续的输出变量。与多分类分类问题不同,回归任务预测的是连续的数值,而不是离散的类别。

实例

  • 二分类
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler# 创建模拟的二分类数据集
np.random.seed(0)
X = np.random.randn(100, 2)  # 生成100个二维数据点
y = (X[:, 0] + X[:, 1] > 0).astype(int)  # 创建简单的线性分类标签# 使用逻辑回归(其输出层实际上应用了Softmax对于二分类)
# 对于多分类问题,我们可以使用LogisticRegression(multi_class='multinomial', solver='lbfgs')
clf = LogisticRegression(multi_class='multinomial', solver='lbfgs')
clf.fit(X, y)# 预测概率
probabilities = clf.predict_proba(X)# 绘制散点图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', edgecolor='k')# 绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Softmax Classification with Scatter Plot')
plt.show()

请添加图片描述

  • 多分类
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子以保证结果的可复现性
np.random.seed(0)# 定义类别数量和每个类别的数据点数量
num_classes =5
num_points_per_class = 5000# 生成随机散点数据
X = np.zeros((num_classes * num_points_per_class, 2))
for i in range(num_classes):# 为每个类别生成一个正态分布的簇X[i * num_points_per_class: (i + 1) * num_points_per_class] = np.random.randn(num_points_per_class, 2) + [i, i]# 为每个类别创建一个权重向量和偏置项
W = np.random.randn(num_classes, 2)
b = np.random.randn(num_classes)# 计算每个数据点的分数
scores = np.dot(X, W.T) + b# 应用Softmax函数得到概率分布
def softmax(x):exps = np.exp(x - np.max(x, axis=1, keepdims=True))return exps / np.sum(exps, axis=1, keepdims=True)probabilities = softmax(scores)# 绘制散点图
colors = ['r', 'g', 'b', 'c', 'm']  # 每个类别的颜色
for i in range(num_classes):plt.scatter(X[scores[:, i] == np.max(scores, axis=1)][:, 0],X[scores[:, i] == np.max(scores, axis=1)][:, 1],c=colors[i], label=f'Class {i}')# 添加图例和坐标轴标签
plt.legend()
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Scatter Plot with 5 Classes and Softmax Output')# 显示图像
plt.show()# 打印Softmax概率(仅打印前5个数据点的概率作为示例)
print("Softmax Probabilities (for the first 5 points):")
print(probabilities[:5])

请添加图片描述

神经元模型

分类

  • 生物神经元
  • Spiking模型
  • Integrate-and-fire模型
  • M-P模型
  • 单神经元模型

作用函数

非对称型 Sigmoid 函数 (Log Sigmoid)

非对称型Sigmoid函数(也称作Log Sigmoid函数)是Sigmoid函数的一个变体,它可以将任何实数映射到介于0和1之间的值,但不像标准的Sigmoid函数那样是对称的。非对称型Sigmoid函数通常具有不同的形状参数,允许用户调整函数的形状以满足特定的需求。非对称型Sigmoid函数的一般形式可以表示为:f(x) = 1 / (1 + exp(-a * (x - b)))其中,a和b是形状参数。a控制函数的斜率,而b控制函数的中心位置。当a为正数时,函数在x=b处呈现出一个向上的S形曲线;当a为负数时,函数在x=b处呈现出一个向下的S形曲线。通过调整a和b的值,可以改变函数的形状和位置。

请添加图片描述

对称型 Sigmoid 函数 (Tangent Sigmoid)

对称型 Sigmoid 函数(也称为 Logistic Sigmoid 函数)是一种常用的非线性函数,通常用于将连续值映射到 0 到 1 之间的概率值。标准的对称型 Sigmoid 函数公式如下:
f(x) = 1 / (1 + exp(-x))
其中 exp 是自然指数函数,x 是输入值。这个函数将任何实数 x 映射到 (0, 1) 区间内,其中当 x 趋近于正无穷时,f(x) 趋近于 1;当 x 趋近于负无穷时,f(x) 趋近于0。
请添加图片描述

多层感知机

应对问题

  • 线性不可分问题:无法进行线性分类。Minsky 1969年提出XOR问题
  • 三层感知器可识别任一凸多边形或无界的凸区域。
  • 更多层感知器网络,可识别更为复杂的图形。

实现过程

  • 在输入和输出层间加一或多层隐单元,构成多层感知器(多层前馈神经网络)
  • 加一层隐节点(单元)为三层网络,可解决异或(XOR)问题由输入得到两个隐节点、一个输出层节点的输出。

多层前馈网络

  • 多层感知机是一种多层前馈网络,由多层神经网络构成,每层网络将输出传递给下一层网络。神经元间的权值连接仅出现在相邻层之间,不出现在其他位置。如果每一个神经元都连接到上一层的所有神经元(除输入层外),则成为全连接网络。
    在这里插入图片描述

BP网络

  • 多层前馈网络的反向传播 (BP)学习算法,简称BP算法,是有导师的学习,它是梯度下降法在多层前馈网中的应用。
    网络结构:见图,𝐮(或𝐱 )、𝐲是网络的输入、输出向量,神经元用节点表示,网络由输入层、隐层和输出层节点组成,隐层可一层
    ,也可多层(图中是单隐层),前层至后层节点通过权联接。由于用BP学习算法,所以常称BP神经网络。

BP学习算法

由正向传播和反向传播组成:

  • 正向传播是输入信号从输入层经隐层,传向输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传播。
  • 反向传播是将误差(样本输出与网络输出之差)按原联接通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小。

优缺点:

  • 学习完全自主
  • 可逼近任意非线性函数
  • 算法非全局收敛
  • 收敛速度慢
  • 学习速率α选择
  • 神经网络如何设计(几层?节点数?)

性能优化

常用技巧

  • 模型初始化
  • 训练数据与测试数据
  • 训练数据与测试数据:𝐾折交叉验证
  • 欠拟合与过拟合
  • 权重衰减 (𝐿2正则化)
  • Dropout(暂退)

动量法

自适应梯度法

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

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

相关文章

TASKPROMPTER

baseline模型的预训练权重就有1.6G! 多吓人呐,当时我就暂停下载了,不建议复现

python opencv 直线检测

直线检测 前期准备 import cv2 import numpy as np# 读取图片 img cv2.imread(r"C:\Users\HONOR\Desktop\12.png") # 灰度转换 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化 # reg, img cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 显示二值化…

数据结构 - 图

参考链接:数据结构:图(Graph)【详解】_图数据结构-CSDN博客 图的定义 图(Graph)是由顶点的有穷非空集合 V ( G ) 和顶点之间边的集合 E ( G ) 组成,通常表示为: G ( V , E ) ,其中, G 表示个图, V 是图 G…

QT中的文件操作QFile、QDataStream、QTextStream、QBuffer

文件操作概述 1、Qt中IO操作的处理方式 (1)、Qt通过统一的接口简化了文件与外部设备的操作方式 (2)、Qt中的文件被看做是一种特殊的外部设备 (3)、Qt中的文件操作与外部设备操作相同 2、IO操作中的关键…

设计模式9--单例模式

定义 案例一 案例二 优缺点

新网站秒收录技术,新网站百度收录时间

在建立新网站后,让它尽快被搜索引擎收录是网站主最为关注的事情之一。百度作为中国最大的搜索引擎,网站被其快速收录对于增加曝光和流量至关重要。本文将介绍一些新网站秒收录技术,以及一般情况下新网站被百度收录需要的时间。 新网站秒收录技…

酷柚易讯无人空间小程序注册后需开通的部分接口权限

注意:无人共享小程序注册认证与备案后,需要开通以下接口系统才能正常使用! 登录小程序后,找到开发管理->接口设置(申请对应的接口权限)

【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了 原因:vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({{ goal }} - {{ index }})复制到第一个dom元素…

B096-docker版jenkins环境搭建

目录 Jenkins持续集成工具的介绍Jenkins安装过程案例 tips:ssm项目需要放到tomcat中运行,springboot项目不需要,内置有tomcat,可直接命令行运行 Jenkins持续集成工具的介绍 Jenkins安装过程 docker版Jenkins需要先安装docker环境…

Redis实战篇-利用逻辑过期解决缓存击穿问题

实战篇Redis 3.0 、利用逻辑过期解决缓存击穿问题 需求:修改根据id查询商铺的业务,基于逻辑过期方式来解决缓存击穿问题 思路分析:当用户开始查询redis时,判断是否命中,如果没有命中则直接返回空数据,不…

深度学习pytorch——经典卷积网络之ResNet(持续更新)

错误率前五的神经网络(图-1): 图-1 可以很直观的看到,随着层数的增加Error也在逐渐降低,因此深度是非常重要的,但是学习更好的网络模型和堆叠层数一样简单吗?通过实现表明(图-2&…

嵌入式硬件中常见的面试问题与实现

1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…

使用Node.js常用命令提高开发效率

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具,可以帮助开发者更高效地开发应用程序。在日常开发中,除了Node.js本身的核心功能外,npm&#x…

IPv6-重定向,PMTU,GRE隧道

IPv6-重定向,PMTU(路径最大传输单元),GRE隧道(Generic Routing Encapsulation,通用路由封装协议) 重定向过程 触发重定向的条件: 1、报文的入接口,等于自身路由之后的…

设计模式12--组合模式

定义 案例一 案例二 优缺点

websocket 局域网 webrtc 一对一 视频通话的实例

基本介绍 使用websocket来 WebRTC 建立连接时的 数据的传递和交换。 WebRTC 建立连接时,通常需要按照以下顺序执行一些步骤: 1.创建本地 PeerConnection 对象:使用 RTCPeerConnection 构造函数创建本地的 PeerConnection 对象,该…

pytest--python的一种测试框架--pytest初阶

前言 使用pytest去做测试时我们对文件名的命名其实是有规范的,要用test_开头!!! 一、pytest初阶 def test_one():expect1actual1assert expectactual#测试专用语句:assert,识别期望与实际值是否相等这个…

EXCEL 通过FILES函数获取指定路径中的所有文件名

FILES函数 用途 获取指定文件路径中的所有文件名。 语法 FILES(“路径\*.*”)指定从哪个路径下返回一个文件名。 *.*是通配符,代表所有类型的文件,第一个*是文件名的通配符,第二个* 是文件的后缀名,表示文件类型,如…

最新Java面试题1【2024中级】

互联网大厂面试题 1:阿里巴巴Java面试题 2:阿里云Java面试题-实习生岗 3:腾讯Java面试题-高级 4:字节跳动Java面试题 5:字节跳动Java面试题-大数据方向 6:百度Java面试题 7:蚂蚁金服Java…

swift中的autoreleasepool(自动释放池)有用么?

想到一个问题 swift中的autoreleasepool(自动释放池)有用么? 我们进行验证一下 首先我们写一个加载图片的方法,保证会真正用到真实的IMP内存func loadBigData(string: String?) {if let path Bundle.main.path(forResource: "big", ofType: "png") {for…