图解机器学习第四部分第十二章——局部异常因子检测

在这里插入图片描述

n=100;
x=[(rand(n/2,2)-0.5)*20;randn(n/2,2)];
x(n,1)=14;
k=3;
% 计算每一个点的可达距离
x2=sum(x.^2,2);
[s,t]=sort(sqrt(repmat(x2,1,n)+repmat(x2',n,1)-2*x*x'),2); 

for i=1:k+1
    for j=1:k
        RD(:,j)=max(s(t(t(:,i),j+1),k),s(t(:,i),j+1));
    end
    LRD(:,i)=1./mean(RD,2);
end
LOF=mean(LRD(:,2:k+1),2)./LRD(:,1);

figure(1);
clf;
hold on
plot(x(:,1),x(:,2),'rx');
for i=1:n
    plot(x(i,1),x(i,2),'bo','MarkerSize',LOF(i)*10);
end
首先,代码中给定了数据的数量 n,并生成了一个二维数据集 x。数据集 x 包含了随机生成的两组数据,一组通过在 [-10, 10] 范围内生成随机数,并缩放到 [-0.5, 0.5] 范围内,另一组使用标准正态分布生成的随机数。最后,将第 n 个样本的第一个特征设置为 14,引入一个局部异常值。

接下来,代码中定义了一个参数 k,表示距离样本 x 第 k 近的样本。在这里,k 被设置为 3。

代码的下一部分是计算每个样本点的可达距离(Reachability Distance)。它通过计算样本点之间的欧几里德距离来实现。首先,计算每个样本点的平方和 x2,然后使用 repmat 函数将 x2 扩展为 n×n 的矩阵,并通过简单的矩阵操作计算样本点之间的欧几里德距离存储在矩阵 s 中。排序操作 t=sort(...) 用于获取每个样本点与其他样本点之间的距离从小到大的排列顺序。

接下来的循环用于计算局部可达密度(Local Reachability Density,LRD)。对于每个样本点,计算距离它第 k 近的样本点,并记录这些样本点的距离作为 RD(Reachability Distance)。然后,通过计算 RD 的均值的倒数得到局部可达密度 LRD。

最后,计算局部异常因子 LOF。LOF 是通过将每个样本点的局部可达密度与其 k 个最近邻的平均局部可达密度进行比较得到的。LOF 值越大,表示样本点越异常。

代码的最后部分用于可视化结果。它绘制了原始数据点(红色 x)和根据 LOF 值对每个数据点进行标记(蓝色圆圈大小表示 LOF 值的大小)。

注意:

i:代表外层循环中的迭代次数,用于迭代计算每个样本点的局部可达密度(LRD)和局部异常因子(LOF)。它的取值范围是从 1 到 k+1j:代表内层循环中的迭代次数,用于迭代计算每个样本点的可达距离(RD)。它的取值范围是从 1 到 k。

在代码的内层循环中,变量 j 控制着计算每个样本点的可达距离 RD 的迭代次数。在外层循环中,变量 i 控制着计算局部可达密度 LRD 和局部异常因子 LOF 的迭代次数。


在该代码中,表达式 s(t(t(:,i),j+1),k) 用于获取距离样本点 x 第 k 近的样本的距离值。让我们逐步解释这个表达式:

t(:, i):表示 t 矩阵的第 i 列,即表示第 i 个样本点与其他样本点之间的距离从小到大的排列顺序。

t(t(:, i), j+1):这里使用 t(:, i) 表示的排列顺序,再通过索引 j+1 获取距离样本点 x 第 j+1 近的样本在排列顺序中的索引。

s(t(t(:, i), j+1), k):通过将上一步得到的索引应用于矩阵 s,我们可以获取距离样本点 x 第 k 近的样本的距离值。这里 s(t(t(:, i), j+1), k) 表示矩阵 s 中第 t(t(:, i), j+1) 行、第 k 列的元素。

综合来说,该表达式用于获取距离样本点 x 第 k 近的样本的距离值,其中 t 矩阵用于存储样本点之间的距离从小到大的排列顺序,s 矩阵存储了样本点之间的欧几里德距离。



在该代码中,s(t(:, i), j+1) 表达式用于获取样本点 x 的第 i 个最近邻样本(基于距离排序)的第 j+1 近的距离值。让我们逐步解释这个表达式:

t(:, i):表示矩阵 t 的第 i 列,即表示样本点 x 与其他样本点之间的距离从小到大的排列顺序。

s(t(:, i), j+1):使用 t(:, i) 表示的排列顺序,并通过索引 j+1 获取第 j+1 近的样本的距离值。
具体而言,s(t(:, i), j+1) 表示矩阵 s 中第 t(:, i) 行的第 j+1 个元素,即样本点 x 的第 i 个最近邻样本的第 j+1 近的距离值。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值