在JavaScript中,根据方差在一组数字中获取高数值
我有一个JavaScript代码,它获取一系列数字的最高部分在JavaScript中,根据方差在一组数字中获取高数值,javascript,algorithm,math,numbers,variance,Javascript,Algorithm,Math,Numbers,Variance,我有一个JavaScript代码,它获取一系列数字的最高部分 var sequence = [14, 28, 20, 11, 7, 15, 18]; //all the numbers var generalCap = Math.round(sequence.length / 4); //25% var currenthighs = []; function calculatehighs(strictness) { for(var i=0;i<sequence.length;i++
var sequence = [14, 28, 20, 11, 7, 15, 18]; //all the numbers
var generalCap = Math.round(sequence.length / 4); //25%
var currenthighs = [];
function calculatehighs(strictness) {
for(var i=0;i<sequence.length;i++) {
var current = sequence[i];
if(currentHighs.length > generalCap - 1) {
var match = false;
for(var n=0;n<currenthighs.length && !match;n++) {
if(current > currenthighs[n]) {
currenthighs.splice(n); //delete one
currenthighs.push(current);
match = true;
}
}
} else {
currenthighs.push(current); //if under 25% simply put it in the array
}
}
for(i=0;i<currenthighs.length;i++) {
var difference = 0;
for(n=0;n<currenthighs.length;n++) {
difference += Math.abs(currenthighs[i] - currenthighs[n]);
}
if(difference > currenthighs[i] / strictness) {
currenthighs.splice(i);
}
}
}
假设我有一系列10个数字,比如1,3,4,4,7,15,16,16,30,31
。假设我想得到最高的25%(四舍五入),然后我得到16,30,31
。但只要看看结果,16
就不“属于”。理想情况下,我希望得到的结果是30,31
。(请注意,这只是一个示例;实际上,我有数百组数字,它们的数字都是随机的。)
有没有更好的方法根据方差获取一系列数字的最高部分?然后我所要做的就是指定方差的值,直到我从多组数字中得到我想要的数字。var-sequence=[14,28,20,11,7,15,18]//所有的数字
var sequence = [14, 28, 20, 11, 7, 15, 18]; //all the numbers
var generalCap = Math.round(sequence.length / 4); //25%
var currenthighs = [];
function calculatehighs(strictness) {
for(var i=0;i<sequence.length;i++) {
var current = sequence[i];
if(currentHighs.length > generalCap - 1) {
var match = false;
for(var n=0;n<currenthighs.length && !match;n++) {
if(current > currenthighs[n]) {
currenthighs.splice(n); //delete one
currenthighs.push(current);
match = true;
}
}
} else {
currenthighs.push(current); //if under 25% simply put it in the array
}
}
for(i=0;i<currenthighs.length;i++) {
var difference = 0;
for(n=0;n<currenthighs.length;n++) {
difference += Math.abs(currenthighs[i] - currenthighs[n]);
}
if(difference > currenthighs[i] / strictness) {
currenthighs.splice(i);
}
}
}
var generalCap=数学圆(sequence.length/4)//25%
var currenthighs=[];
函数计算HIGHS(严格性){
对于(变量i=0;i通用映射-1){
var匹配=假;
对于(var n=0;n当前高[n]){
currenthighs.splice(n);//删除一个
电流高推压(电流);
匹配=真;
}
}
}否则{
currenthhighs.push(current);//如果低于25%,只需将其放入数组中
}
}
对于(i=0;i我猜您想要集合的前25%左右,并且方差应该很低。定义子集及其大小的方差函数。(例如。*方差+abs(sizeOfSubset idealSize))。
现在,从最小的可接受子集开始,迭代到最大的可接受子集。然后选择使函数最小化的子集。这里的关键是正确选择函数,它将对结果产生显著影响。此外,您可能希望规范化方差,因为大数的方差将大于小数的方差因此,样本目标函数(即要最小化的函数)可以
方差/均值+abs(sizeOfSubset idealSize)/totalSize.你怎么知道16
不“归属”?会17
不“归属”?在它被接受之前,你需要达到多高?我想,一旦算法被编写,我可以用一个变量来调整顶部集合中允许的方差。难道不是这样吗?在这个例子中,我只想用一个小集合来轻松地观察它,这是我在eve发布算法之前对几个样本集所做的我有一个ry集。我并不擅长统计学中的术语,否则我肯定会使用正确的术语。我想我是在寻找X个标准偏差值?但集合的顶部,而不是平均值。你需要更清楚地了解你在寻找什么。你说的“最高25%”是什么意思?你的意思是什么“基于方差”?方差是数字与平均值之间的偏差的度量。您示例中的总体方差为16.05…这如何告知您在集合中包含哪些数字?另外,当您说“最高25%(四舍五入)”时,为什么16不在名单中?10的25%是2.5,四舍五入,这是3个数字…如果你选择最高的3个,那就是16、30和31。你是说“根据一些额外的标准,最多,前25%”?在我的例子中,当我抓住前25%时,我确实包括了16
,我只是想证明有时前25%不起作用,并得到我想要的结果。在这种情况下,16和30之间的差异太大了;在我的例子中,15,16,16
聚集在一起,然后30,31
也聚集在一起所以在这个例子中,我想返回30,31
,因为这样。