Java教程

kNN(k-Nearest Neighbors)JavaScript实现

本文主要是介绍kNN(k-Nearest Neighbors)JavaScript实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一个简单的demo(可以通过浏览器开发者工具或者node执行):

// Key terminology:
// training set has training examples (features + target variable)
// In the classification problem the target variables are called classes
// test set
// knowledge representation
function makeTrainingSet(dimension_of_feature, num_of_examples) {
    let result = [];
    for (let i = 0; i != num_of_examples; ++i) {
        let example = {
            features: [],
            label: Math.floor(Math.random() * 3), 
        }
        for (let j = 0; j != dimension_of_feature; ++j) {
            example.features[j] = Math.random() * 10
        }
        result.push(example)
    }
    return result
}

let trainingSet = makeTrainingSet(3, 20) // 模拟训练集; 特征向量维数为3; 数据量为20
console.log(trainingSet)

let features = makeTrainingSet(3, 1)[0].features // 此条数据用于测试
console.log(features)

function getDistance(f1, f2) {
    const DIMENSION = f1.length
    // 将距离定义为欧氏距离
    let sumOfSquares = 0
    for (let i = 0; i != DIMENSION; ++i) {
        sumOfSquares += Math.pow(f1[i] - f2[i], 2)
    }   
    return Math.sqrt(sumOfSquares)
}

function getKNearestNeighbors(features, k, trainingSet) {    
    // 返回值: 数组; k个距离最近的邻居; 对象属性为【距离+标签】
    // 参数: k 邻居个数 ; features 未知数据的特征向量 ; trainingSet 已经贴了标签的数据集
    let distanceSet = trainingSet.map(training_example => {
        let distance = getDistance(features, training_example.features)
        return {
            distance: distance,
            label: training_example.label,
        }
    })
    distanceSet.sort((a, b) => a.distance - b.distance)
    return distanceSet.slice(0, k)
}

console.log(getKNearestNeighbors(features, 5, trainingSet))

输出示例:

 

这篇关于kNN(k-Nearest Neighbors)JavaScript实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!