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

线性回归

定义

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

要素

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

场景

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

实例

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.rhkb.cn/news/291772.html

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

相关文章

什么是防火墙,部署防火墙有什么好处?

与我们的房屋没有围墙或界限墙一样,没有防护措施的计算机和网络将容易受到黑客的入侵,这将使我们的网络处于巨大的风险之中。因此,就像围墙保护我们的房屋一样,虚拟墙也可以保护和安全我们的设备,使入侵者无法轻易进入…

API成网络攻击常见载体,如何确保API安全?

根据Imperva发布的《2024年API安全状况报告》,API成为网络攻击者的常见载体,这是因为大部分互联网流量(71%)都是API调用,API是访问敏感数据的直接途径。根据安全公司Fastly的一项调查显示,95%的企业在过去1…

送朋友的生日祝福静态页面代码!(小白也能轻松GET!)

Hey亲爱的小白们!👋 知道你们想给朋友一个独特又有心的生日祝福,却苦于没有编程基础吗?别担心,来白嫖!🎁 🚀【生日祝福静态页面代码】来啦!只需简单几步,就能…

python--os和os.path模块

>>> import os >>> #curdir #获取当前脚本的绝对路径 >>> os.curdir . >>> import os.path >>> #获取绝对路径 >>> os.path.abspath(os.curdir) C:\\Users\\GUOGUO>>> #chdir #修改当前目录 >&g…

springboot上

springboot spring概述 https://spring.io 特点 springboot主要特性 依赖管理 场景starter 自动配置 默认包和扫描路径 自定义包扫描路径 spring配置介绍 yml书写 常用注解介绍

【第三方登录】Twitter

创建应用 APPID 和 相关回调配置 重新设置api key 和 api secret 设置回调和网址 还有 APP的类型 拿到ClientID 和 Client Secret 源码实现 获取Twitter 的登录地址 public function twitterUrl() {global $db,$request,$comId;require "inc/twitter_client/twitte…

线程安全(二)--死锁

TOC 一:什么是死锁??? public class Demo1 {public static void main(String[] args) {Object lockernew Object();Thread threadnew Thread(()->{synchronized(locker){synchronized (locker){System.out.println("hello thread");}}});thread.start();} }上…

深度学习入门简单实现一个神经网络

实现一个三层神经网络 引言测试数据 代码 引言 今天我们实现一个简单的神经网络 俩个输入神经元 隐藏层两个神经元 一个输出神经元 激活函数我们使用sigmoid 优化方法使用梯度下降 我们前期准备是需要把这些神经元的关系理清楚 x1:第一个输入 x2:第二个…

python中pow()函数的使用

在Python中,pow() 函数用于计算指定数字的幂。它的语法如下: pow(x, y) 这个函数返回 x 的 y 次方。相当于 x**y。 pow() 函数也可以接受一个可选的第三个参数,用于指定一个取模值,即计算结果与该模值的余数。其语法如下&#…

JSQLParserException异常

前言 SQL中加入了租户字段&#xff0c;报这个错&#xff0c;可以查出数据&#xff0c;但是不多&#xff1b;SQL检查无问题 解决 原因一 引入新的SQL解析器检查解析SQL&#xff0c;与mybatis多租户无关 参考 <!--jsqlparser版本太低也无法解析&#xff0c;如2.0--> &…

java Web洗衣店管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 洗衣店管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使用…

Pillow教程05:NumPy数组和PIL图像的相互转化

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

集合(ArrayList,HashMap,HashSet)详解+ entrySet的应用

集合 例题引入——直线题意分析根据下面的参考代码&#xff0c;自己模仿的参考代码&#xff08;加一点点我的小tips&#xff09; 1.java集合引入2.为什么要使用集合&#xff1f;3.List、Set、Queue和Map的区别4.ListList——ArrayList&#xff08;&#xff01;&#xff01;实用…

24Compact模式启动

Compact模式启动 compact,是压缩的意思.顾名思义,这是一种压缩启动技术. Compact启动模式比wimboot出现得还要晚,是微软在Windows10中才引入的一种启动模式.相比于普通启动和wimboot,compact启动有以下几个优点: 1.减少占用C盘空间:compact把系统文件在C盘内直接进行压缩,从而达…

基于springboot的船舶维保管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Java反序列化JDK动态代理的关系

Java代理模式 为什么要学习代理模式&#xff1f;了解开发原理&#xff0c;才能明白漏洞的产生。这不仅仅是SpringAOP的底层&#xff01; [SpringAOP 和 SpringMVC] 代理模式的分类&#xff1a; 静态代理动态代理 静态代理 角色分析&#xff1a; 抽象角色&#xff1a;一般会…

ElasticSearch、java的四大内置函数式接口、Stream流、parallelStream背后的技术、Optional类

第四周笔记 一、ElasticSearch 1.安装 apt-get install lrzsz adduser -m es 创建用户组&#xff1a; useradd *-m* xiaoming(用户名) *PS&#xff1a;追加参数-m* passwd xiaoming(用户名) passwd xiaoming 输入新的 UNIX 密码&#xff1a; 重新输入新的 UNIX 密码&…

帆软报表踩坑日记

最近公司项目要是使用报表&#xff0c;公司使用的是帆软这个国产软件&#xff0c;自己也是学习使用&#xff0c;在使用的过程中记一下问题以及解决方式 公司使用的是帆软8这个版本&#xff0c;比较老了。 首先是表格中的扩展&#xff0c;就是当我们根据数据库查询数据然后放到表…

Redis入门三(主从复制、Redis哨兵、Redis集群、缓存更新策略、缓存穿透、缓存击穿、缓存雪崩)

文章目录 一、主从复制1.单例redis存在的问题2.主从复制是什么&#xff1f;3.主从复制的原理4.主从搭建1&#xff09;准备工作2&#xff09;方式一3&#xff09;方式二 5.python中操作1&#xff09;原生操作2&#xff09;Django的缓存操作 二、Redis哨兵&#xff08;Redis-Sent…

Nginx负载均衡 ,6种常用方式。(新手必看)

nginx的负载均衡策略有六种&#xff1a; 1、轮询&#xff08;默认策略&#xff0c;nginx自带策略&#xff09;&#xff1a;我上面的例子就是轮询的方式&#xff0c;它是upstream模块默认的负载均衡默认策略。会将每个请求按时间顺序分配到不同的后端服务器。 http {upstream …