资源简介
协同过滤推荐系统 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
- 上一篇:实现学生信息管理系统
- 下一篇:正则表达式转DFA
评论
共有 条评论