• 大小: 683KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: Matlab  

资源简介

一个协同训练的小小的仿真,半监督学习算法,最初的协同训练算法(或称为标准协同训练算法)是A. Blum和T. Mitchell [BlumM98] 在 1998年提出的

资源截图

代码片段和文件信息

clc;
clear;
%% 导入数据
data=importdata(‘mfeat-kar‘);
for i=0:9
    for j=1:200
    data(i*200+j:((i+1)*200)65)=i;
    end
end
%% 随机划分训练集和测试集
N=size(data);
ind = randperm(N(1)); %产生一个随机的排序
sample_train=data(ind(1:N(1)*0.5)1:65); %随机挑选出训练样本 50%
sample_test=data(ind(N(1)*0.5+1:end)1:65); %随机挑选出测试样本 50%

%% 单独10%训练样本的效果。 
% by1=fitcnb(sample_train(:1:64)sample_train(:65));
% R1=by1.predict(sample_test(:1:64));
% cMat1=confusionmat(sample_test(:65)R1);
% r=diag(cMat1);
% accuracy1=(sum(r))/1000;

%% 将训练集划分为有标记的数据集L和无标记的数据集U   L/U=90%
    sample_train_L=sample_train(1:100:);       %得到有标记训练样本占训练集10%
    sample_train_U=sample_train(101:end1:64);  %得到无标记训练样本占训练集90%
    L1=zeros(100033);
    L2=zeros(100033);
    %将L分为两个视图L1 和 L2
    L1(1:1001:32)=sample_train_L(1:1001:32);
    L1(1:10033)=sample_train_L(1:10065);
    L2(1:1001:32)=sample_train_L(1:10033:64);
    L2(1:10033)=sample_train_L(1:10065);
     for i=1:9
        U11=sample_train_U(((i-1)*100+1):(i*100)1:32);                 % 得到一个初始的无标记子集U‘
        meas1=L1(1:(i*100)1:32);
        species1=L1(1:(i*100)33);
        by1=fitcnb(meas1species1);
        R1=by1.predict(U11);
        result1(1:1001:32)=L1(1:1001:32);
        result1(1:10033)=R1(1:1001);

        U12=sample_train_U(((i-1)*100+1):(i*100)33:64);            
        meas2=L2(1:(i*100)1:32);
        species2=L2(1:(i*100)33);
        by2=fitcnb(meas2species2);
        R2=by2.predict(U12);
        result2(1:1001:32)=L2(1:1001:32);
        result2(1:10033)=R2(1:1001);

        L1((i*100+1):((i+1)*100):)=result2(1:100:);
        L2((i*100+1):((i+1)*100):)=result1(1:100:);
     end

%% h1对测试集进行分类
sample_test_t1=sample_test(:1:32);   %测试集的样本特征
sample_test_t2=sample_test(:33:64); 
sample_test_c=sample_test(:65);     %测试集的类别

last_r1=by1.predict(sample_test_t1);
cMat1=confusionmat(sample_test_clast_r1);
r=diag(cMat1);
accuracy1=(sum(r))/1000;
%% h2对测试集进行分类
last_r2=by2.predict(sample_test_t2);
cMat2=confusionmat(sample_test_clast_r2);
r2=diag(cMat2);
accuracy2=(sum(r2))/2000;
disp(‘accuracy=  ‘);
if(accuracy1>=accuracy2)
    disp(accuracy1);
else
    disp(accuracy2);
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2370  2017-12-18 12:34  协同训练\main.m

     文件    1922000  1999-10-08 20:00  协同训练\mfeat-kar

     目录          0  2017-06-19 10:49  协同训练

----------- ---------  ---------- -----  ----

              1924370                    3


评论

共有 条评论