用java实现数据挖掘中的向量求相似度
来源:互联网 发布:手机短信修改软件 编辑:程序博客网 时间:2024/05/20 06:39
网上找了一圈,发现求向量间相似度的代码基本都是要求输入两个字符串string,而不能直接求向量间的相似度。
于是我和我好基友就花了一下午,写出了一个求余弦距离的java程序,用的原理基本上是矩阵的原理。话不多说,代码奉上。
package com.ansj.vec;
import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
import com.ansj.vec.domain.WordEntry;
import java.io.IOException;
import java.util.Arrays;
import com.ansj.vec.Word2VEC;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
public class test {
public static void main(String[] args) throws IOException {
Word2VEC w1 = new Word2VEC() ;
w1.loadJavaModel("C:/Users/Administrator/Desktop/Data/paoVector") ;
float[] z=new float[100];
z=w1.getWordVector("逃跑");
float[] a=new float[1000];
a=w1.getWordVector("我");
float[] b=new float[1000];
b=w1.getWordVector("喜欢");
float[] c=new float[200];
c=w1.getWordVector("和");
float[] d=new float[200];
d=w1.getWordVector("运动");
float[] e=new float[200];
e=sum(a,b);
float[] f=new float[200];
f=sum(e,c);
float[] g=new float[200];
g=sum(f,d);
float[] h=new float[200];
for (int i = 0; i < g.length; i++) {
h[i]=g[i]/4;
}
double jieguo=0;
jieguo=sim(h,z);
System.out.print(jieguo);
/* for(float i:h){
System.out.println(i);
}
*/
}
private static float[] sum(float[] center, float[] fs) {
// TODO Auto-generated method stub
if (center == null && fs == null) {
return null;
}
if (fs == null) {
return center;
}
if (center == null) {
return fs;
}
for (int i = 0; i < fs.length; i++) {
center[i] += fs[i];
}
return center;
}
private static double cheng(float[] center, float[] fs) {
// TODO Auto-generated method stub
/* if (center == null && fs == null) {
break;
}
if (fs == null) {
break;
}
if (center == null) {
break;
}
*/
for (int i = 0; i < fs.length; i++) {
center[i] *= fs[i];
}
float temp=0;
for (int i=0;i<center.length;i++){
temp+=center[i];
}
return temp;
}
private static double qumo(float[] center) {
// TODO Auto-generated method stub
double temp=0;
double temp1=0;
for (int i = 0; i < center.length; i++) {
temp+= center[i]*center[i];
}
for (int i=0;i<center.length;i++){
temp+=center[i];
}
temp1=Math.sqrt(temp);
return temp1;
}
private static double sim(float[] center, float[] fs) {
// TODO Auto-generated method stub
double result =0;
double temp=cheng(center,fs)/(qumo(center)*qumo(fs));
result=temp;
return result;
}
}
- 用java实现数据挖掘中的向量求相似度
- 数据挖掘笔记-寻找相似文章-Java
- Jackcard相似度和余弦相似度(向量空间模型)的java实现
- Jackcard相似度和余弦相似度(向量空间模型)的java实现
- 向量空间中的相似度度量方法
- [草稿] 相似度 相异度 (数据挖掘)
- 数据挖掘之支持向量机分类实现
- 大数据JAVA实现 基于皮尔逊相关系数的相似度
- 数据挖掘模型介绍之一:相似度模型
- (数据挖掘-入门-2)相似度衡量的方法
- 数据挖掘和机器学习中距离和相似度公式
- 数据挖掘_基于jaccard的相似度算法
- 数据挖掘--逻辑斯蒂回归的java实现(求最优点的方法用是梯度下降法)
- 向量空间模型文档相似度计算实现(C#)
- 数据挖掘之曼哈顿距离、欧几里距离、明氏距离、皮尔逊相关系数、余弦相似度Python实现代码
- 文本数据挖掘-----词向量
- 海量数据挖掘MMDS week7: 相似项的发现:面向高相似度的方法
- Java实现-余弦相似度
- uva548 -- Tree
- 进阶篇:等待多个子线程完毕再执行主线程的方法之CountDownLatch(十二)
- GDOI2017模拟04.12总结
- 二叉树的基本操作(五)——2-3树的概念
- VC学习1: 函数返回类实例的方法
- 用java实现数据挖掘中的向量求相似度
- M/在Makefile中进行宏定义-D
- SAS驱动中PHY和PORT的介绍
- ACM Fibonacci数
- css样式大全
- C语言设计24点游戏。
- 【hibernate】hibernate中的各种问题
- web导入excel(利用POI解析)
- python中 __name__及__main()__的妙处