首页 > 编程语言 >异常值检测:SOS算法(Stochastic Outlier Selection Algorithm)MATLAB代码

异常值检测:SOS算法(Stochastic Outlier Selection Algorithm)MATLAB代码

时间:2024-11-17 23:43:02浏览次数:3  
标签:Selection Algorithm 阈值 Outlier data 矩阵 中位数 数据 异常

SOS算法(Stochastic Outlier Selection Algorithm)是由Jeroen Janssens提出的一种无监督异常检测算法。该算法通过计算数据点之间的关联度(affinity)来识别异常点。核心思想是,如果一个点与其他所有点的关联度都很低,那么它被视为异常点。以下是该算法的详细公式和步骤:

其MATLAB代码如下:

用于导入 data.xlsx 文件,使用除最后一列外的特征矩阵来检测并删除异常值,并将清理后的数据保存为新的 Excel 文件 cleaned_data.xlsx

% 导入数据
data = readmatrix('data.xlsx');

% 提取特征矩阵(除去最后一列)
features = data(:, 1:end-1);

% 获取特征矩阵的大小
[n, d] = size(features);

% 初始化异常概率矩阵
P = zeros(n, 1);

% 计算相异度矩阵(欧氏距离矩阵)
D = pdist2(features, features);

% 设置参数(如邻域大小 k 的估计,或标准差)
sigma = zeros(n, 1);

% 确定每个点的自适应尺度参数 sigma_i
for i = 1:n
    % 排除自身计算局部邻域的距离
    D_sorted = sort(D(i, D(i, :) > 0));
    
    % 使用局部邻域(例如第 k 小的距离)来估计 sigma_i
    k = min(10, n-1);  % 选择邻域大小为 10 或点数 - 1
    sigma(i) = D_sorted(k);
end

% 计算关联度矩阵
A = zeros(n, n);
for i = 1:n
    for j = 1:n
        if i ~= j
            A(i, j) = exp(-D(i, j)^2 / (2 * sigma(i)^2));
        end
    end
    % 归一化
    A(i, :) = A(i, :) / sum(A(i, :));
end

% 计算每个点的异常概率
for i = 1:n
    P(i) = exp(-sum(A(i, :)));
end

% 设置异常概率的阈值,例如中位数或自定义值
threshold = median(P);

% 标记并删除异常值
outlierIdx = P < threshold;

% 打印检测到的异常值数量
fprintf('检测到的异常值数量: %d\n', sum(outlierIdx));

% 删除异常值
cleanedData = data(~outlierIdx, :);

% 保存清理后的数据到新的 Excel 文件
writematrix(cleanedData, 'cleaned_data.xlsx');

disp('清理后的数据已保存为 "cleaned_data.xlsx".');

代码说明

  1. pdist2(features, features):计算特征矩阵中所有点之间的欧氏距离矩阵 DDD。
  2. 自适应尺度参数 σi\sigma_iσi​:使用第 kkk 小的距离(局部邻域)来估计 σi\sigma_iσi​。
  3. 关联度矩阵 AAA:通过高斯函数计算,确保每行总和为 1。
  4. 异常概率 PPP:计算每个数据点的异常性,并以此来标记和删除异常值。

调整建议

  • 邻域大小 kkk:可以根据数据集的大小进行调整。
  • 阈值选择:可以使用自定义阈值来标记异常点。

此代码运行后,MATLAB 会生成一个新的 Excel 文件 cleaned_data.xlsx,其中包含删除异常值后的数据。

在 SOS 算法中,异常概率 PPP 用于量化每个数据点的异常性。为了识别和删除异常值,我们需要设置一个阈值,将高于或低于该阈值的点标记为异常。这里的解释涉及如何选择和理解该阈值:

1. 中位数作为阈值

  • 中位数是将数据点的异常概率排序后位于中间的值,即分布的 50% 分位点。
  • 直觉:如果使用中位数作为阈值,则大约一半的数据点的异常概率会低于中位数,一半会高于中位数。这样可以用来分辨数据中较不常见的点,但不会过于严格。

示例解释

  • 如果 PPP 中包含大部分接近于正常值的数据点,但有一些点的概率显著低(或高),将中位数作为阈值能很好地识别这些异常点。

2. 自定义阈值

  • 自定义值意味着用户根据特定需求选择一个固定的阈值,如 0.1 或 0.05。
  • 直觉:当用户对数据有一定了解时,可以基于经验或具体问题设置阈值。例如,若想只标记 5% 的数据为异常值,可以选用概率分布中的 95% 分位点。

