資源簡介
基于用戶的協同過濾算法,使用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?+=?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? 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? for?(int?j?=?0;?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遠程控制源代碼
評論
共有 條評論