这个例子展示了如何使用分位数随机森林检测离群值。分位数随机森林可以检测相对于的条件分布的离群值
鉴于
.然而,该方法不能检测出预测数据中的异常值。对于使用决策树的预测器数据中的离群值检测,请参见OutlierMeasure
财产的TreeBagger
模型。
一个离群值是指在一个数据集中,距离大多数其他观测值足够远的观测值,可以认为是异常的。离群观测的原因包括固有变异性或测量误差。离群值显著影响估计和推断,因此检测它们并决定是否删除它们或考虑稳健分析是很重要的。
Statistics and Machine Learning Toolbox™提供了几个检测异常值的函数,包括:
此外,MATLAB®提供isoutlier
函数,它在数据中查找异常值。
为了演示离群值检测,下面这个例子:
从一个具有异方差的非线性模型生成数据,并模拟一些异常值。
生成回归树的分位数随机森林。
估计条件四分位数( , , )和四分位数区间( )在预测变量的范围内。
将观察结果与栅栏,它们是数量 和 .任何小于 或大于 是一个例外。
从模型生成500个观察结果
是均匀分布在0和 , .将数据存储在表中。
n = 500;rng (“默认”);%的再现性t = randsample (linspace(1 0 4 *πe6), n, true) ';ε= randn (n, 1)。* sqrt ((t + 0.01));Y = 10 + 3*t + t.* sin2 *t +;台=表(t, y);
在随机的垂直方向移动5个观察值,移动90%的响应值。
numOut = 5;[~, idx] = datasample(资源描述,numOut);Tbl.y (idx) = Tbl.y (idx) + randsample ([1], numOut,真)”。* (0.9 * Tbl.y (idx));
绘制数据的散点图并识别离群点。
图;情节(Tbl.t Tbl.y,“。”);持有在情节(Tbl.t (idx) Tbl.y (idx),‘*’);轴紧;ylabel (“y”);包含(“t”);标题(“数据散点图”);传奇(“数据”,“模拟异常值”,“位置”,“西北”);
种植一袋200棵回归树使用TreeBagger
.
Mdl = TreeBagger(200台,“y”,“方法”,“回归”);
Mdl
是一个TreeBagger
合奏。
使用分位数回归,估计范围内50个等间距值的条件四分位数t
.
Tau = [0.25 0.5 0.75];predT = linspace(0, 4 *π,50)';四分位数= quantilePredict (Mdl predT,分位数的,τ);
四分位数
是一个500 × 3的条件四分位数矩阵。行对应于t
,列对应于中的概率τ
.
在数据的散点图上,绘制条件均值和中值响应。
小气鬼=预测(Mdl predT);情节(predT(四分位数(:,2)小气鬼),“线宽”2);传奇(“数据”,“模拟异常值”,“平均响应”,“平均响应”,...“位置”,“西北”);持有从;
虽然条件均值曲线和中值曲线很接近,但模拟的异常值会影响均值曲线。
计算条件 , , .
Iqr = quartiles(:,3) - quartiles(:,1);k = 1.5;F1 =四分位数(:,1)- k*iqr;F2 =四分位数(:,3)+ k*iqr;
k = 1.5
表示所有观测值小于f1
或大于f2
被认为是异常值,但是这个阈值并不能消除极端异常值的歧义。一个k
的3.
确定极端异常值。
把观察结果和栅栏画出来。
图;情节(Tbl.t Tbl.y,“。”);持有在情节(Tbl.t (idx) Tbl.y (idx),‘*’);情节(predT, f1 f2);传奇(“数据”,“模拟异常值”,“f”,“₂”,“位置”,“西北”);轴紧标题(“使用分位数回归检测离群值”)举行从
所有的模拟异常值都落在外面 ,有些观测结果也超出了这个区间。