示例解释

  • 如果你想更严格地标记异常值,可以选择更低的阈值,如在下 5% 的异常概率时标记点为异常值。

阈值的作用和影响

  • 高阈值:标记较少的数据点为异常,保留大部分数据。
  • 低阈值:标记更多的数据点为异常,数据可能被过度清洗。
  • 中位数阈值:平衡的选择,不会过于严格或宽松。

代码中的实现

在代码中,使用中位数作为阈值示例如下:

threshold = median(P);
outlierIdx = P < threshold;  % 标记低于中位数的点为异常值

使用自定义值,可以手动设置:

threshold = 0.05;  % 自定义阈值
outlierIdx = P < threshold;  % 标记低于自定义值的点为异常值

标签:Selection,Algorithm,阈值,Outlier,data,矩阵,中位数,数据,异常
From: https://blog.csdn.net/subject625Ruben/article/details/143825581

相关文章

  • cmu15545笔记-Join算法(Join Algorithms)
    目录OverviewNestedLoopJoinNaïveBlockIndexSort-MergeJoinHashJoinSimpleHashJoinPartitionHashJoin总结Overview输出形式:早物化与晚物化(OLAP一般都是晚物化)代价分析:一般用IO次数计算(最终结果可能落盘,也可能不落盘,所以我们只计算输出结果之前的IO次数)。Join左边称为......
  • leetcode 数组专题 06-扫描线算法(Sweep Line Algorithm)
    扫描线专题leetcode数组专题06-扫描线算法(SweepLineAlgorithm)leetcode数组专题06-leetcode.218the-skyline-problem力扣.218天际线问题leetcode数组专题06-leetcode.252meetingroom力扣.252会议室leetcode数组专题06-leetcode.253meetingroomii力扣.253......
  • cmu15545笔记-排序和聚合算法(Sorting&Aggregation Algorithms)
    目录概述排序堆排序外部归并排序使用索引聚合操作排序聚合哈希聚合概述本节和下一节讨论具体的操作算子,包括排序,聚合,Join等。排序为什么需要排序操作:关系型数据库是无序的,但是使用时往往需要顺序数据(OrderedBy,GroupBy,Distinct)。主要矛盾:磁盘很大:要排序的数据集很大,内......
  • # issue 2 选择排序(Selection Sort)
    目录一、SelectionSort的基本思路二、SelectionSort的各个复杂度三、SelectionSort的实现四、实验结果(输出结果)一、SelectionSort的基本思路通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小(最大)的记录,并和第i(1<=i<=n)个记录交换嗯,说人话就是例如从......
  • 2024年最新优化算法:海市蜃楼算法(Fata Morgana Algorithm ,FATA)介绍
    海市蜃楼算法(FataMorganaAlgorithm,FATA)是2024年提出一种新型的群体智能优化算法,它的设计灵感来源于自然现象中的海市蜃楼形成过程。FATA算法通过模仿光线在不均匀介质中的传播方式,提出了两种核心策略——海市蜃楼光过滤原则(MLF)和光传播策略(LPS)——来优化搜索过程,增强算法......
  • Recursive Algorithm for Sliding Signal Processing
    目录概滑动窗口上的快速算法Farhang-BoroujenyB.andGazorS.Generalizedslidingfftanditsapplicationtoimplementationofblocklmsadaptivefilters.TSP,1994JacobsenE.andLyonsR.TheslidingDFT.SPM,2003.JacobsenE.andLyonsR.Anupdateto......
  • 第四届算法、微芯片与网络应用国际会议(AMNA 2025) 2025 4th International Conference
    重要信息官网:https://ais.cn/u/vEbMBz......
  • FFmpeg Stream selection
    ffmpegprovidesthe-mapoptionformanualcontrolofstreamselectionineachoutputfile.Userscanskip-mapandletffmpegperformautomaticstreamselectionasdescribedbelow.The-vn/-an/-sn/-dnoptionscanbeusedtoskipinclusionofvideo,......
  • 论文翻译 | Teaching Algorithmic Reasoning via In-context Learning
    摘要        大型语言模型(LLMs)通过扩大模型和数据规模,展现了不断增强的上下文学习能力。尽管取得了这一进展,LLMs仍然无法解决算法推理问题。尽管在提供最终答案的同时给出解释促进了在多步骤推理问题上的进一步改进,但Anil等人(2022年)指出,即使是简单的算法推理任务,比如......
  • c++ Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) Algorith
            对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所有......