• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Java
  • 标签: 协同过滤  

资源简介

协同过滤推荐系统 Java,简单的协同过滤推荐系统,方便初学者学习入门。

资源截图

代码片段和文件信息

package pku;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Recommendation {

public static final int KNEIGHBOUR = 3;
public static final int COLUMNCOUNT = 8; //number of items
public static final int PREFROWCOUNT = 20;
public static final int TESTROWCOUNT = 5;

private String[] bookName = {“数据挖掘:概念与技术““金融工程““投资银行学““算法导论““machine learning““经济学原理““金融的逻辑““Thinking in Java“};

public void generateRecommendations() {
int[][] preference = readFile(PREFROWCOUNT “preference.data“);
int[][] test = readFile(TESTROWCOUNT “test.data“);
double[][] similarityMatrix = produceSimilarityMatrix(preference);
// for (int i = 0; i < similarityMatrix.length; i++) {
// for (int j = 0; j < similarityMatrix[0].length; j++) {
// System.out.print(similarityMatrix[i][j]+“ “);
// }
// System.out.println();
// }
List neighborSerial = new ArrayList();
for (int i = 0; i < TESTROWCOUNT; i++) {
neighborSerial.clear();
double max = 0;
int itemSerial = 0;
for (int j = 0; j < COLUMNCOUNT; j++) {
if(test[i][j] == 0) {
double similaritySum = 0;
double sum = 0;
double score = 0;
neighborSerial = findKNeighbors(test[i] j similarityMatrix);
for (int m = 0; m < neighborSerial.size(); m++) {
sum += similarityMatrix[j][neighborSerial.get(m)] * test[i][neighborSerial.get(m)];
similaritySum += similarityMatrix[j][neighborSerial.get(m)];
}
score = sum / similaritySum;
if(score > max) {
max = score;
itemSerial = j;
}
}
}
System.out.println(“The book recommended for user “+i+“ is: “+bookName[itemSerial]+“ score: “+max);
}
}

/**
 * This method is used to find the nearest K neighbors to the un_scored item 
 * @param score
 * @param i
 * @param similarityMatrix
 * @return
 */
private List findKNeighbors(int[] scoreint idouble[][] similarityMatrix) { //该方法有三个参数,score表示某一用户对所有项目的评分;i表示某个项目的序号
List neighborSerial = new ArrayList();
double[] similarity = new double[similarityMatrix.length];
for (int j = 0; j < similarityMatrix.length; j++) {
if(score[j] != 0) {
similarity[j] = similarityMatrix[j][i];

else {
similarity[j] = 0;
}
}
double[] temp = new double[similarity.length];
for (int j = 0; j < temp.length; j++) {
temp[j] = similarity[j];
}
Arrays.sort(temp);
for(int j = 0; j < similarity.length; j++) {
for (int m = temp.length - 1; m >= temp.length - KNEIGHBOUR; m--) {
if (similarity[j] == temp[m] && similarity[j] != 0.0)
neighborSerial.add(new Integer(j));
}
}
return neighborSerial;
}

/**
 * This method is used to produce similarity matrix among items
 * @param 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        232  2010-04-12 15:04  Collaborative Filtering\.classpath

     文件        399  2010-04-12 15:04  Collaborative Filtering\.project

     文件       5854  2010-04-20 11:31  Collaborative Filtering\bin\pku\Recommendation.class

     文件        340  2010-04-12 16:19  Collaborative Filtering\preference.data

     文件       6073  2010-04-20 11:31  Collaborative Filtering\src\pku\Recommendation.java

     文件         83  2010-04-12 16:23  Collaborative Filtering\test.data

     目录          0  2010-04-15 12:32  Collaborative Filtering\bin\pku

     目录          0  2010-04-15 12:32  Collaborative Filtering\src\pku

     目录          0  2010-04-15 12:32  Collaborative Filtering\bin

     目录          0  2010-04-15 12:32  Collaborative Filtering\src

     目录          0  2011-10-16 22:57  Collaborative Filtering

----------- ---------  ---------- -----  ----

                12981                    11


评论

共有 条评论