clear; close all; clc; Data=load('TA_rating3.mat').TA_rating3; value = Data(:,:,1); rooms = Data(:,:,2); location = Data(:,:,3); cleanliness = Data(:,:,4); check_in = Data(:,:,5); service = Data(:,:,6); business = Data(:,:,7); overall = Data(:,:,8); DatasetAll={value,rooms,location,cleanliness,check_in,service,business,overall}; % Overall'ı da DatasetAll'a ekle [satir, sutun]=size(overall); % indices=load('indices_YM20.mat').indices; indices = crossvalind('Kfold', satir, 10); % Değişkenler M=250; %DUoR Dataset=overall; % **Overall-based Senaryo: Dataset olarak SADECE Overall kullanılıyor** % Preference Skor [ Preference_data ] = convert_PreferenceTA( value,rooms,location,cleanliness,check_in,service,business,overall,'user'); PrefScore=Preference_data{8}; % **Overall-based Senaryo: Preference Score olarak SADECE Overall kullanılıyor** mean_Criteria = cell(1,1); % Hücre dizisini başlat (Sadece 1 kriter - Overall) % Dataset=Overall; % PrefScore=Preference_data{5}; % [Pop_usersPref] = kullanici_populerlikEgilimi(Dataset,'prefscore',PrefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore % [Pop_usersBTAR] = kullanici_populerlikEgilimi(Dataset,'bta_rpi',PrefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore % [Pop_usersBTAA] = kullanici_populerlikEgilimi(Dataset,'bta_apri',PrefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore % [Pop_usersRPI] = kullanici_populerlikEgilimi(Dataset,'rpi',PrefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore % [Pop_usersAPRI] = kullanici_populerlikEgilimi(Dataset,'apri',PrefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore % DPI=(Pop_usersBTAR-Pop_usersRPI)./Pop_usersRPI % ARC=abs((Pop_usersBTAR-Pop_usersRPI)./Pop_usersRPI); Precision_All_Users=zeros(size(Dataset,1)-1,6,size(Dataset,1)-1); % Tüm kullanıcıların precision değerleri için 3 boyutlu dizi Recall_All_Users=zeros(size(Dataset,1)-1,6,size(Dataset,1)-1); F1Score_All_Users=zeros(size(Dataset,1)-1,6,size(Dataset,1)-1); Novelty_All_Users=zeros(size(Dataset,1)-1,6,size(Dataset,1)-1); APLT_All_Users=zeros(size(Dataset,1)-1,6,size(Dataset,1)-1); LTC_All_Users=zeros(size(Dataset,1)-1,6,size(Dataset,1)-1); Precision=zeros(size(Dataset,1)-1,6); Recall=zeros(size(Dataset,1)-1,6); F1Score=zeros(size(Dataset,1)-1,6); Novelty=zeros(size(Dataset,1)-1,6); APLT=zeros(size(Dataset,1)-1,6); LTC=zeros(size(Dataset,1)-1,6); User_Results = zeros(size(Dataset,1)-1, 6*6); % Her kullanıcı için tüm metrikler ve yöntemler DuorPri=[]; DuorNew=[]; DuOR=[]; PAIW=[]; MUL=[]; AUG=[]; pop_select={'bta_rpi','bta_apri','rpi','apri','prefscore'}; for secim=3:5 for kriter=1:7 PrefScore=Preference_data{kriter}; Dataset=DatasetAll{kriter}; DuorPri=[]; DuorNew=[]; DuOR=[]; PAIW=[]; MUL=[]; AUG=[]; secim secimVal=pop_select{1,secim}; [Pop_users] = kullanici_populerlikEgilimi(Dataset,secimVal,PrefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore [Pop_users_S] = kullanici_populerlikEgilimi(DatasetAll{1},secimVal,PrefScore); [Pop_users_A] = kullanici_populerlikEgilimi(DatasetAll{2},secimVal,PrefScore); [Pop_users_D] = kullanici_populerlikEgilimi(DatasetAll{3},secimVal,PrefScore); [Pop_users_V] = kullanici_populerlikEgilimi(DatasetAll{4},secimVal,PrefScore); Pop_users_ALL={Pop_users_S,Pop_users_A,Pop_users_D,Pop_users_V}; for i=1:size(Dataset,1)-1 secim i Test_value = value; Test_rooms=rooms; Test_location=location; Test_cleanliness=cleanliness; Test_check_in=check_in; Test_service=service; Test_business=business; Test_O=overall ; Test_dataset=PrefScore(i,:); test_All={Test_value,Test_rooms,Test_location,Test_cleanliness,Test_check_in,Test_service,Test_business,Test_O}; Test_prefScore=PrefScore(i,:); Train_va = value([1:i-1, i+1:size(value,1)], :); Train_ro = rooms([1:i-1, i+1:size(rooms,1)], :); Train_lo = location([1:i-1, i+1:size(location,1)], :); Train_cl = cleanliness([1:i-1, i+1:size(cleanliness,1)], :); Train_ch = check_in([1:i-1, i+1:size(check_in,1)], :); Train_se = service([1:i-1, i+1:size(service,1)], :); Train_bu = business([1:i-1, i+1:size(business,1)], :); Train_O = overall([1:i-1, i+1:size(overall,1)], :); train_All={Train_va,Train_ro,Train_lo,Train_cl,Train_ch,Train_se,Train_bu,Train_O}; Train_dataset = Dataset([1:i-1, i+1:size(Dataset,1)], :); Train_prefScore = PrefScore([1:i-1, i+1:size(PrefScore,1)], :); Train_prefScore_va = Preference_data{1,1}([1:i-1, i+1:size(Preference_data{1,1},1)], :); Train_prefScore_ro = Preference_data{1,2}([1:i-1, i+1:size(Preference_data{1,2},1)], :); Train_prefScore_lo = Preference_data{1,3}([1:i-1, i+1:size(Preference_data{1,3},1)], :); Train_prefScore_cl = Preference_data{1,4}([1:i-1, i+1:size(Preference_data{1,4},1)], :); Train_prefScore_ch = Preference_data{1,5}([1:i-1, i+1:size(Preference_data{1,5},1)], :); Train_prefScore_se = Preference_data{1,6}([1:i-1, i+1:size(Preference_data{1,6},1)], :); Train_prefScore_bu = Preference_data{1,7}([1:i-1, i+1:size(Preference_data{1,7},1)], :); Train_prefScore_ALL={Train_prefScore_va,Train_prefScore_ro,Train_prefScore_lo,Train_prefScore_cl,Train_prefScore_ch,Train_prefScore_se,Train_prefScore_bu}; %% ******* Regresyon Train ****** % Test_value = value; % Test_rooms=rooms; % Test_location=location; % Test_cleanliness=cleanliness; % Test_check_in=check_in; % Test_service=service; % Test_business=business; % Test_O=overall ; [~, sutun_test]=size(Test_dataset); alltest_kriter_pre=[]; for hh=1:sutun_test if Test_O(1,hh)>0 [satir_t, sutun_t]=size(alltest_kriter_pre); alltest_kriter_pre=[alltest_kriter_pre((1:satir_t),:);Test_value(1,hh),Test_rooms(1,hh),Test_location(1,hh),Test_cleanliness(1,hh),Test_check_in(1,hh),Test_service(1,hh),Test_business(1,hh)]; end end x=alltest_kriter_pre(:,1:4); y=alltest_kriter_pre(:,5); betaTest=regress(y,x); [valuE, ordeR]=sort(betaTest,'descend'); % S,A,D,V %[Pop_users] = kullanici_populerlikEgilimi(Train_dataset,'prefscore',Train_prefScore); %//bta_rpi, bta_apri,rpi,apri,prefscore %% Kriter açısından [Bas_urunler_va] = calculate_pareto(Train_va,'item'); Kuyruk_urunler_va=find(~ismember(1:size(Train_va,2), Bas_urunler_va)); [Bas_urunler_ro] = calculate_pareto(Train_ro,'item'); Kuyruk_urunler_ro=find(~ismember(1:size(Train_ro,2), Bas_urunler_ro)); [Bas_urunler_lo] = calculate_pareto(Train_lo,'item'); Kuyruk_urunler_lo=find(~ismember(1:size(Train_lo,2), Bas_urunler_lo)); [Bas_urunler_cl] = calculate_pareto(Train_cl,'item'); Kuyruk_urunler_cl=find(~ismember(1:size(Train_cl,2), Bas_urunler_cl)); [Bas_urunler_ch] = calculate_pareto(Train_ch,'item'); Kuyruk_urunler_ch=find(~ismember(1:size(Train_ch,2), Bas_urunler_ch)); [Bas_urunler_se] = calculate_pareto(Train_se,'item'); Kuyruk_urunler_se=find(~ismember(1:size(Train_se,2), Bas_urunler_se)); [Bas_urunler_bu] = calculate_pareto(Train_bu,'item'); Kuyruk_urunler_bu=find(~ismember(1:size(Train_bu,2), Bas_urunler_bu)); bas_urunler_ALL={Bas_urunler_va,Bas_urunler_ro,Bas_urunler_lo,Bas_urunler_cl,Bas_urunler_ch,Bas_urunler_se,Bas_urunler_bu}; kuyruk_urunler_ALL={Kuyruk_urunler_va,Kuyruk_urunler_ro,Kuyruk_urunler_lo,Kuyruk_urunler_cl,Kuyruk_urunler_ch,Kuyruk_urunler_se,Kuyruk_urunler_bu}; [Bas_urunler] = calculate_pareto(Train_dataset,'item'); % **Overall Dataset kullanılıyor** Kuyruk_urunler=find(~ismember(1:size(Train_dataset,2), Bas_urunler)); PopRecList=0; topN=10; % RecList=zeros(topN,1); user_ortalama=sum(Test_dataset)/nnz(Test_dataset); E_user=find(Test_dataset>=user_ortalama); pop_u=Pop_users(i);%size(intersect(E_user,Bas_urunler),1)/size(E_user,2); tahmini_puanlar=collaborative_filtering(Dataset, i); % **Overall Dataset kullanılıyor** [sirali_tahmini_puanlar,sirali_tahmini_indisler]=sort(tahmini_puanlar,'descend'); pop_u_Priority=Pop_users_ALL{ordeR(1)};%size(intersect(E_user,Bas_urunler),1)/size(E_user,2); tahmini_puanlar_Priority=collaborative_filtering(train_All{ordeR(1)}, i); [sirali_tahmini_puanlar_Priority,sirali_tahmini_indisler_Priority]=sort(tahmini_puanlar_Priority,'descend'); %% %%%%***** Priority DUoR ******%%%%%%%%%%%%%% [RecList_DUoR_Pri] = DUoR_Priority(sirali_tahmini_puanlar_Priority,sirali_tahmini_indisler_Priority,bas_urunler_ALL{ordeR(1)},kuyruk_urunler_ALL{ordeR(4)},PopRecList,topN,pop_u_Priority,M,Train_prefScore_ALL{ordeR(1)},i); % Değerlendirme Metrikleri [precision_DUoR_Pr,recall_DUoR_Pr,F1Score_DUoR_Pr,novelty_DUoR_Pr,APLT_DUoR_Pr,LTC_DUoR_Pr] = performanceCalc(Dataset(i,:),RecList_DUoR_Pri,topN,Kuyruk_urunler); %% %%%%***** New DUoR ******%%%%%%%%%%%%%% % C --> aday ürünler kümesi [RecList_DUoR_New] = DUoR_New_Method(sirali_tahmini_puanlar,sirali_tahmini_indisler,Bas_urunler,Kuyruk_urunler,PopRecList,topN,pop_u,M,Train_prefScore,i); % **Overall PrefScore kullanılıyor** % Değerlendirme Metrikleri [precision_DUoR_new,recall_DUoR_new,F1Score_DUoR_new,novelty_DUoR_new,APLT_DUoR_new,LTC_DUoR_new] = performanceCalc(Dataset(i,:),RecList_DUoR_New,topN,Kuyruk_urunler); %% %%%%***** DUoR ******%%%%%%%%%%%%%% % C --> aday ürünler kümesi [RecList_DUoR] = DUoR_Method(sirali_tahmini_puanlar,sirali_tahmini_indisler,Bas_urunler,Kuyruk_urunler,PopRecList,topN,pop_u,M); % Değerlendirme Metrikleri [precision_DUoR,recall_DUoR,F1Score_DUoR,novelty_DUoR,APLT_DUoR,LTC_DUoR] = performanceCalc(Dataset(i,:),RecList_DUoR,topN,Kuyruk_urunler); %% %%%******* Popularity-aware item weighting (Paiw) ********%%% [paiw_puanlar,paiw_indisler] = paiw(Dataset,tahmini_puanlar); % **Overall Dataset ve tahminler kullanılıyor** RecList_paiw=paiw_indisler(1:topN); % Değerlendirme Metrikleri [precision_paiw,recall_paiw,F1Score_paiw,novelty_paiw,APLT_paiw,LTC_paiw] = performanceCalc(Dataset(i,:),RecList_paiw,topN,Kuyruk_urunler); %% %%%********** MUL *************** %%%% [mul_puanlar,mul_indisler] = mul(Dataset,tahmini_puanlar); % **Overall Dataset ve tahminler kullanılıyor** RecList_mul=mul_indisler(1:topN); % Değerlendirme Metrikleri [precision_mul,recall_mul,F1Score_mul,novelty_mul,APLT_mul,LTC_mul] = performanceCalc(Dataset(i,:),RecList_mul,topN,Kuyruk_urunler); %% %%%********** AUG *************** %%%% [aug_puanlar,aug_indisler] = aug(Dataset,tahmini_puanlar); % **Overall Dataset ve tahminler kullanılıyor** RecList_aug=aug_indisler(1:topN); % Değerlendirme Metrikleri [precision_aug,recall_aug,F1Score_aug,novelty_aug,APLT_aug,LTC_aug] = performanceCalc(Dataset(i,:),RecList_aug,topN,Kuyruk_urunler); %% %%%******** MC_PopBias *********** %%%% DuorPri=[DuorPri;RecList_DUoR_Pri']; DuorNew=[DuorNew;RecList_DUoR_New']; DuOR=[DuOR;RecList_DUoR']; PAIW=[PAIW;RecList_paiw]; MUL=[MUL;RecList_mul]; AUG=[AUG;RecList_aug]; Precision(i,:)=[precision_DUoR,precision_DUoR_new,precision_paiw,precision_mul,precision_aug,precision_DUoR_Pr]; Recall(i,:)=[recall_DUoR,recall_DUoR_new,recall_paiw,recall_mul,recall_aug,recall_DUoR_Pr]; F1Score(i,:)=[F1Score_DUoR,F1Score_DUoR_new,F1Score_paiw,F1Score_mul,F1Score_aug,F1Score_DUoR_Pr]; Novelty(i,:)=[novelty_DUoR,novelty_DUoR_new,novelty_paiw,novelty_mul,novelty_aug,novelty_DUoR_Pr]; APLT(i,:)=[APLT_DUoR,APLT_DUoR_new,APLT_paiw,APLT_mul,APLT_aug,APLT_DUoR_Pr]; LTC(i,:)=[LTC_DUoR,LTC_DUoR_new,LTC_paiw,LTC_mul,LTC_aug,LTC_DUoR_Pr]; User_Results(i,:) = [Precision(i,:), Recall(i,:), F1Score(i,:), Novelty(i,:), APLT(i,:), LTC(i,:)]; % Kullanıcı sonuçları bir satırda toplandı % Precision_All_Users(:,:,i)=Precision; % Tüm kullanıcıların precision değerleri saklanıyor % Recall_All_Users(:,:,i)=Recall; % F1Score_All_Users(:,:,i)=F1Score; % Novelty_All_Users(:,:,i)=Novelty; % APLT_All_Users(:,:,i)=APLT; % LTC_All_Users(:,:,i)=LTC; end DuorPri_Criteria{kriter}=DuorPri; DuorNew_Criteria{kriter}=DuorNew; DuOR_Criteria{kriter}=DuOR; PAIW_Criteria{kriter}=PAIW; MUL_Criteria{kriter}=MUL; AUG_Criteria{kriter}=AUG; Precision(isnan(Precision))=0; Recall(isnan(Recall))=0; F1Score(isnan(F1Score))=0; Novelty(isnan(Novelty))=0; APLT(isnan(APLT))=0; LTC(isnan(LTC))=0; PrecisionCriteria{kriter}=Precision; mean_Criteria{kriter,secim}=[mean(Precision);mean(Recall);mean(F1Score);mean(Novelty);mean(APLT);mean(LTC)]'; % Sadece 1 ortalama değer var artık end Precision_Avg=(PrecisionCriteria{1,1}+PrecisionCriteria{1,2}+PrecisionCriteria{1,3}+PrecisionCriteria{1,4}+PrecisionCriteria{1,5}+PrecisionCriteria{1,6}+PrecisionCriteria{1,7})/7; filename = strcat(secimVal, '_CriteriaTA_Precision.xlsx'); writematrix(Precision_Avg, filename); DuorPri_Avg=(DuorPri_Criteria{1,1}+DuorPri_Criteria{1,2}+DuorPri_Criteria{1,3}+DuorPri_Criteria{1,4}+DuorPri_Criteria{1,5}+DuorPri_Criteria{1,6}+DuorPri_Criteria{1,7})/7; filename1 = strcat(secimVal, '_CriteriaTA_DuorPri.xlsx'); writematrix(DuorPri_Avg, filename1); DuorNew_Avg=(DuorNew_Criteria{1,1}+DuorNew_Criteria{1,2}+DuorNew_Criteria{1,3}+DuorNew_Criteria{1,4}+DuorNew_Criteria{1,5}+DuorNew_Criteria{1,6}+DuorNew_Criteria{1,7})/7; filename2 = strcat(secimVal, '_CriteriaTA_DuorNew.xlsx'); writematrix(DuorNew_Avg, filename2); DuOR_Avg=(DuOR_Criteria{1,1}+DuOR_Criteria{1,2}+DuOR_Criteria{1,3}+DuOR_Criteria{1,4}+DuOR_Criteria{1,5}+DuOR_Criteria{1,6}+DuOR_Criteria{1,7})/7; filename3 = strcat(secimVal, '_CriteriaTA_DuOR.xlsx'); writematrix(DuOR_Avg, filename3); PAIW_Avg=(PAIW_Criteria{1,1}+PAIW_Criteria{1,2}+PAIW_Criteria{1,3}+PAIW_Criteria{1,4}+PAIW_Criteria{1,5}+PAIW_Criteria{1,6}+PAIW_Criteria{1,7})/7; filename4 = strcat(secimVal, '_CriteriaTA_PAIW.xlsx'); writematrix(PAIW_Avg, filename4); MUL_Avg=(MUL_Criteria{1,1}+MUL_Criteria{1,2}+MUL_Criteria{1,3}+MUL_Criteria{1,4}+MUL_Criteria{1,5}+MUL_Criteria{1,6}+MUL_Criteria{1,7})/7; filename5 = strcat(secimVal, '_CriteriaTA_MUL.xlsx'); writematrix(MUL_Avg, filename5); AUG_Avg=(AUG_Criteria{1,1}+AUG_Criteria{1,2}+AUG_Criteria{1,3}+AUG_Criteria{1,4}+AUG_Criteria{1,5}+AUG_Criteria{1,6}+AUG_Criteria{1,7})/7; filename6 = strcat(secimVal, '_CriteriaTA_AUG.xlsx'); writematrix(AUG_Avg, filename6); end % Ortalama değerleri hesapla %all_result=[mean_Criteria{1,1};mean_Criteria{1,2};mean_Criteria{1,3};mean_Criteria{1,4};mean_Criteria{1,5}]; mean_Criteriaavg1=(mean_Criteria{1,1}+mean_Criteria{2,1}+mean_Criteria{3,1}+mean_Criteria{4,1}+mean_Criteria{5,1}+mean_Criteria{6,1}+mean_Criteria{7,1})/7; mean_Criteriaavg2=(mean_Criteria{1,2}+mean_Criteria{2,2}+mean_Criteria{3,2}+mean_Criteria{4,2}+mean_Criteria{5,2}+mean_Criteria{6,2}+mean_Criteria{7,2})/7; mean_Criteriaavg3=(mean_Criteria{1,3}+mean_Criteria{2,3}+mean_Criteria{3,3}+mean_Criteria{4,3}+mean_Criteria{5,3}+mean_Criteria{6,3}+mean_Criteria{7,3})/7; mean_Criteriaavg4=(mean_Criteria{1,4}+mean_Criteria{2,4}+mean_Criteria{3,4}+mean_Criteria{4,4}+mean_Criteria{5,4}+mean_Criteria{6,4}+mean_Criteria{7,4})/7; mean_Criteriaavg5=(mean_Criteria{1,5}+mean_Criteria{2,5}+mean_Criteria{3,5}+mean_Criteria{4,5}+mean_Criteria{5,5}+mean_Criteria{6,5}+mean_Criteria{7,5})/7; all_result=[mean_Criteriaavg1;mean_Criteriaavg2;mean_Criteriaavg3;mean_Criteriaavg4;mean_Criteriaavg5]; % ortalama_degerler = mean(mean_Criteria{1}, 2)'; % Sadece 1 ortalama değer var artık