Apply top score scaling algorithm

This commit is contained in:
2023-08-06 18:41:06 +09:00
parent 329d66e714
commit 7620d06d6e
5 changed files with 40 additions and 9 deletions

View File

@@ -104,7 +104,10 @@ extension KissIndex {
}
}
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
writeOutput(output, kmi: kmi)
}
}
@@ -162,6 +165,9 @@ extension KissIndex {
}
}
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
writeOutput(output, kmi: kmi)
}
}
}

View File

@@ -47,8 +47,10 @@ extension KissIndex {
}
}
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
writeOutput(output, kmi: kmi)
}
} catch {
writeError(error, kmi: kmi)
}

View File

@@ -127,7 +127,10 @@ extension KissIndex {
}
}
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
writeOutput(output, kmi: kmi)
}
}
@@ -190,6 +193,9 @@ extension KissIndex {
}
}
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
writeOutput(output, kmi: kmi)
}
}
}

View File

@@ -36,7 +36,10 @@ extension KissIndex {
}
}
normalizeAndWrite(scoreMap: scoreMap, includeName: true, kmi: kmi)
if let maxScore = scoreMap.max(by: { abs($0.value) < abs($1.value) }) {
let output = normalizeByScale(scoreMap: scoreMap, includeName: true, scale: abs(maxScore.value))
writeOutput(output, kmi: kmi)
}
}
catch {
writeError(error, kmi: kmi)

View File

@@ -345,7 +345,7 @@ extension KissIndex {
extension KissIndex {
func normalizeAndWrite(scoreMap: [String: Double], includeName: Bool = false, kmi: KissIndexType) {
func normalizeByTotal(scoreMap: [String: Double], includeName: Bool = false) -> [KissIndexResult.Output] {
let positiveTotalScores = scoreMap.reduce(0, { $0 + ($1.value > 0 ? $1.value: 0) })
let negativeTotalScores = abs(scoreMap.reduce(0, { $0 + ($1.value < 0 ? $1.value: 0) }))
@@ -363,7 +363,21 @@ extension KissIndex {
outputs.append(output)
}
writeOutput(outputs, kmi: kmi)
return outputs
}
func normalizeByScale(scoreMap: [String: Double], includeName: Bool = false, scale: Double) -> [KissIndexResult.Output] {
let scoreArray = scoreMap.map { ($0.key, $0.value) }.sorted(by: { $0.1 > $1.1 })
var outputs = [KissIndexResult.Output]()
for array in scoreArray {
let weight = min(scale, Double(array.1)) / scale
let name: String? = (includeName ? getProduct(shortCode: array.0)?.itemName: nil)
let output = KissIndexResult.Output(shortCode: array.0, productName: name, weight: weight)
outputs.append(output)
}
return outputs
}
}