java k近邻算法_分类算法之K近邻算法(KNN)

算法思路

K最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法。它采用测量不同特征值之间的距离方法进行分类。思路: 如果一个样本在特征空间中的k个最近邻(最相似)的样本中的大多数都属于某一个类别,则该样本也属于这个类别。

算法分析

这里我以javaml库为例分析算法实现步骤。首先,引入javaml的库依赖,我使用maven管理依赖,pom配置如下

net.sourceforge

javaml

0.1.5

简要描述下该库的代码结构

d9dc5d75b854b4a322f134375ae12ae2.png

K近邻算法实现代码为KNearestNeighbors类的classDistribution(Instanceinstance)方法,关键代码如下

@Override

public Map classDistribution(Instance instance) {

/* Get nearest neighbors */

// 1) 获取K个近邻样本点;

Set neighbors = training.kNearest(k, instance, dm);

/* Build distribution map */

HashMap out = new HashMap();

// 2) 初始化所有分类的样本点个数为0;

for (Object o : training.classes())

out.put(o, 0.0);

// 3) 统计K个近邻样本点中各个分类的样本点的数量;

for (Instance i : neighbors) {

out.put(i.classValue(), out.get(i.classValue()) + 1);

}

double min = k;

double max = 0;

// 4) 确定所有分类中样本点数量的最大值和最小值;

for (Object key : out.keySet()) {

double val = out.get(key);

if (val > max)

max = val;

if (val < min)

min = val;

}

/* Normalize distribution map */

// 5) 统计未知样本属于各个分类的概率(0-1之间)。

for (Object key : out.keySet()) {

out.put(key, (out.get(key) - min) / (max - min));

}

return out;

}

坚持学习,每天进步一点点,让自己变得更好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值