信号检测理论(Signal Detection Theory, SDT)
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。
一、基础概念:
在信号检测理论的模拟中,通常会涉及以下几个关键概念:
信号(Signal):需要被检测或识别的刺激或信息。
噪声(Noise):干扰信号检测的背景或无关信息。
决策标准(Decision Criterion):用于判断信号是否存在的阈值或标准。
击中(Hit):当信号实际存在且被正确检测到时的情况。
漏报(Miss):当信号实际存在但未被检测到时的情况。
虚报(False Alarm):当信号实际上不存在但被错误地检测为存在时的情况。
正确否定(Correct Rejection):当信号实际上不存在且被正确地判断为不存在时的情况。

二、统计决策理论:
(1)两个分布的重叠程度决定了被试对信号和噪音的辨别力(感受性)

d ′ d' d′被称为辨别力指数(灵敏度)。可以有两个分布的均值差来决定。
重叠越多,辨别力指数越小,辨别力越弱。
重叠越少,辨别力指数越大,辨别力越强。
特别地, d ′ = 0 d'=0 d′=0,均值相同,完全重叠(不一定重合),无法辨别。
(2)被试的决策标准决定了其反应倾向:
定义 C C C:决策标准
C的右边判断为“有”,左边判断为“无”
定义 β β β:似然比,可由 Y (击中) Y (虚报) \frac{Y(击中)}{Y(虚报)} Y(虚报)Y(击中)得到,一般给出β后,即可通过计算来确定C的位置(大小)。
β > 1 β>1 β>1 :严格——被试的判断倾向于“无”
β = 1 β=1 β=1 :中等——被试的判断“均等”
β < 1 β<1 β<1 :宽松——被试的判断倾向于“有”

(3)ROC曲线
一般也叫等感受曲线,有以下几个特点:
[1]击中率和虚报率呈正相关关系,C增大,二者同时减小;C减小,标准变松,二者同时增大。
[2]击中率不等于虚报率
- 存在3中极端情况:
(1)击中率=0:C趋近于正无穷
(2)击中率=1,C趋近于负无穷
(3) d ′ = 0 d'=0 d′=0:曲线完全重叠,均值相同
这三种情况意义不大
[3]越往左下,反应标准越严, β β β越大,C越大
[4] d ′ d' d′越大,曲线区分度越大

三、示例:
下面是一个示例(Julia文件):
1)
Let’s simulate 2 signal distributions, plot them, and compute d’ and the probabilities of the four outcomes with a specific criterion
using Distributions
using PlotlyJS# --- Signal Detection Theory Simulation --- 信号检测理论(Signal Detection Theory, SDT)# 1. Parameters
dPrime = 1.5 # Sensitivity (d'),灵敏度(判别力指数)
criterion = 0.8 # Response criterion,判断标准# 2. Distributions
dist_noise = Normal(0, 1) # Noise distribution 噪声分布
dist_signal = Normal(dPrime, 1) # Signal + noise distribution 信号+噪声分布# 3. Generate trials
nTrials = 1000
signalPresent = rand(Bernoulli(0.5), nTrials) # 生成一个布尔数组,每个元素表示一次试验中信号是否出现,50% signal presence
stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)# 4. Apply criterion
responses = stimuli .> criterion # 生成一个布尔值数组responses,大于criterion的为true,否则为false
# 5. Calculate outcomes
hits = sum(responses[signalPresent]) # 击中
misses = sum(.!responses[signalPresent]) # 漏报
falseAlarms = sum(responses[.!signalPresent]) # 虚报
correctRejections = sum(.!responses[.!signalPresent]) # 正确否定# --- Visualization with PlotlyJS ---# Generate data for histograms
noise_data = rand(dist_noise, 10000)
signal_data = rand(dist_signal, 10000)
y = max
# Create the histogram traces
noise_trace = PlotlyJS.histogram(x=noise_data, name="Noise", opacity=0.5)
signal_trace = PlotlyJS.histogram(x=signal_data, name="Signal + Noise", opacity=0.5)# Create the criterion line trace,画判断标准线
criterion_trace = PlotlyJS.scatter(x=[criterion, criterion], y=[0, 600],mode="lines",name="Criterion",line=attr(color="red", dash="dash")
)# Create the plot
plt = PlotlyJS.plot([noise_trace, signal_trace, criterion_trace],Layout(xaxis_title="Internal Response",yaxis_title="Frequency",title="Signal Detection Theory Demonstration",barmode="overlay")
)# Display the plot
display(plt)# Display results
println("d': ", dPrime)
println("Criterion: ", criterion)
println("Hits: ", hits, " (", round(hits / sum(signalPresent) * 100, digits=2), "%)")
println("Misses: ", misses, " (", round(misses / sum(signalPresent) * 100, digits=2), "%)")
println("False Alarms: ", falseAlarms, " (", round(falseAlarms / sum(.!signalPresent) * 100, digits=2), "%)")
println("Correct Rejections: ", correctRejections, " (", round(correctRejections / sum(.!signalPresent) * 100, digits=2), "%)")
画出分布图像:

