資源簡介
基于鄰域推薦算法中,基于物品的協調過濾推薦算法 itemCF 的visual c++ 的實現代碼,MovieLens數據集。

代碼片段和文件信息
#include?“math.h“
#include?“string.h“
#include?“stdlib.h“?
#include?“stdio.h“
#include?“iostream.h“
#include?“time.h“?????????//使用當前時鐘做種子
FILE?*fp;
const?int?usersum?=?6040;
const?int?itemsum?=?3952;
const?int?N?=?10;
char?datasetfile[100]?=?“E:\\mytest\\ratings.dat“;?
int?train[itemsum][usersum]={0}; //訓練集合user?item?rate矩陣
int?test[itemsum][usersum]={0};????//測試集合user?item?rate矩陣
double?trainuseritem[usersum][itemsum]={0.0};//訓練集合user?item?興趣程度?矩陣
int?recommend[usersum][N]={0};??//為每個用戶推薦N個物品
struct?simi
{
double?value;?//相似值?
int?num; ?//相似物品號?
};
simi?simiItem[itemsum][itemsum];?//排序后的相似性矩陣
//第一步,拆分數據集為測試集test和訓練集train,其中1/m為測試集取不同的k<=m-1值?在相同的隨即種子下可得到不同的測/訓集合
int?SplitData(int?m?int?k);
//尋找數據集每條記錄對應的用戶號和物品號
int?Buf_UIR(char*?bufint*?user?int*?item);
double?Simility(int*?ItemA?int*?ItemB);????//第二步,計算物品之間的相似性,獲得物品相似性矩陣
int?sort(double*?simArr?simi*?simStruct);?//第三步,物品相似性矩陣排序(根據相似性由高到低排序)
double?getUserLikeItem(int?iint?jint?k);?//第四步,得到用戶i對物品j預測興趣程度,利用k個最近鄰來計算
int?getRecommend();???????????????????????//第五步,通過物品興趣程度,推薦前N個
double?Recall();???????????????????????????//第六步,計算召回率、準確率和覆蓋率
double?Precision();
double?Coverage();
double?Diversity(double?**a);//計算多樣性
int?main()
{
int?ij;
double?recallprecisioncoveragediversity;
int?k;????????//去用戶的k個最近鄰居來計算推薦物品
printf(“請輸入取最近鄰居做計算的個數:k=“);
scanf(“%d“&k);
????//1.初始化數據集
SplitData(81);?//隨即分配1/8為測試集,其他為訓練集
????//輸出初始化的矩陣
/*
for?(i=0;i<5;i++)
? {
? cout<<“Item“<? for?(j=0;j<100;j++)
? {
? cout< ? }
? cout< ? }
*/
//動態分配內存空間給用物品相似性矩陣
double?**itemsim;
itemsim?=?(double**)malloc(sizeof(double*)*itemsum);
????for(i=0;?i {
????????itemsim[i]?=?(double*)malloc(sizeof(double)*itemsum);
????}
//2.計算物品之間相似性,得到相似性矩陣
for?(i=0;i {
for?(j=0;j {
itemsim[i][j]?=?Simility(train[i]train[j]);
}
}
//輸出物品相似性矩陣
/*
for?(i=0;i<5;i++)
? {
? cout<<“Item“<? for?(j=0;j<100;j++)
? {
? cout< ? }
? cout< ? }
*/
//3.物品相似度由高到低排序
for?(i=0;i {
//cout<<“Item“< sort(itemsim[i]simiItem[i]);
//cout< }
????//輸出排序后的物品相似性矩陣
/*
for(i=0;i<5;i++)
{
cout<<“item“< for(j=0;j<100;j++)
{
cout< }
cout< }
????*/
????//4.得到用戶對物品興趣程度的矩陣
for(i=0;i {
for(j=0;j {
if(train[j][i]==0)????????????//如果用戶i對物品j沒有過行為,才計算i對j的預測興趣程度
???? trainuseritem[i][j]=getUserLikeItem(ijk);
}
}
//輸出用戶對物品興趣的矩陣
/*
for?(i=0;i<5;i++)
? {
? cout<<“User“<? for?(j=0;j<100;j++)
? {
? cout< ? }
? cout< ? }
*/
//5.通過物品興趣程度,推薦前N個
getRecommend();
//輸出推薦矩陣
for?(i=0;i<5;i++)
? {
? cout<<“User“<? for?(j
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-11-25?18:45??Item-CF實驗結果\
?????文件??????410624??2012-11-12?13:42??Item-CF實驗結果\Item-CF實驗結果.doc
?????文件??????588288??2012-11-22?20:47??Item-CF實驗結果\ItemCF流程圖.doc
?????目錄???????????0??2012-11-25?18:44??Item-CF實驗結果\mytest\
?????目錄???????????0??2012-11-25?18:44??Item-CF實驗結果\mytest\Debug\
?????文件??????282666??2012-11-10?16:21??Item-CF實驗結果\mytest\Debug\test1.exe
?????文件??????961300??2012-11-10?16:21??Item-CF實驗結果\mytest\Debug\test1.ilk
?????文件???????30862??2012-11-10?17:04??Item-CF實驗結果\mytest\Debug\test1.obj
?????文件??????309284??2012-11-10?12:59??Item-CF實驗結果\mytest\Debug\test1.pch
?????文件??????730112??2012-11-10?15:23??Item-CF實驗結果\mytest\Debug\test1.pdb
?????文件????????9033??2012-10-28?15:35??Item-CF實驗結果\mytest\Debug\testfile.obj
?????文件??????214016??2012-11-10?17:04??Item-CF實驗結果\mytest\Debug\vc60.idb
?????文件???????94208??2012-11-10?17:04??Item-CF實驗結果\mytest\Debug\vc60.pdb
?????目錄???????????0??2012-11-25?18:44??Item-CF實驗結果\mytest\Release\
?????文件?????2016256??2012-11-09?14:10??Item-CF實驗結果\mytest\Release\test1.bsc
?????文件???????69632??2012-11-10?18:24??Item-CF實驗結果\mytest\Release\test1.exe
?????文件???????11576??2012-11-10?18:24??Item-CF實驗結果\mytest\Release\test1.obj
?????文件??????313040??2012-11-10?16:31??Item-CF實驗結果\mytest\Release\test1.pch
?????文件???????????0??2012-11-09?14:10??Item-CF實驗結果\mytest\Release\test1.sbr
?????文件???????50176??2012-11-10?18:24??Item-CF實驗結果\mytest\Release\vc60.idb
?????文件????24594131??2003-02-28?15:53??Item-CF實驗結果\mytest\ratings.dat
?????文件???????10252??2012-11-10?17:00??Item-CF實驗結果\mytest\test1.cpp
?????文件????????3389??2012-11-10?17:04??Item-CF實驗結果\mytest\test1.dsp
?????文件?????????516??2012-11-10?18:31??Item-CF實驗結果\mytest\test1.dsw
?????文件???????50176??2012-11-23?16:08??Item-CF實驗結果\mytest\test1.ncb
?????文件???????48640??2012-11-23?16:08??Item-CF實驗結果\mytest\test1.opt
?????文件?????????841??2012-11-10?18:24??Item-CF實驗結果\mytest\test1.plg
評論
共有 條評論