java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
本文接数据挖掘-基于Kmeans算法、MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(上). (update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ
1、K-近邻算法(Knn)
其原理为在一个样本空间中,有一些已知分类的样本,当出现一个未知分类的样本,则根据距离这个未知样本最近的k个样本来决定。
举例:爱情电影和动作电影,它们中都存在吻戏和动作,出现一个未知分类的电影,将根据以吻戏数量和动作数量建立的坐标系中距离未知分类所在点的最近的k个点来决定。
2、算法实现步骤
(1)计算所有点距离未知点的欧式距离
(2)对所有点进行排序
(3)找到距离未知点最近的k个点
(4)计算这k个点所在分类出现的频率
(5)选择频率最大的分类即为未知点的分类贝叶斯网络 序 上上周末写完上篇朴素贝叶斯分类后,连着上了七天班,而且有四天都是晚上九点下班,一直没有多少时间学习贝叶斯网络,所以更新慢了点,利用清明节两天假期,花了大概七八个小时,写了这篇博客,下面讲的例子有一个是上一篇朴素贝叶斯讲过的,还
3、java实现
Point类
public class Point {
private long id;
private double x;
private double y;
private String type;
public Point(long id,double x, double y) {
this.x = x;
this.y = y;
this.id = id;
}
public Point(long id,double x, double y, String type) {
this.x = x;
this.y = y;
this.type = type;
this.id = id;
}
//get、set方法省略
}
Distance类
public class Distance {
// 已知点id
private long id;
// 未知点id
private long nid;
// 二者之间的距离
private double disatance;
public Distance(long id, long nid, double disatance) {
this.id = id;
this.nid = nid;
this.disatance = disatance;
}
//get、set方法省略
}
比较器CompareClass类
import java.util.Comparator;
//比较器类
public class CompareClass implements Comparator{
public int compare(Distance d1, Distance d2) {
return d1.getDisatance()>d2.getDisatance()?20 : -1;
}
}
KNN主类
/**
*
1、输入所有已知点
2、输入未知点
3、计算所有已知点到未知点的欧式距离
4、根据距离对所有已知点排序
5、选出距离未知点最近的k个点
6、计算k个点所在分类出现的频率
7、选择频率最大的类别即为未知点的类别
*
* @author fzj
*
*/
public class KNN {
public static void main(String[] args) {
// 一、输入所有已知点
List dataList = creatDataSet();
// 二、输入未知点
Point x = new Point(5, 1.2, 1.2);
// 三、计算所有已知点到未知点的欧式距离,并根据距离对所有已知点排序
CompareClass compare = new CompareClass();
Set distanceSet = new TreeSet(compare);
for (Point point : dataList) {
distanceSet.add(new Distance(point.getId(), x.getId(), oudistance(point,
x)));
}
// 四、选取最近的k个点
double k = 5;
/**
* 五、计算k个点所在分类出现的频率
*/
// 1、计算每个分类所包含的点的个数
List distanceList= new ArrayList(distanceSet);
Map map = getNumberOfType(distanceList, dataList, k);
// 2、计算频率
Map p = computeP(map, k);
x.setType(maxP(p));
System.out.println("未知点的类型为:"+x.getType());
}
// 欧式距离计算
public static double oudistance(Point point1, Point point2) {
double temp = Math.pow(point1.getX() - point2.getX(), 2)
+ Math.pow(point1.getY() - point2.getY(), 2);
return Math.sqrt(temp);
}
// 找出最大频率
public static String maxP(Map map) {
String key = null;
double value = 0.0;
for (Map.Entry entry : map.entrySet()) {
if (entry.getValue() > value) {
key = entry.getKey();
value = entry.getValue();
}
}
return key;
}
// 计算频率
public static Map computeP(Map map,
double k) {
Map p = new HashMap();
for (Map.Entry entry : map.entrySet()) {
p.put(entry.getKey(), entry.getValue() / k);
}
return p;
}
// 计算每个分类包含的点的个数
public static Map getNumberOfType(
List listDistance, List listPoint, double k) {
Map map = new HashMap();
int i = 0;
System.out.println("选取的k个点,由近及远依次为:");
for (Distance distance : listDistance) {
System.out.println("id为" + distance.getId() + ",距离为:"
+ distance.getDisatance());
long id = distance.getId();
// 通过id找到所属类型,并存储到HashMap中
for (Point point : listPoint) {
if (point.getId() == id) {
if (map.get(point.getType()) != null)
map.put(point.getType(), map.get(point.getType()) + 1);
else {
map.put(point.getType(), 1);
}
}
}
i++;
if (i >= k)
break;
}
return map;
}
public static ArrayList creatDataSet(){
Point point1 = new Point(1, 1.0, 1.1, "A");
Point point2 = new Point(2, 1.0, 1.0, "A");
Point point3 = new Point(3, 1.0, 1.2, "A");
Point point4 = new Point(4, 0, 0, "B");
Point point5 = new Point(5, 0, 0.1, "B");
Point point6 = new Point(6, 0, 0.2, "B");
ArrayList dataList = new ArrayList();
dataList.add(point1);
dataList.add(point2);
dataList.add(point3);
dataList.add(point4);
dataList.add(point5);
dataList.add(point6);
return dataList;
}
}
4、运行结果
参考
[1] 《机器学习实战》
java实现 k nn算法_数据挖掘(二)——Knn算法的java实现相关推荐
- java小马哥百度网盘_思否编程(小马哥):Java 微服务实践 - Spring Boot / Spring Cloud全套,完整版下载 - VIPC6资源网...
小马哥 Java 微服务实践 – Spring Boot 系列 pptx segmentfault-lessons-master 03Java 微服务实践 – Spring Boot 系列(三)Web ...
- 算法(八):图解KNN算法
K最相邻算法(K-NearestNeighbor Classification Algorithm,KNN)是数据挖掘分类技术中最简单的方法之一,所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本 ...
- KNN算法(一) KNN算法原理
一.KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学 ...
- 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点
文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...
- 数据挖掘算法_数据挖掘算法入门
有南方的朋友讲过北方人喜欢打比方,尤其是甲方的,其实也没什么不好了.如果是做菜的话,那么这些算法就相当于烹饪的工具了.对原始的食材进行预处理.加工整合,选择合适烹饪工具,以及对应的方法步骤,最后收获舌 ...
- java 线性回归算法_线性搜索或顺序搜索算法在Java中如何工作? 示例教程
java 线性回归算法 大家好,之前,我讨论了二进制搜索算法的工作原理,并分享了在Java中实现二进制搜索的代码. 在那篇文章中,有人问我是否还有其他搜索算法? 如果数组中的元素未排序,又该如何使用它 ...
- java 哈希一致算法_一致哈希算法Java实现
一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法.传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证 ...
- java实现子序列最大和_“最大子序列和”算法 java
maxSubSum各自是最大子序列和的4中java算法实现. 第一种算法执行时间为O(N^3),另外一种算法执行时间为O(N^2),第三种算法执行时间为O(nlogn),第四种算法执行时间为线性N p ...
- java 网页正文抽取算法_网页正文抽取算法 ContentExtractor
软件介绍 简介 ContentExtractor 是一个开源的网页正文抽取工具,用JAVA实现,具有非常高的抽取精度. 算法 ContentExtractor的网页正文抽取算法使用的是CEPR,适用于 ...
最新文章
- 50个云终端只需一台服务器是怎么一回事
- python中求和公式是什么函数_Python的math库中,用于求和的函数是( )。
- python3.8.2安装教程-在服务器上安装python3.8.2环境
- 算法训练 最大的算式
- Ubuntu 16.04 下安装VMware Tools(三行命令搞定,亲测好使)
- Missed in my life《2013》
- mysql 分区信息查看
- vue 按A-Z字母排序数据
- python3.x和python2.x唯一区别_Python3.x和Python2.x的区别介绍
- jsp用户登录验证_Java之使用过滤器进行登录验证
- 【整理操作】MQTT简单使用学习
- iOS - NSURLSession 网络请求
- MVC模式中编写一个登录的Servlet
- 台达伺服ASD-B2的调试
- 国密 GmSSL 版本及安装
- 【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程
- ant-desigh+prolayout布局,修改面包屑的分隔符号,百度搜遍了都找不到办法,csdn解决了
- 打破垄断!国产服务器操作系统正式发布,微软慌了。。
- School Regional Team Contest, Saratov, 2011-F. Spiders-求树直径
- 药品零售企业未建立计算机系统,新版GSP药品经营企业计算机系统要求
热门文章
- 基于yolo4和yolo3(pytorch)的口罩识别的对比
- 模型压缩千万不要选择剪枝,那就是一个坑,改造一个学生网络才是真的压缩
- JavaScriptjQuery.变量作用域
- JavaScript 里,$ 代表什么?/JQuery是什么语言?/html中用link标签引入css时的中 rel=stylesheet属性?/EL表达式是什么?...
- Web GIS系统相关
- WinDbg配置和使用基础
- 在Docker应用场景下 如何使用新技术快速实现DevOps
- placeholder在不同浏览器下的表现及兼容方法
- ping: icmp open socket: Operation not permitted 的解决办法
- 在EXCEL表格中怎么去掉全部的内容的最后一个字