使用分位数回归检测异常值
这个例子展示了如何使用分位数随机森林检测异常值。的条件分布,分位数随机森林可以检测离群值
鉴于
.但是,该方法不能检测到预测数据中的异常值。有关使用一袋决策树在预测器数据中的异常值检测,请参见OutlierMeasure
的属性TreeBagger
模型。
一个离群值距离数据集中大多数其他观测值足够远的观测值,可以认为是异常观测值。产生外围观测值的原因包括固有的可变性或测量误差。异常值显著影响估计和推断,因此检测它们并决定是否删除它们或考虑稳健分析是很重要的。
统计和机器学习工具箱™提供了几个功能来检测异常值,包括:
此外,MATLAB®提供isoutlier
函数,用于查找数据中的异常值。
为了演示异常值检测,以下示例:
从具有异方差的非线性模型中生成数据,并模拟一些异常值。
生长一个由回归树组成的分位数随机森林。
估计条件四分位数( , , )和四分位范围( )在预测变量的范围内。
将观测值与栅栏,这是数量 而且 .任何小于 或者大于 是一个异常值。
生成数据
从模型中生成500个观测值
是均匀分布在0和 , .将数据存储在表中。
N = 500;rng (“默认”);%用于再现性T = randsample(linspace(0,4*pi,1e6),n,true)';= randn(n,1).*√((t+0.01));Y = 10 + 3*t + t *sin(2*t) +;Tbl = table(t,y);
将5个观测值沿随机垂直方向移动响应值的90%。
numOut = 5;[~,idx] = datasample(Tbl,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,Tbl,“y”,“方法”,“回归”);
Mdl
是一个TreeBagger
合奏。
预测条件四分位和四分位间范围
使用分位数回归,估计50个等间距值的条件四分位数t
.
Tau = [0.25 0.5 0.75];predT = linspace(0,4*pi,50)';quartiles = quantilePredict(Mdl,predT,分位数的,τ);
四分位数
是一个500 × 3的条件四分位数矩阵。行对应于t
的概率,列对应τ
.
在数据的散点图上,绘制条件均值和中值响应。
meanY = predict(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”,“₂”,“位置”,“西北”);轴紧标题(“用分位数回归检测异常值”)举行从
所有模拟的异常值都落在外面 ,一些观测值也在这个区间之外。