上图红色虚线就是C,蓝色分布是噪声,红色是信号。
输出:
d': 1.5
Criterion: 0.8
Hits: 369 (73.95%)
Misses: 130 (26.05%)
False Alarms: 89 (17.76%)
Correct Rejections: 412 (82.24%)
ROC曲线相关:
using Distributions
using PlotlyJS# --- Signal Detection Theory Simulation (Multiple d') --- 多个d'的信号检测理论模拟# 1. Parameters
dPrimes = [0.5, 1.0, 1.5, 2.0] # Range of sensitivities
criteria = range(-3, 3, length=100) # Range of criteria for ROC ,C变化范围# 2. Distributions
dist_noise = Normal(0, 1) # Noise distribution 噪声分布# --- ROC Analysis and Visualization ---
# 准备一个ROC曲线图的布局,为后续添加具体的ROC曲线数据做准备。
plt = PlotlyJS.plot(Layout(xaxis_title="False Alarm Rate",yaxis_title="Hit Rate",title="ROC Curves for Different d'",xaxis_range=[0, 1],yaxis_range=[0, 1],xaxis_constrain="domain", # Ensure the x-axis stays within the plot areayaxis=attr(scaleanchor="x", # Link y-axis scaling to x-axisscaleratio=1), # Maintain 1:1 aspect ratio))# Add diagonal reference line
PlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=[0, 1], y=[0, 1], mode="lines", line=attr(color="gray", dash="dash"), name="Chance Level"))for dPrime in dPrimes# 根据不同的d'生成不同的信号分布。因为噪声分布固定,所以d'的大小决定了信号分布的位置。dist_signal = Normal(dPrime, 1) # Signal + noise distribution 信号+噪声分布# 3. Generate trials (for each d')nTrials = 1000signalPresent = rand(Bernoulli(0.5), nTrials)stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)# 4. ROC CalculationhitRates = zeros(length(criteria))falseAlarmRates = zeros(length(criteria))for (i, criterion) in enumerate(criteria)responses = stimuli .> criterionhits = sum(responses[signalPresent])falseAlarms = sum(responses[.!signalPresent])hitRates[i] = hits / sum(signalPresent)falseAlarmRates[i] = falseAlarms / sum(.!signalPresent)end# 5. Add ROC Curve to PlotPlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=falseAlarmRates, y=hitRates, mode="lines", name="d' = $dPrime"))
end# Display the plot
display(plt)
画出ROC曲线:

可以发现随 d ′ d' d′增大图像越往上
思考:
上面四个率和机器学习中的性能评估指标有相似之处:

