聚類

聚類是關於將類似物件組合在一起。它廣泛用於模式識別。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。請考慮你有一個內容釋出應用程式。現在,為了留住你的使用者,他們應該檢視他們喜歡的內容。讓我們假設為了簡單起見,如果他們在一個特定的網頁上停留超過一分鐘並且他們趴到底部那麼他們就喜歡這些內容。現在,你的每個內容都將具有唯一識別符號,使用者也將如此。基於此建立群集,你將瞭解哪個使用者群具有相似的內容品味。這反過來可以在推薦系統中使用,在推薦系統中,你可以假設如果同一群集的某些使用者喜歡該文章,那麼其他使用者也會如此,並且可以在你的應用程式中顯示為建議。