我几乎已经解决了这个问题,但是无论如何尝试,我都无法将值从逻辑转换为数字。
在许多学科中,检测数据集中的异常数字或异常值非常重要,因为异常值会识别出有趣的现象,极端事件或无效的实验结果。一种检查数据值是否离群的简单方法是查看该值是否与数据集的平均值相差很大的标准差。例如,如果是
数据集的平均值在哪里,数据集的标准差是多少,标准差的个数被认为是重要的。
为outlierData
分配userData
中与numberStdDevs
的平均值相差userData
的所有值。提示:使用逻辑索引返回异常数据值。
示例:如果userData
是[9, 50, 51, 49, 100 ]
,而numberStdDevs
是1
,则outlierData是[9, 100]
。
function outlierData = getOutliers(userData, numberStdDevs)
% getOutliers: Return all elements of input array data that are more than
% numStdDevs standard deviations away from the mean.
%
% Inputs: userData - array of input data values
% numberStdDevs - threshold number of standard deviations to
% determine whether a particular data value is an outlier
%
% Outputs: outlierData - array of outlier data values
% Assign dataMean with the mean of userData
dataMean = mean(userData);
% Assign dataStdDev with userData's standard deviation
dataStdDev = std(userData);
% Assign outlierData with Return outliers
outlierData = (abs(userData - dataMean)) > (numberStdDevs * dataStdDev);
end
检查getOutliers([9, 50, 51, 49, 100 ], 1)
是否返回[9, 100]
我得到1 0 0 0 1
检查getOutliers([76, 79, 84, 68, 85, 23, 105, 47, 97, 96, 39], 1)
是否返回[23, 105, 39]
我得到0 0 0 0 0 1 1 0 0 0 1
检查getOutliers([76, 79, 84, 68, 85, 23, 105, 47, 97, 96, 39], 0.5)
是否返回[23, 105, 47, 97, 96, 39]
我得到0 0 0 0 0 1 1 1 1 1 1
答案 0 :(得分:1)
您超级亲密!!!要在MATLAB中使用逻辑索引,只需使用mydata(logicalIndexVector)
即可获取新数据。根据您的情况,您可以修改代码的最后一行。
outlierData = userData((abs(userData - dataMean)) > (numberStdDevs * dataStdDev));
我建议阅读article,并按照本文中的做法进行操作。