美文网首页
机器学习经典算法2:KNN 近邻算法

机器学习经典算法2:KNN 近邻算法

作者: 阿尔卡雷特 | 来源:发表于2018-03-25 16:40 被阅读0次

该算法通过已有的N个标准样本,对新增加样本进行最佳符合度判别。
这里的k是样本的k个判别属性值。

例如为一部新影片自动判断类别(动作片、爱情片等),可通过已有影片库中标准样本的各项参数(打斗次数、亲吻次数等)与新影片对比取最小邻近样本的过程。

算法步骤:
1,输入条件1:已有的n个样本(包括label及每个样本的k个参数值)
2,输入条件2:新加对象(明确其的k个参数值)
3,执行过程1:遍历n个样本,用每个样本的k项参数值依次与新加对象的对应k项参数值进行求差值,并取绝对值后求和。
4,执行过程2:比较n个样本计算结果找出最小值的样本作为近邻对象,并用样本的label为新加对象进行定义。
5,执行过程3:将新加对象纳入标准样本。

核心JS代码:

/**
* 使用knn进行计算
* @staticObjects 标准对象集合     (输入1)
* @newObject 新对象                (输入2)
* @propertyNames 比对属性名集合    (输入3)
* return 最临近的标准对象的标签   (输出)
*/
function knnCalc(staticObjects,newObject,propertyNames) {
    //求值
    var minStaticObject = null;
    var minTotal = 0;
    for (var i = 0; i < staticObjects.length; i++) {
        var staticObject = staticObjects[i];
        var total = 0;
        var compareObj = {};
        for (var j = 0; j < propertyNames.length; j++) {
            var pName = propertyNames[j];
            var knnPval = Math.abs(staticObject[pName] - newObject[pName]);
            compareObj[pName] = knnPval;
            total += knnPval;
        }
        if(minStaticObject === null || total < minTotal){
            minStaticObject = staticObject;
            minTotal = total;
        }
        showCalcVal(compareObj,staticObject,newObject,total);//显示行计算结果
    }
    //对比,找最匹配值(最小值)
    if(minStaticObject != null){
        return minStaticObject;
    }else{
        alert("未找到匹配项,请检查数据合理性");
    }
}

demo下载地址:https://gitee.com/inq/knn.git

ScreenFlow.gif

相关文章

网友评论

      本文标题:机器学习经典算法2:KNN 近邻算法

      本文链接:https://www.haomeiwen.com/subject/xltkcftx.html