基于物品相似度的计算 Item_Tag 这是目前推荐系统 ER 模型 主要流程 开始 Mysql -table Mongo-colle ction Item 表 通过 type 查 找同类产品 同类 Item-id 查 找 item_tag Tagid 和 权 重 通 过 欧几 里 德距离算法 得到 相似度标 ItemSimilar 相似的物品组成邻居 db 数据存储的几点约束,和优化 数据量很庞大! !俩俩之间比较 就是排列里面的 Ann 多处理约束,是计算量和和存储量都相对适宜! 附:1 欧几里德算法: import java.util.ArrayList; import java.util.List; public class Recom { private static List userList1 = new ArrayList(); private static List userList2 = new ArrayList(); private List userList3 = new ArrayList(); List userList4 = new ArrayList(); List userList5 = new ArrayList(); List userList6 = new ArrayList(); public static List getList(List tagList ,int x){ for(int i=0;i tagList1,List tagList2 ){ double value =0; int size1 = tagList1.size(); int size2 = tagList2.size(); int isAll=0; if(size1>size2||size1==size2){ for(Tag tag1 :tagList1){ int flag=0; for(Tag tag2 :tagList2){ if(tag1.getName().equals(tag2.getName())){ flag=1; value+= getOJLD(tag1.getRefereceCount(),tag2.getRefereceCount()); System.out.println("value1="+value); } } if(flag==0){ isAll++; value+= getOJLD(tag1.getRefereceCount(),0); } if(isAll==size1){ value=0; } } }else{ for(Tag tag2 :tagList2){ int flag=0; for(Tag tag1 :tagList1){ if(tag2.getName().equals(tag1.getName())){ flag=1; value+= getOJLD(tag2.getRefereceCount(),tag1.getRefereceCount()); System.out.println("value1="+value); } } if(flag==0){ isAll++; value+= getOJLD(tag2.getRefereceCount(),0); } if(isAll==size1){ value=0; } } } return 1/(1+Math.sqrt(value)); } /** * 向量之间的距离 * @param _num1 * @param _num2 * @return */ public static double getOJLD(int _num1,int _num2){ System.out.println(Math.pow(_num1-_num2, 2)); return Math.pow(_num1-_num2, 2); } public static void main(String[] args) { //Recom.getList(userList1, 5);Recom.getList(userList2, 5); double va = Recom.getSim(Recom.getList(userList1, 2), Recom.getList(userList2, 6)); System.out.println(va); } }