相关文章:
信号检测理论(Signal Detection Theory, SDT)
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。 一、基础概念: 在信…...
Flink源码剖析
写在前面 最近一段时间都没有更新博客了,原因有点离谱,在实现flink的两阶段提交的时候,每次执行自定义的notifyCheckpointComplete时候,好像就会停止消费数据,完成notifyComplete后再消费数据;基于上述原因…...
[Python学习日记-39] 闭包是个什么东西?
[Python学习日记-39] 闭包是个什么东西? 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过,当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量,但是在 Python 当中还有一种…...
XSLT 实例:掌握 XML 转换的艺术
XSLT 实例:掌握 XML 转换的艺术 引言 XSLT(可扩展样式表语言转换)是一种强大的工具,用于将 XML(可扩展标记语言)文档转换为其他格式,如 HTML、PDF 或纯文本。在本文中,我们将通过一…...
【C++】第一节:C++入门
1、C关键字 2、命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染&am…...
CSP-S 2021 T1廊桥分配
CSP-S 2021 T1廊桥分配 枚举分配给国内航班和国外航班的廊桥数量,若分配给国内机场 i i i个廊桥,则国外机场就有 n − i n-i n−i个廊桥,在此基础上分别判断两边各能通过多少飞机。用一个小根堆存储飞机离开的时间,枚举到一个飞机…...
项目配置说明
文章目录 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 一、下载 vscode 并安装相应扩展 1.1 下载 vscode vscode 我已经发群里了,或者自己去官网下载也行 1.2 安装扩展 打开…...
linux网络编程实战
前言 之前找工作的之后写了一些网络编程的笔记和代码,然后现在放到csdn上保存一下。有几个版本的,看看就好。就是简单的实现一下服务端和客户端之间的交互的,还没有我之前上linux编程课写的代码复杂。 哦对了,这个网络编程的代码对…...
网络基础 【HTTP】
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:Linux初窥门径⏪ 🚚代码仓库:Linux代码练习🚚 💻操作环境: CentOS 7.6 华为云远程服务器 🌹关注我🫵带你学习更多Linux知识…...
[Linux#61][UDP] port | netstat | udp缓冲区 | stm32
目录 0. 预备知识 1. 端口号的划分范围 2. 认识知名端口号 3. netstat 命令 4. pidof 命令 二.UDP 0.协议的学习思路 1. UDP 协议报文格式 报头与端口映射: 2. UDP 的特点 面向数据报: 3. UDP 的缓冲区 4. UDP 使用注意事项 5. 基于 UDP 的…...
定义类方法的错误总结
struct Renderer {vector<function<void(vector<string>)>> fileDropListeners;// 定义一个方法,它是将一个函数作为输入,callback是形参void print(function<void(float)> callback_func);void onFileDrop(function<void(ve…...
Redis --- 第三讲 --- 通用命令
一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value : key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…...
【Linux】进程间关系与守护进程
超出能力之外的事, 如果永远不去做, 那你就永远无法进步。 --- 乌龟大师 《功夫熊猫》--- 进程间关系与守护进程 1 进程组2 会话3 控制终端4 作业控制5 守护进程 1 进程组 之前我们提到了进程的概念, 其实每一个进程除了有一个进程 ID(P…...
【可视化大屏】将柱状图引入到html页面中
到这里还是用的死数据,先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤,引入echarts.js后需要初始化一个实例对象,所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…...
gm/ID设计方法学习笔记(一)
前言:为什么需要gm/id (一)主流设计方法往往侧重于强反型区(过驱>0.2V),低功耗设计则侧重于弱反型区(<0),但现在缺乏对中反型区的简单和准确的手算模型。 1.对于…...
高度细化的SAGA模式实现:基于Spring Boot与RabbitMQ的跨服务事务
场景与技术栈 场景:电商系统中的订单创建流程,涉及订单服务(Order Service)、库存服务(Inventory Service)、支付服务(Payment Service)。 技术栈: Java 11 Spring Bo…...
Vue工程化开发
Vue工程化开发 一、工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式:基于html / css / js 文件,直接引入核心包,开发 Vue。工程化开发模式:基于构建工具(例如:webpack)的环境中开…...
Ray_Tracing_The_Next_Week下
5image Texture Mapping 图像纹理映射 我们之前虽然在交点信息新增了uv属性,但其实并没有使用,而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值 现在通过uv坐标读取图片,通过std_image库stbi_load(path)…...
ES索引生命周期管理
基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习 快速上手 :定时删除ES索引中的过期数据 1. ILM解决什么问题? ES从6.7版本引入ILM,通过ILM可以解决哪些问题呢? 自动新建…...
Oracle数据库体系结构基础
关于Oracle体系结构 基于Oracle11g体系结构 目标: 了解Oracle体系结构掌握逻辑存储结构掌握物理存储结构熟悉Oracle服务器结构熟悉常用的数据字典 Oracle数据库管理中的重要的三个概念 实例(instance):实例是指一组Oracle后台进程以及在服务器中分配…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
