信号检测理论(Signal Detection Theory, SDT)
创作时间:
作者:
@小白创作中心
信号检测理论(Signal Detection Theory, SDT)
引用
CSDN
1.
https://blog.csdn.net/weixin_73453526/article/details/142716490
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。
一、基础概念
在信号检测理论的模拟中,通常会涉及以下几个关键概念:
- 信号(Signal):需要被检测或识别的刺激或信息。
- 噪声(Noise):干扰信号检测的背景或无关信息。
- 决策标准(Decision Criterion):用于判断信号是否存在的阈值或标准。
- 击中(Hit):当信号实际存在且被正确检测到时的情况。
- 漏报(Miss):当信号实际存在但未被检测到时的情况。
- 虚报(False Alarm):当信号实际上不存在但被错误地检测为存在时的情况。
- 正确否定(Correct Rejection):当信号实际上不存在且被正确地判断为不存在时的情况。
二、统计决策理论
(1)两个分布的重叠程度决定了被试对信号和噪音的辨别力(感受性)
d ′ d'd′被称为辨别力指数(灵敏度)。可以有两个分布的均值差来决定。
- 重叠越多,辨别力指数越小,辨别力越弱。
- 重叠越少,辨别力指数越大,辨别力越强。
- 特别地,d ′ = 0 d'=0d′=0,均值相同,完全重叠(不一定重合),无法辨别。
(2)被试的决策标准决定了其反应倾向:
- 定义C CC:决策标准
- 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'=0d′=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 area
yaxis=attr(scaleanchor="x", # Link y-axis scaling to x-axis
scaleratio=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 = 1000
signalPresent = rand(Bernoulli(0.5), nTrials)
stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)
# 4. ROC Calculation
hitRates = zeros(length(criteria))
falseAlarmRates = zeros(length(criteria))
for (i, criterion) in enumerate(criteria)
responses = stimuli .> criterion
hits = sum(responses[signalPresent])
falseAlarms = sum(responses[.!signalPresent])
hitRates[i] = hits / sum(signalPresent)
falseAlarmRates[i] = falseAlarms / sum(.!signalPresent)
end
# 5. Add ROC Curve to Plot
PlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=falseAlarmRates, y=hitRates, mode="lines", name="d' = $dPrime"))
end
# Display the plot
display(plt)
画出ROC曲线:
可以发现随d ′ d'd′增大图像越往上
思考
上面四个率和机器学习中的性能评估指标有相似之处:
热门推荐
寿命长短,看腿就知道?医生忠告:不要追求筷子腿,粗一些更健康
寿命短的女性,往往都有这5个特征,希望你一个也不占
硅胶贴片:治疗镰刀疤痕的新选择
四川枇杷几月份成熟?
夏季养护必备:6种不怕晒的多肉植物推荐
金枝玉叶养殖全攻略:从繁殖到病虫害防治的详细指南
老年手足皲裂:症状、成因与防治全攻略
为什么冬天的皮肤尤其容易干痒?答案在这里
乐山市育才实验幼儿园:自制糖葫芦乐趣多
小雪节气吃冰糖葫芦,你做对了吗?
当爽爽贵阳遇见古都西安:一场跨越千里的文化对话
西安到贵州自驾游必打卡:黄果树瀑布&西江千户苗寨
《外科风云》:一部揭示医疗行业真相的良心剧
张鹤新作《经典小说课》:文学大师笔下的技艺与人生
儒家大师VS叔本华:谁的人生智慧更胜一筹?
高旭东新作《中国现代文学史》:重新审视近现代文学的起点
从干将莫邪到职场精英:得力干将的古今演变
杜甫陆游教你如何得力
哪吒新剧热映:从叛逆少年到文化符号
2025年国家公务员考试成绩即将公布!查询时间、方式及后续安排全攻略
《哪吒之魔童降世》票房破43亿,你最爱哪个哪吒?
《新神榜:哪吒重生》:当传统神话遇上朋克美学
污水提升泵行业:国内外品牌竞争加剧,智能化成发展趋势
《狮子王》中的刀疤:一个反派角色的深度解读
AI公安系统:智能化助力现代警务工作
二手自行车交易攻略:如何合法安全地买到心仪座驾?
掌握正确骑行姿势,远离慢性疼痛!
寒风凛冽,五大水果助你温暖过冬!
柿子草莓共食考究:安全性与营养搭配优化
6样水果建议家中常买,全身大病“克星”,营养高手