使用 javascript 从一组数据中删除异常值并使数据保持一致的准确方法是什么?



假设我们有以下一组数据。 2.33, 2.19, 4.7, 2.69, 2.8, 2.12, 3.01, 2.5, 1.98, 2.34

如何通过使用 JavaScript 或任何其他可以在 JavaScript 中实现的数学方法消除异常值,从上面的示例中选择一致的数据?

我采用以下计算方法: 平均值 标准差 最小值(平均值 - 标准开发), 最大值(平均值 + 标准开发)。并考虑了介于最小值和最大值之间的数据。

有没有更好的方法来获得准确性?

我认为你的方法还不够,你需要确保一个数字真的非常高或极低,然后再决定它是异常值。 为此,我们需要找到Q1Q1来计算Q3 – Q1的 IQR .
四分位数Q3 && Q1了解更多:https://www.statisticshowto.com/what-are-quartiles/IQR是(四分位距) 了解更多 : https://www.statisticshowto.com/probability-and-statistics/interquartile-range/

所有这些我们都可以检查极低和高值的异常值:
极高值是指大于Q3 + ( 1.5* IQR )的任何值
极低值是指任何低于Q1 - ( 1.5* IQR )

的值所以在代码中

// sort array ascending
const dataSet= [2, 2.5, 2.25, 4, 1, -3, 10, 20];
const asc = arr => arr.sort((a, b) => a - b);
const quartile = (arr, q) => {
const sorted = asc(arr);
const pos = (sorted.length - 1) * q;
const base = Math.floor(pos);
const rest = pos - base;
if (sorted[base + 1] !== undefined) {
return sorted[base] + rest * (sorted[base + 1] - sorted[base]);
} else {
return sorted[base];
}
};
const Q1 = quartile(dataSet, .25);
const Q3 = quartile(dataSet, .75);
const IQR = Q3 - Q1;
let noneOutliers=[]
dataSet.forEach(number => {
if(number > (Q3 + (1.5 * IQR)) || number < (Q1 - (1.5 * IQR))) {
console.log('number is outlier');
}
else {
noneOutliers.push(number);
}
});
我使用的四分位数

函数来自这个答案 如何在 JavaScript(或 PHP)中获取数组的中位数和四分位数/百分位数?

有关方法,您可以查看此视频 https://www.youtube.com/watch?v=9aDHbRb4Bf8

相关内容

最新更新