用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;
}
}







1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 骑摩托车下雨了怎么办 棉袄脏了不想洗怎么办 棉袄袖口特别脏怎么办 没有扣眼的腰带怎么办 消防部队改革士兵怎么办 84洗衣服手剥皮怎么办 羊毛裤水洗了怎么办 小公司开支亏损怎么办 带上耳塞后耳鸣怎么办 鞋子拉链磨脚怎么办 科目三系统误判怎么办 遇到障碍物老熄火怎么办 高速上遇到动物怎么办 高速上有障碍物怎么办 雨刮器工作遇到障碍物怎么办 高速路上遇到障碍物怎么办 开车撞到柱子怎么办 喝酒撞了护栏怎么办 漏电保护器过载怎么办 不停有国外电话怎么办 身体铅含量高怎么办 洗衣机买大了怎么办 三角插头坏了怎么办 移动硬盘读不出来怎么办 高压线断落地面怎么办 水冷螺杆机制热怎么办 施工升降机突然停电怎么办 高压锅煮饭响了怎么办 美的高压锅漏气怎么办 电压力锅盖漏气怎么办 电饭锅焦粘锅底怎么办 电饭锅煮焦了怎么办 九阳压力锅漏气怎么办 高压锅排气阀漏气怎么办 电锅漏电麻手怎么办 美的pss5032漏气怎么办 九阳电饭煲坏了怎么办 电饭煲外壳坏了怎么办 商用电饭锅粘锅怎么办 电饭锅煮饭会糊怎么办 美的电饭锅漏气怎么办