此示例显示了如何检测使用Smastile随机林的异常值。分位式随机森林可以检测关于条件分布的异常值
给予
。但是,此方法无法检测到预测器数据中的异常值。对于使用一袋决策树的预测器数据中的异常检测,请参阅概要
A的财产treebagger
模型。
一个异常值是一种观察到,其远离数据集中的大多数其他观察,并且可以被认为是异常的。外围观测的原因包括固有的变异性或测量误差。异常值重大影响估计和推理,因此重要的是要检测它们并决定是否删除它们或考虑稳健的分析。
统计和机器学习工具箱™提供了多种函数来检测异常值,包括:
此外,Matlab®提供了isoullier.
功能,找到数据中的异常值。
为了展示异常检测,这个例子:
从具有异源性的非线性模型生成数据,并模拟几个异常值。
生长一个分量的回归树木森林。
估计有条件的四分位数( 那 , 和 )和四分位数范围( )在预测器变量的范围内。
比较了对的观察栅栏,这是数量 和 。任何少于的观察 或者大于 是一个异常值。
从模型生成500个观察
均匀分布在0和 , 和 。将数据存储在表中。
n = 500;RNG('默认');重复性的%t = randsample(Linspace(0,4 * pi,1e6),n,true)';epsilon = randn(n,1)。* sqrt((t + 0.01));y = 10 + 3 * t + t。* sin(2 * t)+ epsilon;tbl =表(t,y);
在随机垂直方向上移动五个观察,响应的值为90%。
numout = 5;[〜,IDX] = DataSample(TBL,NUMOUT);tbl.y(idx)= tbl.y(idx)+ randsample([ - 1 1],numout,true)'。*(0.9 * tbl.y(idx));
绘制数据的散点图并识别异常值。
数字;绘图(tbl.t,tbl.y,'。');抓住上绘图(tbl.t(idx),tbl.y(idx),'*');轴紧的;ylabel('是');Xlabel('T');标题('散打数据');传奇('数据'那'模拟异常值'那'地点'那'西北');
使用一袋200个回归树treebagger
。
mdl = treebagger(200,Tbl,'是'那'方法'那'回归');
MDL.
是A.treebagger
合奏。
使用量化回归,估计在范围内的50个等间隔值的条件四分位数T.
。
tau = [0.25 0.5 0.75];predt = linspace(0,4 * pi,50)';quartiles = smileilepredict(mdl,predt,'standile',tau);
四分位数
是一个500×3条件四分位数的矩阵。行对应于观察结果T.
,列对应于概率TAU
。
在数据的散点图上,绘制条件均值和中位反应。
意思=预测(MDL,Predt);图(predt,[四分位数(:,2)是表示的,'行宽',2);传奇('数据'那'模拟异常值'那'中位回归'那'意思是回应'那......'地点'那'西北');抓住离开;
虽然有条件的均值和中值曲线接近,但模拟的异常值可能会影响平均曲线。
计算条件 那 , 和 。
IQR =四分位数(:,3) - 四分位数(:,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_1'那'f_2'那'地点'那'西北');轴紧的标题(“使用量级回归的异常检测”) 抓住离开
所有模拟的异常值都落在外面 ,一些观察结果也在这个间隔之外。