在数据挖掘中经常会计算相似度,用java实现了欧几里得和皮尔逊算法
1、欧几里得
找出可以作为衡量物品或人的数,作为坐标,最后计算坐标之间的距离L
最后计算: r = 1/(1 + L) r属于[0, 1] 1表示完全相似, 0代表没有共同点
java的实现:
package com.euclid.sosop; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** * * @author sosop * euclid approximate 欧几里得距离计算,相似度算法之一 * */ public class EuclidApproximate { /** * Map的key为label,value为坐标值 * 只有相同的label才参与计算 */ public static double distance(Map<String, Double> map1, Map<String, Double> map2) { //平方和 double sum = 0; int common = 0; for (Entry<String, Double> entry : map1.entrySet()) { //判断是否具有共同处 if(map2.containsKey(entry.getKey())) { //(x-y)的平方和 sum += Math.pow(entry.getValue() - map2.get(entry.getKey()), 2); common ++; } } //没有共同处 if(common == 0) return 0; //近似度 [0, 1] 1:完全近似 //较简单的计算相似度,朴素相似度 // double sim = 1 / (Math.sqrt(sum) + 1); //较精确的计算 double sim = Math.sqrt(sum/(double) common); sim = 1.0 - Math.tanh(sim); int max = Math.min(map1.size(), map2.size()); sim = sim * ((double)common / (double)max); return sim; } public static void main(String[] args) { Map<String, Double> map1 = new HashMap<>(); map1.put("a", 10.88); map1.put("b", 2.5); map1.put("c", 0.9); map1.put("d", 20.76); map1.put("e", 6.3); Map<String, Double> map2 = new HashMap<>(); map2.put("a", 10.5); map2.put("b", 2.1); map2.put("c", 0.9); map2.put("d", 20.22); map2.put("e", 6.1); System.out.println(distance(map1, map2)); } }
2、皮尔逊
关键在于一条拟合直线。
将所有作为衡量的数在坐标上标记出来,画一条离所有坐标最近的直线就是拟合直线。
最佳拟合线的优势在于不会受到噪声的影响很小
计算相对于欧几里得较复杂
取值范围:[-1, 1] 小于0, 负相关的 ; 大于0,正相关;取绝对值找相似度 |r|越大, 相似度越高
下面是java实现的算法:
package com.pearson.sosop; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; /** * * @author sosop * pearson approximate 皮尔逊相似度算法 * */ public class Pearson { public static double coefficient(Map<String, Double> map1, Map<String, Double> map2) { //找到共同之处,保存于List List<String> same = new ArrayList<>(); for (Entry<String, Double> entry : map1.entrySet()) { if (map2.containsKey(entry.getKey())) { same.add(entry.getKey()); } } //共同数目 int items = same.size(); if(items == 0) return 0; double sum1 = 0, sum2 = 0, sqrtSum1 = 0, sqrtSum2 = 0, pSum = 0; for (String label : same) { sum1 += map1.get(label); sum2 += map2.get(label); sqrtSum1 += Math.pow(map1.get(label), 2); sqrtSum2 += Math.pow(map2.get(label), 2); pSum += (map1.get(label) * map2.get(label)); } double num, den; num = pSum - (sum1 * sum2 / items); den = Math.sqrt((sqrtSum1 - Math.pow(sum1, 2) / items) * (sqrtSum2 - Math.pow(sum2, 2) / items)); if(den == 0) return 0; return num / den; } public static void main(String[] args) { Map<String, Double> map1 = new HashMap<>(); map1.put("a", 0.5); map1.put("b", 3.1); map1.put("c", 7.9); map1.put("d", 0.22); map1.put("e", 0.1); Map<String, Double> map2 = new HashMap<>(); map2.put("a", 10.88); map2.put("b", 2.5); map2.put("c", 0.9); map2.put("d", 20.76); map2.put("e", 6.3); System.out.println(coefficient(map1, map2)); } }
相关推荐
这个压缩包文件包含了一些与皮尔逊相关系数计算相关的MATLAB代码,如`distance.m`, `distancee.m`, `Myfloydw.m` 和 `Myfloyd.m`,这些脚本可能用于执行实际的计算。 首先,让我们深入了解皮尔逊相关系数的定义和...
2. **欧式距离**:是欧几里得几何中的距离定义,适用于多维空间,是各维度差的平方和的平方根。 3. **切比雪夫距离**:在最大差异上衡量距离,即各维度差的最大值。 4. **兰氏距离**:考虑了数据的方差,适用于变量...
为了提高效率,有多种DTW的变体和优化方法,例如分段DTW、自适应DTW和近似DTW等。这些方法在保持DTW核心思想的同时,降低了计算成本。 7. **DTW与其他方法对比** 与Euclidean Distance(欧氏距离)、Pearson ...
【目标检测】6种蚊子数据集8024张YOLO+VOC格式.docx
计算机应用基础网考全真模拟考试题新版.doc
电大数据库应用技术形成性考核册答案.doc
电大计算机网考题库资料.doc
电子商务整理知识点.doc
软件实施方案通用.docx
浙江信息技术会考Flash操作知识点.doc
计算机系统集成项目经理聘用协议书.doc
用MATLAB设计FIR数字滤波器.doc
网络营销基础与实践读书笔记---常用网络营销工具和方法.doc
网站推广方案范例.doc
电大可编程序控制器应用形成性考核作业.doc
数据集介绍:航拍野生动物多物种实例分割数据集 一、基础信息 数据集名称:航拍野生动物多物种实例分割数据集 图片规模: - 训练集:5,895张监测图像 - 验证集:590张监测图像 - 测试集:251张监测图像 覆盖物种: 獾类(Badger)、鸟类(Bird)、野猪(Boar)、猫科动物(Cat)、鸡(Chicken)、牛(Cow)、鹿(Deer)、犬科(Dog)、鸭(Duck)、狐狸(Fox)、鹅(Geese)、鼠类(Mouse)、兔(Rabbit)、羊(Sheep) 标注特性: - YOLO格式实例分割标注,支持复杂生物形态的轮廓识别 - 包含动物行为特征与自然环境交互的多样化场景 - 标注点密度高,平均单目标包含30+坐标点 二、适用场景 生态保护监测系统: 支持开发基于航拍影像的野生动物种群动态监测系统,适用于自然保护区、国家公园等场景的生物多样性保护。 智能农业管理: 适用于畜牧养殖场智能监控系统开发,实现畜禽行为分析、异常状态预警等功能。 生物学研究支持: 为动物行为学、种群生态学研究提供标准化视觉数据,支持跨物种交互研究。 灾害预警系统: 适用于开发入侵物种预警系统,防范野猪等动物对农田、居民区的破坏。 三、核心优势 多维度物种覆盖: 涵盖14类常见陆空野生动物,包含家畜与野生动物交互场景,支持跨物种关系研究。 高精度实例标注: - 精确到毛发级的多边形标注,完整保留动物形态特征 - 包含动态行为标注(觅食、迁徙、群聚等) - 标注经过动物学家校验,符合生物学特征识别要求 场景多样性: - 覆盖昼夜不同时段、多种气候条件下的监测数据 - 包含平原、林地、水域等多类型生态环境 - 具备复杂背景下的目标检测挑战性样本 任务适配性: - 原生支持YOLO系列模型训练 - 兼容目标检测、实例分割、生物量估算等多任务需求 - 提供跨场景模型验证的标准化测试集
针对论文文件查重进行比对,且OCR识别图片,并进行排除题目,算法经过优化的源代码。
物联网中的几种短距离无线传输技术.doc
网络营销上机实验二:编写网络营销调研问卷.doc
测绘CAD制图教学计划.doc