Spark構建聚類模型(二)
-
評估聚類模型的效能
聚類的評估通常分為兩部分:內部評估和外部評估。內部評估表示評估過程使用訓練模型時使用的訓練資料,外部評估則使用訓練資料之外的資料。
-
內部評價指標
通用的內部評價指標包括WCSS(我們之前提過的K-元件的目標函式)、Davies-Bouldin指數、Dunn指數和輪廓係數(silhouette coefficient)。所有這些度量指標都是使類簇內部的樣本距離儘可能接近,不同類簇的樣本相對較遠。
-
外部評價指標
因為聚類被認為是無監督分類,如果有一些帶標註的資料,便可以用這些標籤來評估聚類模
型。可以使用聚類模型預測類簇(類標籤),使用分類模型中類似的方法評估預測值和真實標籤的誤差(即真假陽性率和真假陰性率)。
-
在MovieLens資料集計算效能
MLlib提供的函式computeCost可以方便地計算出給定輸入資料RDD [Vector]的WCSS。下面我們使用這個方法計算電影和使用者訓練資料的效能
val movieCost = movieClusterModel.computeCost(movieVectors) val userCost = userClusterModel.computeCost(userVectors) println("WCSS for movies: " + movieCost) WCSS for movies: 2273.1845750824914 println("WCSS for users: " + userCost) WCSS for users: 1491.3740578499805
-
聚類模型引數調優
不同於以往的模型, K-均值模型只有一個可以調的引數,就是K,即類中心數目
-
通過交叉驗證選擇K
類似分類和迴歸模型,我們可以應用交叉驗證來選擇模型最優的類中心數目。這和監督學習的過程一樣。需要將資料集分割為訓練集和測試集,然後在訓練集上訓練模型,在測試集上評估感興趣的指標的效能。如下程式碼用60/40劃分得到訓練集和測試集,並使用MLlib內建的WCSS類方法評估聚類模型的效能:
val trainTestSplitMovies = movieVectors.randomSplit(Array(0.6, 0.4), 123) val trainMovies = trainTestSplitMovies(0) val testMovies = trainTestSplitMovies(1) val costsMovies = Seq(2, 3, 4, 5, 10, 20).map { k => (k, KMeans. train(trainMovies, numIterations, k, numRuns).computeCost(testMovies)) } println("Movie clustering cross-validation:") Movie clustering cross-validation: costsMovies.foreach { case (k, cost) => println(f"WCSS for K=$k id $cost%2.2f") } WCSS for K=2 id 884.43 WCSS for K=3 id 885.07 WCSS for K=4 id 884.39 WCSS for K=5 id 874.54 WCSS for K=10 id 885.56 WCSS for K=20 id 878.53
為了實驗的完整性,我們還計算了使用者聚類在交叉驗證下的效能:
val trainTestSplitUsers = userVectors.randomSplit(Array(0.6, 0.4), 123) val trainUsers = trainTestSplitUsers(0) val testUsers = trainTestSplitUsers(1) val costsUsers = Seq(2, 3, 4, 5, 10, 20).map { k => (k, KMeans.train(trainUsers, numIterations, k, numRuns).computeCost(testUsers)) } println("User clustering cross-validation:") costsUsers.foreach { case (k, cost) => println(f"WCSS for K=$k id $cost%2.2f") } WCSS for K=2 id 612.19 WCSS for K=3 id 614.20 WCSS for K=4 id 607.50 WCSS for K=5 id 604.97 WCSS for K=10 id 601.47 WCSS for K=20 id 609.47
相關文章
- 《Spark機器學習》筆記——Spark構建聚類模型Spark機器學習筆記聚類模型
- Spark中的聚類演算法Spark聚類演算法
- 機器學習入門|聚類(二)機器學習聚類
- 機器學習之使用sklearn構建據類模型,並且評價模型機器學習模型
- 聚類模型的演算法效能評價聚類模型演算法
- Spark2 oneHot編碼--標準化--主成分--聚類Spark聚類
- 前端架構思想:聚類分層前端架構聚類
- 物以類聚人以群分,透過GensimLda文字聚類構建人工智慧個性化推薦系統(Python3.10)LDA聚類人工智慧Python
- 用Spark和DBSCAN對地理定位資料進行聚類Spark聚類
- 擴充套件Spark ML來構建你自己的模型和變換器型別套件Spark模型型別
- 分類 和 聚類聚類
- 聚類分析聚類
- spark架構設計&程式設計模型01Spark架構程式設計模型
- 【火爐煉AI】機器學習022-使用均值漂移聚類演算法構建模型AI機器學習聚類演算法模型
- 應用聚類模型獲得聊天機器人語料聚類模型機器人
- 聚類之K均值聚類和EM演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- Spark修煉之道(進階篇)——Spark入門到精通:第五節 Spark程式設計模型(二)Spark程式設計模型
- Spark應用HanLP對中文語料進行文字挖掘--聚類詳解教程SparkHanLP聚類
- 教你文字聚類聚類
- 0編碼構建AI模型AI模型
- Pytorch系列:(三)模型構建PyTorch模型
- Spark Machine Learning 04 構建基於Spark的推薦引擎 (待完善)SparkMac
- 基於spark2.0文字分詞+多分類模型Spark分詞模型
- [需求建議]跨模型呼叫?分類能呼叫單獨模型?模型
- 聊聊智慧診斷模型的構建模型
- 如何構建資料倉儲模型?模型
- HelloWorld:通過demo,構建黑盒模型模型
- JS 建構函式與類JS函式
- 聚類演算法聚類演算法
- 機器學習——dbscan密度聚類機器學習聚類
- 【scipy 基礎】--聚類聚類
- 機器學習(8)——其他聚類機器學習聚類
- spark學習之-----spark程式設計模型Spark程式設計模型
- 09聚類演算法-層次聚類-CF-Tree、BIRCH、CURE聚類演算法
- 聚類分析-案例:客戶特徵的聚類與探索性分析聚類特徵
- 類的建構函式和解構函式函式
- 使用Apache Spark和Apache Hudi構建分析資料湖ApacheSpark