matlab随机森林
%% 基于随机森林思想的组合分类器设计 %% 清空环境变量 close all; clear; clc; %% 导入数据 Data=load(\'E:\study\研究生\实验\dataset\new_housing.txt\'); Label=load(\'E:\study\研究生\实验\dataset\new_housingLabel.txt\'); sum_Acc=0; sum_MCC=0; sum_F_measure=0; sum_G_mean=0; sum_AUC=0; [M,N]=size(Data);%数据集为一个M*N的矩阵,其中每一行代表一个样本 indices=crossvalind(\'Kfold\',M,5);%进行随机分包 for k=1:5 %交叉验证k=5,5个包轮流作为测试集 test = (indices == k); %获得test集元素在数据集中对应的单元编号 train = ~test;%train集元素的编号为非test元素的编号 train_data=Data(train,:);%从数据集中划分出train样本的数据 train_target=Label(train,:);%获得样本集的测试目标,在本例中是实际分类情况 test_data=Data(test,:);%test样本集 test_target=Label(test,:); %模型与预测结果 %% 创建随机森林分类器 model = classRF_train(train_data,train_target); %% 仿真测试 [Predict_label,votes] = classRF_predict(test_data,model); %预测结果概率输出 prob_estimates=votes/500;%500为决策树数目 output=prob_estimates(:,2);%预测为正类的概率 %调整阈值进行预测和混淆矩阵的计算 T=0.5; max_MCC=0;%记录最大的MCC值 evaluation=[0,0,0,0];%四个评估指标存放地,初始化为全为0 for T=0.1:0.01:0.9%步长0.01 TP=0; FN=0; FP=0; TN=0; [r,~]=size(test_target); for i=1:r%样本个数 if test_target(i,1)==1&&prob_estimates(i,2)>=T%本为正类,大于等于T则预测为正类 %正类的预测概率在prob_estimates第2列 TP=TP+1; elseif test_target(i,1)==1&&prob_estimates(i,2)<T%本为正类,小于T则预测为负类 FN=FN+1; elseif test_target(i,1)==-1&&prob_estimates(i,2)>=T%本为负类,大于等于T则预测为正类 FP=FP+1; else %即tsetLabel(i,1)==-1&&prob_estimates(i,1)<T%本为负类小于T则预测为负类 TN=TN+1; end end TP FN FP TN %Sen=TP/(TP+FN); %Spe=TN/(TN+FP); MCC=(TP*TN-FP*FN)/sqrt((TP+FP)*(TP+FN)*(TN+FP)*(TN+FN)) if MCC>max_MCC%选择MCC值最大的那一组评估指标值 max_MCC=MCC; Precision=TP/(TP+FP); Recall=TP/(TP+FN); TPR=TP/(TP+FN); TNR=TN/(TN+FP); Acc=(TP+TN)/(TP+TN+FP+FN); F_measure=(2*Precision*Recall)/(Precision+Recall); G_mean=sqrt(TPR*TNR); evaluation(1,1)=max_MCC; evaluation(1,2)=Acc; evaluation(1,3)=F_measure; evaluation(1,4)= G_mean; end end auc=AUC(test_target,output);%每一次分类结束后进行一次计算 sum_AUC=sum_AUC+auc; sum_MCC=sum_MCC+ evaluation(1,1); sum_Acc=sum_Acc+ evaluation(1,2); sum_F_measure=sum_F_measure+ evaluation(1,3); sum_G_mean=sum_G_mean+evaluation(1,4); end avg_Acc=sum_Acc/5 avg_MCC= sum_MCC/5 avg_F_measure=sum_F_measure/5 avg_G_mean=sum_G_mean/5 avg_AUC=sum_AUC/5
版权声明:本文为zhouerba原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。