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

资源简介

基于用户的协同过滤算法,使用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.base

     文件     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


评论

共有 条评论