package knn;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class KNN {
//训练集
private List<KNNData> KNNDS = null;
public KNN(List<KNNData> KNNDS) {
this.setKNNDS(KNNDS);
}
//欧式距离
private static double disCal(KNNData i, KNNData td) {
return Math.sqrt((i.c1 - td.c1)*(i.c1 - td.c1)+(i.c2 - td.c2)*(i.c2 - td.c2));
}
private static String getMaxValueKey(int k, List<KNNData> ts){
//只保留前k个元素
while(ts.size() != k) {
ts.remove(k);
}
String sKey;
//保存key以及出现次数
HashMap<String,Integer> keySet = new HashMap<String,Integer>();
keySet.put(ts.get(0).type,1);
for (int x = 1; x < ts.size(); x++) {
sKey = ts.get(x).type;
if (keySet.containsKey(sKey)) {
keySet.put(sKey, keySet.get(sKey)+1);
} else {
keySet.put(sKey, 1);
}
}
Set<Map.Entry<String,Integer>> set = keySet.entrySet();
Iterator<Map.Entry<String,Integer>> iter = set.iterator();
int mValue = 0;
String mType = "";
while (iter.hasNext()){
Map.Entry<String,Integer> map = iter.next();
if (mValue < map.getValue()) {
mType = map.getKey();
mValue = map.getValue();
}
}
return mType;
}
public static String knnCal(int k, KNNData i, List<KNNData> ts) {
//保存距离
for (KNNData td : ts) {
td.distance = disCal(i, td);
}
Collections.sort(ts);
return getMaxValueKey(k, ts);
}
public List<KNNData> getKNNDS() {
return KNNDS;
}
public void setKNNDS(List<KNNData> kNNDS) {
KNNDS = kNNDS;
}
}
knn.rar_K._KNN分类算法
版权申诉
150 浏览量
2022-09-21
21:58:04
上传
评论
收藏 2KB RAR 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
最新资源
- 基于pygame实现的烟花代码
- mcu-printf关于51单片机使用printf函数进行串口调试的方法
- MySQL和数据表操作
- 微信小程序面试题.pdf
- 基于matlab实现电力系统仿真计算软件包,包括潮流计算,最优潮流计算等.rar
- 基于matlab实现电力系统各种故障波形仿真,单相接地故障,两相间短路,两相接地短路,三相短路等.rar
- 基于matlab实现电动汽车动力性,爬坡性,续驶里程等性能仿真.rar
- Python动态烟花代码.pdf
- 基于matlab实现串口发送接收数据 可配置端口,波特率等 发送可选择ASCII方式或HEX方式
- matlab基于BP神经网络手写字母识别(单一).zip代码9
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