基于MATLAB的孤立森林异常检测
时间: 2025-04-25 19:36:20 浏览: 39
### MATLAB 中孤立森林异常检测实现方法
#### 准备工作
在开始之前,确保已安装并配置好MATLAB环境。如果打算使用特定工具箱或函数库,则需确认这些组件也已经就绪。
#### 数据导入与预处理
为了执行异常检测任务,首先需要加载待分析的数据集。这里提供了一个简单的例子用于说明如何读取Excel文件中的表格数据作为输入:
```matlab
% 清除现有变量和关闭所有图形窗口
clc;
clear;
close all;
%% 导入数据(可以根据自己的需要更改数据)
% 假设 Excel 文件名为 'data.xlsx' 并位于当前目录下,
% 表格内含有多列特征值构成的观测记录。
result = readmatrix('data.xlsx');
```
此部分代码会清除命令行窗口、清空工作区内的所有变量以及关闭任何打开的绘图窗口;接着利用`readmatrix()`函数从指定路径下的`.xlsx`文档里提取数值型矩阵形式的结果存储到变量`result`中[^3]。
#### 构建孤立森林模型
接下来定义一个创建孤立森林分类器的过程,在这个过程中可以设置一些参数比如树的数量(`numTrees`)等影响最终性能的因素:
```matlab
function iForestModel = buildIForest(data, numTrees)
% 初始化孤立森林对象数组
trees = cell(1,numTrees);
for t=1:numTrees
% 随机抽样训练样本子集
sampleIdxs = randsample(size(data, 1), floor(sqrt(numel(data))), true);
% 训练单棵孤立树
treeObj = TreeBagger(...
1,... % 只生长一棵决策树
data(sampleIdxs,:), ... % 使用采样的数据点集合
'Method', 'classification',...
'OOBPrediction','off',...
'NumPredictorsToSample','all');
% 将生成好的树存放到单元阵列之中
trees{t} = treeObj;
end
% 返回完整的孤立森林结构体
iForestModel.Trees = trees;
end
```
上述自定义函数接受原始多维空间坐标系表示法下的实例集及其规模大小两个参数,并返回包含若干棵独立成长起来的二叉判定树组成的列表。每棵树都是通过对整个群体采取有放回重抽样的方式获得的小批量无标签个体来进行拟合得到的[^1]。
#### 执行预测操作
当准备好合适的估计装置之后就可以着手计算各个测试案例落在哪一类上了——即正常还是离群点?下面给出一段示范性质较强的脚本片段用来完成这项使命:
```matlab
function scores = predictAnomalies(iForestModel, testData)
nSamples = size(testData, 1); % 获取样本数量
avgPathLengths = zeros(nSamples, 1);% 初始化平均路径长度向量
for s=1:nSamples % 对每一个新来的客源做单独考量
pathLensPerTree = arrayfun(@(tree) ...
getPathLength(tree, testData(s,:)), ...
iForestModel.Trees);
avgPathLengths(s) = mean(pathLensPerTree);
end
% 转换成异常得分:越低越好
c = 2 ^ (-avgPathLengths / pi * sqrt(prod(size(testData, 2))));
[~, idx] = sort(c,'ascend'); % 排序获取最可疑的对象索引号
scores(idx) = (1:numel(idx)).'; % 给定相对应的位置编号形成评分体系
end
```
这段逻辑的核心在于遍历给定的一组未知类别归属的目标实体,针对它们分别调用辅助功能`getPathLength()`测定沿各条分支抵达叶节点所经历过的边数总和再求均值得出综合评价指标c。最后按照升序排列并将位置映射成直观易懂的形式输出即可。
#### 结果展示
为了让使用者能够更加清晰地理解所得结论的意义所在,不妨借助可视化手段呈现出来。例如绘制散点图标记不同颜色区分两类成员或者画直方图统计频次分布情况等等。
```matlab
figure();
scatter(result(:,1), result(:,2), [], scores, '.')
title('Isolation Forest Anomaly Detection Results')
xlabel('Feature 1')
ylabel('Feature 2')
colorbar()
grid on
```
该段代码将会在一个新的图表上显示二维平面上散布着代表原始资料集中各项属性组合而成的几何形状的同时附带有一个色彩渐变条指示偏离程度的不同等级范围。
阅读全文
相关推荐


















