test

来源:互联网 发布:张召忠 知乎 编辑:程序博客网 时间:2024/06/05 20:24
start=1;k=1;for i=1:66095%     第一行    a=A(i,1);    b=A(i,2);    d1=A(i,3);    d2=A(i,4);    d3=A(i,5);    t1=A(i,6);    t2=A(i,7);    t3=A(i,8);%     下一行    na=A(i+1,1);    nb=A(i+1,2);    nd1=A(i+1,3);    nd2=A(i+1,4);    nd3=A(i+1,5);    nt1=A(i+1,6);    nt2=A(i+1,7);    nt3=A(i+1,8);%     比较        if (na~=a)||(nb~=b)        ending=i;        block(k).mat=A(start:ending,:);        k=k+1;        start=i+1;        elseif (d1~=nd1)||(d2~=nd2)||(d3~=nd3)        ending=i;        block(k).mat=A(start:ending,:);        k=k+1;        start=i+1;        elseif abs(nt1*60+nt2-(t1*60+t2))>5        ending=i;        block(k).mat=A(start:ending,:);        k=k+1;        start=i+1;        elseif i==66095        ending=66096;        block(k).mat=A(start:ending,:);         else            continue;        endend%清理点数目较少(<50)的轨迹endb=k;k=1;for j=1:endb    if size(block(j).mat,1)>50    traj(k).mat=block(j).mat;    k=k+1;    endend
%相似性尺度:移动欧氏距离D=zeros(size(traj,2));for i1=1:size(traj,2)    for i2=1:size(traj,2)        windowsize=min(size(traj(i1).mat,1),size(traj(i2).mat,1));        if size(traj(i1).mat,1)>size(traj(i2).mat,1)            bigger=traj(i1).mat;            smaller=traj(i2).mat;        else            bigger=traj(i2).mat;            smaller=traj(i1).mat;        end            steps=size(bigger,1)-windowsize;            if steps~=0                distance=0;            for i3=1:steps+1                dis=0;                for i4=1:windowsize                    dis=dis+(smaller(i4,9)-bigger(i4+i3-1,9))^2+(smaller(i4,10)-bigger(i4+i3-1,10))^2;                end                distance(i3)=dis;            end            distance=min(distance);            else                distance=0;                dis=0;                for i5=1:windowsize                    dis=dis+(smaller(i5,9)-bigger(i5,9))^2+(smaller(i5,10)-bigger(i5,10))^2;                end                distance=dis;            end            D(i1,i2)=distance;    endend

%km聚类
k=10;
%随机选中心
center=410*rand(k,1);
center=ceil(center);
center=sort(center);
%就近分类
flag=1;
while flag>0
    flag=0;
point(:,1)=center;
next=ones(k,1);
for j1=1:410
    for j2=1:k
    dis(j2)=D(j1,center(j2));
    end
    num=find(dis==min(dis),1,'first');
    point(num,next(num)+1)=j1;
    next(num)=next(num)+1;
end
%计算新中心
newcenter=zeros(k,1);
for j3=1:k
    group=find(point(j3,:));
    sz=size(group,2);
    dist=zeros(sz-1,1);
    for j4=2:sz
        for j5=2:sz
            dist(j4-1)=dist(j4-1)+D(point(j3,j4),point(j3,j5));
        end
    end
    newcenter(j3)=point(j3,find(dist==min(dist),1,'first')+1);
    if newcenter(j3)~=center(j3)
        flag=1;
    end
end
    center=newcenter;
end

%在此分类直到中心不变

%km聚类k=10;%随机选中心center=410*rand(k,1);center=ceil(center);center=sort(center);%就近分类flag=1;while flag>0    flag=0;point(:,1)=center;next=ones(k,1);for j1=1:410    for j2=1:k    dis(j2)=D(j1,center(j2));    end    num=find(dis==min(dis),1,'first');    point(num,next(num)+1)=j1;    next(num)=next(num)+1;end%计算新中心newcenter=zeros(k,1);for j3=1:k    group=find(point(j3,:));    sz=size(group,2);    dist=zeros(sz-1,1);    for j4=2:sz        for j5=2:sz            dist(j4-1)=dist(j4-1)+D(point(j3,j4),point(j3,j5));        end    end    newcenter(j3)=point(j3,find(dist==min(dist),1,'first')+1);    if newcenter(j3)~=center(j3)        flag=1;    endend    center=newcenter;end%在此分类直到中心不变

%显示matcolor=[1 0 0    1 0.5 0    1 1 0    0 1 0    0 0.5 1    0 0 1    0.5 0 1    0 0 0    0.2 0.1 0.05    0.3 1 0];for j6=1:k    group2=find(point(j6,:));    sz=size(group2,2);    maincolor=matcolor(j6,:);    for j7=2:sz        color=maincolor;        color=color*rand(1);        num2=point(j6,j7);        plot(traj(num2).mat(:,9),traj(num2).mat(:,10),'linestyle','-','color',color);        hold on;            end    legend('group1','group2','group3','group4','group5','group6','group7','group8','group9','group10');    title('Clustering Result:when k=10');end


0 0
原创粉丝点击