我正在研究一個使用nodeJs的小型機器學習理論算法。 我的目標是比較許多陣列模式,以一個源模式然後返回如何 相似,他們表示爲百分比。對於一個示例,pattern1可能與源模式有80%的相似性。JavaScript模式比較
確定一個陣列與另一個陣列的百分比相似度的最佳方法是什麼?
什麼我迄今所做..
//source
var soureSequence = [0.53,0.55,0.50,0.40,0.50,0.52,0.58,0.60]
//patterns to compare
var sequence1 = [0.53,0.54,0.49,0.40,0.50,0.52,0.58,0.60]
var sequence2 = [0.53,0.55,0.50,0.42,0.50,0.53,0.57,0.62]
既然我已經選擇了一種基於%的結果,我想我應該從第一價值基礎我的源圖案關百分比變化第二數組中的值。
var percentChange = (firstVal, secondVal) => {
var pChange = ((parseFloat(secondVal) - firstVal)/
Math.abs(firstVal)) * 100.00;
//To avoid NaN , Infinity , and Zero
if(!pChange || pChange == 0){
return 0.00000001
}
return pChange;
}
在這裏,我會從我的源序列生成我的源模式
var storePattern = function(sequence){
var pattern = [];
for(var i = 0 ; i < sequence.length ; i++){
let $change = percentChange(sequence[i] , sequence[i + 1]);
if(i != sequence.length && $change){
pattern.push($change)
}
}
return pattern;
}
var sourcePattern = storePattern(soureSequence);
現在,我將創造更多的模式進行比較
var testPattern1 = storePattern(sequence1);
var testPattern2 = storePattern(sequence2);
下面是我的比較功能
var processPattern = function(source , target){
var simularityArray = [];
for(var i = 0 ; i < target.length ; i++){
//Compare percent change at indexof testPattern to sourcePattern of same index
let change = Math.abs(percentChange(target[i] , source[i]));
simularityArray.push(100.00 - change);
}
var rating = simularityArray.reduce((a,b) => {
return a + b
});
//returns percent rating based of average of similarity pattern
rating = rating/parseFloat(source.length + ".00");
return rating;
}
現在我可以嘗試估計相似
var similarityOfTest1 = processPattern(sourcePattern , testPattern1)
我的問題是同一範圍內的值 ..內的序列這隻適用於例如0.50,0.52 ..這些值的百分比變化將不會是相同的0.20,0.22但價值差異是相同的,即 - > 0.02
我想到價值差異模式,但在這一點上,我迷路了。
將考慮所有答案。謝謝您的幫助!
所以你正在努力尋找兩個陣列之間的差異整個生產的百分比?或者你的意思是各個數組值之間的差異? – Rick
IMO兩個數組「多麼不同」的規則完全取決於爲什麼這種差異很重要,或者你正在使用它。本質上processPattern是一個[健身功能](https://en.wikipedia.org/wiki/Fitness_function),你應該相應地注意其設計的注意事項。 – James
@Arrow我的理論是,單個數組值之間的差異最終將決定每個模式與源模式相似度的總體百分比。 – KpTheConstructor