Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 概率/频率分布中的离群点检测_Matlab_Probability_Outliers_Probability Theory_Frequency Distribution - Fatal编程技术网

Matlab 概率/频率分布中的离群点检测

Matlab 概率/频率分布中的离群点检测,matlab,probability,outliers,probability-theory,frequency-distribution,Matlab,Probability,Outliers,Probability Theory,Frequency Distribution,我有以下二维数据集。(X和Y)都是连续的随机变量 Z=(X,y)={(1,7)、(2,15)、(3,24)、(4,25)、(5,29)、(6,32)、(7,34)、(8,35)、(9,27)、(10,39)} 我想检测关于y变量值的异常值。y变量的正常范围为10-35。因此,上述数据集中的第一对和最后一对是异常值,而其他对是正常值。我想将变量z=(x,y)转换为异常值(第一对和最后一对)位于标准偏差1之外的概率/频率分布。有人能帮我解决这个问题吗 PS:我尝试过不同的距离,如欧氏距离和马氏距离,

我有以下二维数据集。(X和Y)都是连续的随机变量

Z=(X,y)={(1,7)、(2,15)、(3,24)、(4,25)、(5,29)、(6,32)、(7,34)、(8,35)、(9,27)、(10,39)}

我想检测关于y变量值的异常值。y变量的正常范围为10-35。因此,上述数据集中的第一对和最后一对是异常值,而其他对是正常值。我想将变量z=(x,y)转换为异常值(第一对和最后一对)位于标准偏差1之外的概率/频率分布。有人能帮我解决这个问题吗


PS:我尝试过不同的距离,如欧氏距离和马氏距离,但它们都不起作用。

我不确定你的最终目标是什么,但我假设你在nx2矩阵中格式化你的x,y变量,所以z=[x,y]其中x:=nx1和y:=nx1向量

所以你要问的是一种方法来分离y在10-35范围之外的数据点?为此,您可以使用条件语句查找出现这种情况的索引:

index = z(:,2) <= 35 & z(:,2) >= 10;  %This gives vector of 0's & 1's length nx1
z_inliers = z(index,:);      %This has a [x,y] matrix of only inlier data points
z_outliers = z(~index,:);    %This has a [x,y] matrix of outlier data points
index=z(:,2)=10;%这给出了长度为0和1的向量nx1
z_inliers=z(索引:);%这有一个只包含内部数据点的[x,y]矩阵
z_异常值=z(~索引:);%这有一个异常数据点的[x,y]矩阵
如果您想根据标准偏差来执行此操作,请执行以下操作,而不是10和35:

low_range = mean(z(:,2)) - std(z(:,2));
high_range = mean(z(:,2)) + std(z(:,2));
index = y <= high_range & y >= low_range;
low_范围=平均值(z(:,2))-std(z(:,2));
高_范围=平均值(z(:,2))+std(z(:,2));
指数=y=低_范围;

然后,您可以用这些点绘制pdf或任何东西。

第二种方法更接近我需要的,但如果我更改Y变量的一个值,它会导致低量程和高量程变量的值发生更改,从而给出错误的最终结果。我需要更稳定的方法,通过这种方法,即使Y变量中的值发生变化,我也可以区分内部变量和异常值。一个标准偏差是基于数据集的相对值,因此您必须决定从哪个数据集定义“异常值”。如果您想要有一个定义离群值的整体数据集合,您需要首先定义low_范围和high_范围并存储这些值,然后您可以修改y值,或者创建一个新的y值向量,该向量仅为内联向量,如上所示。如果内存空间不是一个问题,我建议只保存两个不同的y集:一个是完全定义离群值范围的y集,另一个是过滤离群值的y集。在我的例子中,内存肯定是一个问题。第二和第三个标准差呢?我猜它们取决于第一个偏差。因此,它们实际上也依赖于数据集。所以,我的问题是,在这种情况下,如何对系统进行培训和测试?最好的方法是什么?