目录
Spss实现系统聚类和K-mean聚类、matlab实现DBSCAN聚类:
基础部分:
适用范围:
已知数据,但分类未知
聚类算法的分类:
1、K-mean聚类算法;
2、系统聚类;
3、DBSCAN算法;
步骤 :
选择聚类算法优先级:
1、观察数据是否为二维数据,是否有特殊的图形,以确定是否使用DBSCAN算法
2、如果是多维数据,优先选择系统聚类
3、无需过多解释,可以使用K-mean聚类算法
DBSCAN算法的步骤:
1、确定MinPts和Eps两个参数;
2、随机选择一个样本点,然后以样本点为原点,以Eps为半径画圆,分别以包含的样本点为圆心,以Eps为半径画圆,直至最后所画的圆不包含任一样本点,得到第一个分类,然后循环这一过程以确定不同的分类;
系统聚类步骤:
1、首先假设每个样本点为一个类(或簇)
2、然后将有着最近距离的两个类归为一类;
3、循环上述过程直至将所有类别归至一类
K-mean聚类步骤:
1、给定聚类数k和聚类中心
2、确定样本点所属类别
3、调整各聚类中心,直到其对应的样本点离其距离之和最小,然后再确定样本点的分类
4、循环上述操作,直至聚类中心不再移动
注意事项;
1、数据量纲不同时,要先将个数据标准化,
2、最后要将标准化的数据进行复原,就是标准化的逆过程
Spss实现系统聚类和K-mean聚类、matlab实现DBSCAN聚类:
系统聚类:
K-mean聚类:
KBSCAN聚类matlab算法:
%主函数:
clc;
clear;
close all;
%% Load Data
load mydata;
%% Run DBSCAN Clustering Algorithm
syms A ; %接着给A导入数据
epsilon=0.5;
MinPts=10;
IDX=DBSCAN(A,epsilon,MinPts);
%% Plot Results
% 如果只有两个变量,使用以下两行代码画出特有图形
% PlotClusterinResult(X, IDX);
% title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']);
%DBSCAN函数代码:
function [IDX, isnoise]=DBSCAN(X,epsilon,MinPts)
C=0;
n=size(X,1);
IDX=zeros(n,1); % 初始化全部为0,即全部为噪音点
D=pdist2(X,X);
visited=false(n,1);
isnoise=false(n,1);
for i=1:n
if ~visited(i)
visited(i)=true;
Neighbors=RegionQuery(i);
if numel(Neighbors)<MinPts
% X(i,:) is NOISE
isnoise(i)=true;
else
C=C+1;
ExpandCluster(i,Neighbors,C);
end
end
end
function ExpandCluster(i,Neighbors,C)
IDX(i)=C;
k = 1;
while true
j = Neighbors(k);
if ~visited(j)
visited(j)=true;
Neighbors2=RegionQuery(j);
if numel(Neighbors2)>=MinPts
Neighbors=[Neighbors Neighbors2]; %#ok
end
end
if IDX(j)==0
IDX(j)=C;
end
k = k + 1;
if k > numel(Neighbors)
break;
end
end
end
function Neighbors=RegionQuery(i)
Neighbors=find(D(i,:)<=epsilon);
end
end