我想要群集大量的数据记录。我正在处理的数据是字符串类型。群集过程需要很长时间。
让我们假设我想将一组电子邮件数据记录集群到群集中,同一个人写的电子邮件被分配到同一个群集(考虑到一个人可能以不同的方式写他/她的名字)。 >
我想要执行多阶段聚类:
基于名称的第一阶段聚类,如果两个记录之间的名称距离小于阈值,我们会认为这些聚类不然...
数据记录根据其他属性(名称除外)进入聚类的第二阶段。
计算配对距离。现在我处于聚类阶段。我想为dbscan集群使用以下代码:
function [IDX, isnoise] = dbscan_strings(X,epsilon,MinPts)
C = 0;
n = size(X,1);
IDX = zeros(n,1);
D = pdist2(X,X,@intersection);
visited = false(n,1);
isnoise = false(n,1);
for i = 1:n
if ~visited(i)
visited(i) = true;
Neighbors = RegionQuery(i);
if numel(Neighbors)
% 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我需要帮助将以下群集过程变为多级过程,其中X包含具有所有属性的数据记录。让我们假设X{:,1}是具有name属性的数据记录,因为名称包含在第一列中。
注意:我会为帮助我的人提供50分的奖励。