資源簡介
協(xié)同過濾推薦系統(tǒng) Java,簡單的協(xié)同過濾推薦系統(tǒng),方便初學(xué)者學(xué)習(xí)入門。
代碼片段和文件信息
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?=?{“數(shù)據(jù)挖掘:概念與技術(shù)““金融工程““投資銀行學(xué)““算法導(dǎo)論““machine?learning““經(jīng)濟(jì)學(xué)原理““金融的邏輯““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?// for?(int?j?=?0;?j?// System.out.print(similarityMatrix[i][j]+“?“);
// }
// System.out.println();
// }
List?neighborSerial?=?new?ArrayList();
for?(int?i?=?0;?i? neighborSerial.clear();
double?max?=?0;
int?itemSerial?=?0;
for?(int?j?=?0;?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? 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)?{ //該方法有三個(gè)參數(shù),score表示某一用戶對所有項(xiàng)目的評分;i表示某個(gè)項(xiàng)目的序號
List?neighborSerial?=?new?ArrayList();
double[]?similarity?=?new?double[similarityMatrix.length];
for?(int?j?=?0;?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[j]?=?similarity[j];
}
Arrays.sort(temp);
for(int?j?=?0;?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?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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
評論
共有 條評論