资源简介
基于用户的协同过滤算法,使用Java实现,实验数据集为movielens100k
代码片段和文件信息
package user.cf;
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 Usercf {
public static final int KNEIGHBOUR = 10; //number of neighbors
public static final int PREFROWCOUNT = 943; //number of users in base
public static final int COLUMNCOUNT = 1682; //number of items
public static final int TESTROWCOUNT = 462; //number of users in test
public static final String base = “u1.base“;//训练集
public static final int base_LINE = 80000;//base
public static final String TEST = “u1.test“;//测试集
public static final int TEST_LINE = 20000;//test
public static void main(String[] args) {
Usercf cf = new Usercf();
int[][] user_movie_base = cf.readFile(base_LINE base); //构建训练集数据
int[][] test = cf.readFile(TEST_LINE TEST); //构建测试集数据
double[][] similarityMatrix = cf.produceSimilarityMatrix(user_movie_base);//构建用户相似性矩阵
double[][] matrix = cf.getScore(user_movie_base similarityMatrix);
double[] mae = cf.produceMAE(matrix test);
double Mae = 0.0 MAE = 0.0;
for (int k = 0; k < mae.length; k++) {
Mae += mae[k];
}
MAE = Mae / TESTROWCOUNT;
System.out.println(“MAE=:“ + MAE);
}
/**
* 完成数据读入功能
* @param rowCount 数据行数
* @param fileName 文件名称
* @return
*/
public int[][] readFile(int rowCountString fileName) {
int [][] user_movie=new int [PREFROWCOUNT][COLUMNCOUNT];//创建用户-项目评分矩阵
try {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line =null;
// int i = 0;
while ((line = br.readLine())!=null) {
String[] data = line.split(“\t“);
int[] tempdata = new int[4];
for (int j = 0; j < data.length; j++){
tempdata[j] = Integer.parseInt(data[j]);
}
user_movie[tempdata[0]-1][tempdata[1]-1]=tempdata[2];//构建用户-项目评分数据矩阵
// i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(“读入数据完成...“);
return user_movie; //return preference;
}
/**
* 构建用户-用户相似性矩阵
* @param preference 用户-项目评分矩阵
* @return
*/
public double[][] produceSimilarityMatrix(int[][] preference) {
double[][] similarityMatrix = new double[PREFROWCOUNT][PREFROWCOUNT];//创建用户-用户相似性矩阵
for (int i = 0; i < PREFROWCOUNT; i++) {
for (int j = 0; j < PREFROWCOUNT; j++) {
if (i == j) {
similarityMatrix[i][j] = 1;
}
else {
similarityMatrix[i][j] = computeSimilarity(preference[i] preference[j]);
}
}
}
return similarityMatrix;
}
/**
* 计算用户之间的相似性
* @param user1
* @param user2
* @return
*/
public double computeSimilarity(int[] user1int[] user2) {
List
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 301 2016-03-14 21:09 User_CF\.classpath
文件 383 2016-03-14 21:09 User_CF\.project
文件 598 2016-03-14 21:09 User_CF\.settings\org.eclipse.jdt.core.prefs
文件 6305 2016-03-14 21:33 User_CF\bin\user\cf\Usercf.class
文件 6864 2016-03-14 21:33 User_CF\src\user\cf\Usercf.java
文件 1586544 2014-06-07 08:35 User_CF\u1.ba
文件 392629 2014-06-07 08:35 User_CF\u1.test
目录 0 2016-03-14 21:59 User_CF\bin\user\cf
目录 0 2016-03-14 21:59 User_CF\src\user\cf
目录 0 2016-03-14 21:59 User_CF\bin\user
目录 0 2016-03-14 21:59 User_CF\src\user
目录 0 2016-03-14 21:59 User_CF\.settings
目录 0 2016-03-14 21:59 User_CF\bin
目录 0 2016-03-14 21:59 User_CF\src
目录 0 2016-03-14 21:59 User_CF
----------- --------- ---------- ----- ----
1993624 15
- 上一篇:安卓背单词软件
- 下一篇:Java远程控制源代码
评论
共有 条评论