MATLAB,基于关联规则的网站智能推荐服务

5,preprocess_apriori.mfunction preprocess_apriori(input,output,separator)%% 数据预处理% 输入参数:% input : 输入文件;% output:输出文件;% separator:输出文件条目分隔符;%% 读取数据[num,txt] = xlsread(input);txt = txt(2:end,2);%% 构造输出if exist(output,'file')==2 delete(output); endrows = size(num,1);fid = fopen(output, 'w');firstid= num(1,1);fprintf(fid,'%s',txt{1,1}); for i=2:rows secondid =num(i,1); if firstid~=secondid % 需要换行 fprintf(fid,'%s\r\n',''); else % 需要添加separator, fprintf(fid,'%s',separator); end % 写入数据,并重新赋值id fprintf(fid,'%s',txt{i,1}); firstid = secondid;endfclose(fid);end 6,trans2matrix.mfunction [ output,code] = trans2matrix( inputfile,outputfile,splitter )%% 把输入事务转换为0、1矩阵;每行代表一个事务% 输入参数:% inputfile:输入文件,空格分隔每个项目;% outputfile:输出文件,转换后的0,1矩阵文件;% splitter: 输入文件项目的间隔符,默认为空格% 输出参数:% output : 转换后的0,1 矩阵% code:编码规则;if nargin<3 splitter=' '; end%% 读入文件, 获得编码规则code={};fid= fopen(inputfile);tline = fgetl(fid);lines=0;while ischar(tline) lines=lines+1; % 记录行数 tline = deblank(tline); tline = regexp(tline,splitter,'split'); code=[code tline]; % 合并 code = unique(code); % 去除重复记录% disp(code) tline = fgetl(fid);enddisp('编码规则为:')disp(num2str(1:size(code,2)))disp( code);fclose(fid); % 关闭文档%% 读取文件,根据编码规则对原始数据进行转换itemsnum= size(code,2);output=zeros(lines,itemsnum);fid= fopen(inputfile);tline = fgetl(fid);lines=0;while ischar(tline) lines=lines+1; % 记录行数 tline = deblank(tline); tline = regexp(tline,splitter,'split'); [C,icode,itline] = intersect(code,tline);% 寻找下标 output(lines,icode')=1; %disp(output(lines,:)) tline = fgetl(fid);endfclose(fid);%% 把转换后的矩阵写入文件fid = fopen(outputfile, 'w');for i=1:lines fprintf(fid,'%s\n',num2str(output(i,:))); endfclose(fid);end 7,findRules.m%% 略, 8,m10_2_test_apriori.m%% 电子商务智能推荐 Apriori关联规则挖掘clear;% 参数初始化% inputfile = '../data/visit_data.xls';inputfile = '../tmp/visit_data_H.xls'; % sessionID访问数据preprocessedfile = '../tmp/visit_data.txt';outputfile='../tmp/as.txt';% 输出转换后0,1矩阵文件rulefile = '../tmp/rules.txt'; % 规则输出文件minSup = 0.01; % 最小支持度minConf = 0.70;% 最小置信度nRules = 1000;% 输出最大规则数sortFlag = 1;% 按照支持度排序separator = ','; % 分隔符 %% 数据预处理,根据sessionID对访问数据进行聚合preprocess_apriori(inputfile,preprocessedfile,separator); %% 数据编码[transactions,code] = trans2matrix(preprocessedfile,outputfile,separator); %% 调用Apriori关联规则算法[Rules,FreqItemsets] = findRules(transactions, minSup, minConf, nRules, sortFlag, code, rulefile);disp('Apriori关联规则算法测试完成!'); 9,cust_ksdensity.mfunction cust_ksdensity(data_i,i,picoutput_prefix,txt)% data_i:第i类的全部数据;% i:第i类;% txt: 属性名; %% 画图cols = size(data_i,2);figure;attributes = size(txt,2);rows =ceil( attributes/2);for j=1:cols [f,xi] = ksdensity(data_i(:,j)); subplot(2,rows,j); plot(xi,f); title(txt{1,j}); ylabel('密度'); set(get(gca,'xlabel'),'fontweight','bold','fontsize',12); set(get(gca,'ylabel'),'fontweight','bold','fontsize',12); set(get(gca,'title'),'fontweight','bold','fontsize',12);end%% 保存图片set(gcf,'Position',[100,200,500,300]); % 设置图片大小set(gcf,'visible','off'); % 设置不弹出框% set(gca,'FontSize',20,'FontWeight','bold');picfile = [picoutput_prefix 'type' num2str(i) '.png'];print(gcf,'-dpng',picfile);disp(['客户群' num2str(i) '的频率密度图已保存在‘' picfile '’']);end 10,m10_3_test_kmeans.m%% 用户数据聚类分析clear ;% 参数初始化inputfile = '../tmp/cluster_data.xls';data_type = '../tmp/cluster_data_type.xls';picoutput_prefix = '../tmp/pd_'; % 概率密度图文件名前缀k=3; % 聚类个数%% 读取数据[num,txt,raw] = xlsread(inputfile);data = num(:,2:end);data_ = zscore(data); % 数据标准化%% K-Means聚类[idx,center] = kmeans(data_,k,'replicates',5,'display','final');%% 构建数据all_data = [data,idx];%% 打印结果,并保存概率密度图和原始数据类别数据for i=1:k data_i = all_data(all_data(:,end)==i,:); rows = size(data_i,1); disp(['客户群' num2str(i) ', 用户数:' num2str(rows) ', 聚类中心:' num2str(center(i,:))]); % 画概率密度图,自定义函数 cust_ksdensity(data_i(:,1:end-1),i,picoutput_prefix,txt(1,2:end));endxlswrite(data_type,[raw,['所属类别';num2cell(idx)]]);disp('用户聚类分区完成!');

你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。