聚类

聚类是关于将类似对象组合在一起。它广泛用于模式识别。Clustering 属于 unsupervised machine learning,因此无需培训。PHP-ML 支持以下聚类算法

  • K-均值
  • DBSCAN

K-均值

k-Means 将数据分成相等方差的 n 组。这意味着我们需要传入一个数字 n,这将是我们解决方案中所需的集群数量。以下代码将有助于提高清晰度

// Our data set
$samples = [[1, 1], [8, 7], [1, 2], [7, 8], [2, 1], [8, 9]];

// Initialize clustering with parameter `n`
$kmeans = new KMeans(3);
$kmeans->cluster($samples); // return [0=>[[7, 8]], 1=>[[8, 7]], 2=>[[1,1]]]

请注意,输出包含 3 个数组,因为这是 KMeans 构造函数中 n 的值。构造函数中还可以有一个可选的第二个参数,即 initialization method。例如考虑

$kmeans = new KMeans(4, KMeans::INIT_RANDOM);

INIT_RANDOM 在尝试确定簇时放置一个完全随机的质心。但是为了避免质心距离数据太远,它受到数据空间边界的约束。

默认构造函数 initialization methodkmeans ++ ,它以智能方式选择质心来加速进程。

DBSCAN

KMeans 相反,DBSCAN 是一种基于密度的聚类算法,这意味着我们不会传递 n,这将决定我们在结果中想要的聚类数量。另一方面,这需要两个参数才能工作

  1. $ minSamples: 群集中应存在的最小对象数
  2. $ epsilon: 两个样本之间的最大距离,它们被视为在同一个集群中。

相同的快速样品如下

// Our sample data set
$samples = [[1, 1], [8, 7], [1, 2], [7, 8], [2, 1], [8, 9]];

$dbscan = new DBSCAN($epsilon = 2, $minSamples = 3);
$dbscan->cluster($samples); // return [0=>[[1, 1]], 1=>[[8, 7]]]

代码几乎是自我解释的。一个主要的区别是,与 KMeans 相比,无法知道输出数组中的元素数量。

实际案例

现在让我们看一下在现实生活场景中使用聚类

聚类广泛应用于 pattern recognitiondata mining。请考虑你有一个内容发布应用程序。现在,为了留住你的用户,他们应该查看他们喜欢的内容。让我们假设为了简单起见,如果他们在一个特定的网页上停留超过一分钟并且他们趴到底部那么他们就喜欢这些内容。现在,你的每个内容都将具有唯一标识符,用户也将如此。基于此创建群集,你将了解哪个用户群具有相似的内容品味。这反过来可以在推荐系统中使用,在推荐系统中,你可以假设如果同一群集的某些用户喜欢该文章,那么其他用户也会如此,并且可以在你的应用程序中显示为建议。