ML: 聚类算法R包-对比

测试验证环境



数据: 7w+ 条,数据结构如下图:

> head(car.train)
   DV    DC     RV   RC   SOC   HV   LV HT LT                                 Type TypeName
1 379 85.09   0.00  0.0 62.99 3.99 0.00 12  0 10f689e8-e6cc-47a3-be5a-dbc3833428ef    EV200
2 379 85.09 370.89 59.9 63.99 4.01 0.00 12  0 10f689e8-e6cc-47a3-be5a-dbc3833428ef    EV200
3 379 85.09   0.00  0.0 64.99 4.01 0.00 12  0 10f689e8-e6cc-47a3-be5a-dbc3833428ef    EV200
4 379 85.09   0.00  0.0 66.00 4.03 1.55 12 11 10f689e8-e6cc-47a3-be5a-dbc3833428ef    EV200
5 379 85.09   0.00  0.0 67.00 4.03 0.00 12  0 10f689e8-e6cc-47a3-be5a-dbc3833428ef    EV200
6 379 85.09   0.00  0.0 68.00 4.05 0.00 13  0 10f689e8-e6cc-47a3-be5a-dbc3833428ef    EV200

机器配置:

R version:

> version
               _
platform       x86_64-w64-mingw32
arch           x86_64
os             mingw32
system         x86_64, mingw32
status
major          3
minor          2.5
year           2016
month          04
day            14
svn rev        70478
language       R
version.string R version 3.2.5 (2016-04-14)
nickname       Very, Very Secure Dishes 

R包性能对比



全局函数及参数设置

##----------------------全局设置-------------------------------
remove(list=ls())
space_path <- c("E:\\RScore\\kmeans\\")
setwd(space_path)
Sys.setlocale(category = "LC_ALL",local="chinese")

##table 行列转换函数
tblView <- function (tbl)
{
  ##install.packages("tidyr")
  library(tidyr)
  df <- as.data.frame(tbl)
  df <- spread(data = df, key = Var2, value = Freq)
  datatable(df)
}

## 公共函数:数据读写及计算
source("core.R",encoding="utf-8")
teld.ml.init()

##训练样本
car.train <- teld.ml.rQuery("D_Cluster")
newdata <- car.train[1:8]

stats::kmeans



source code:

> ################################################stats::kmeans######################################
> startTime <- Sys.time();
>
> library(stats)
> kc <- kmeans(x=newdata, centers = 13)
> #plot(newdata[,c("DV","DC")],col=kc$cluster)
> tbl <- table(car.train$TypeName,kc$cluster)
> tblView(tbl)
>
> ##耗时间
> endTime <- Sys.time()
> difTime <- difftime(endTime,startTime,units = "secs")
> print(paste0("stats::kmeans total time:", difTime))
[1] "stats::kmeans total time:0.195545196533203"

stats::kmeans total time:0.195545196533203, result view:

fpc::kmeansruns



source code:

> ################################################fpc::kmeansruns######################################
> startTime <- Sys.time();
>
> library(fpc)
> kc1 <- kmeansruns(data = newdata,krange = 1:15,critout = TRUE)
2  clusters  9394.437
3  clusters  185919.7
4  clusters  482630.4
5  clusters  414875.3
6  clusters  376338
7  clusters  334493.6
8  clusters  303976.7
9  clusters  279036.3
10  clusters  432009.9
11  clusters  363074.8
12  clusters  405784.7
13  clusters  397422.8
14  clusters  371842.5
15  clusters  408561.7
Warning messages:
1: Quick-TRANSfer stage steps exceeded maximum (= 3507150)
2: Quick-TRANSfer stage steps exceeded maximum (= 3507150)
3: Quick-TRANSfer stage steps exceeded maximum (= 3507150)
> tbl<- table(car.train$TypeName,kc1$cluster)
> tblView(tbl)
>
> ##耗时间
> endTime <- Sys.time()
> difTime <- difftime(endTime,startTime,units = "secs")
> print(paste0("fpc::kmeansruns total time:", difTime))
[1] "fpc::kmeansruns total time:107.454074859619"

[1] "fpc::kmeansruns total time:107.454074859619"  result view:

cluster::pam



source code

> ################################################cluster::pam######################################
>
> library(cluster)
> cPam <- pam(x=newdata,k=13)
Error in pam(x = newdata, k = 13) :
  have 70143 observations, but not more than 65536 are allowed

Error: 待确认

fpc::pamk



source code

> ################################################fpc::pamk######################################
>
> library(fpc)
> fPamk <- pamk(newdata,krang=1:15)
Error in pam(sdata, k, diss = diss, ...) :
  have 70143 observations, but not more than 65536 are allowed

Error: 待确认

stats::hclust



source code:

################################################fpc::pamk######################################
>
> library(fpc)
> fPamk <- pamk(newdata,krang=1:15)
Error in pam(sdata, k, diss = diss, ...) :
  have 70143 observations, but not more than 65536 are allowe

Error: 待确认

mclust::Mclust



source code:

> ################################################mclust::Mclust######################################
> library(mclust)
> EM<-Mclust(newdata)
Error in hcVVV(data = c(379, 379, 379, 379, 379, 379, 379, 379, 379, 379,  :
  NAs in foreign function call (arg 13)
In addition: Warning message:
In hcVVV(data = c(379, 379, 379, 379, 379, 379, 379, 379, 379, 379,  :
  NAs introduced by coercion to integer range

Error: 待确认

cluster::fanny



source code:

> ################################################cluster::fanny######################################
> library(cluster)
> fannyz=fanny(newdata,13,metric="SqEuclidean")
Error in fanny(newdata, 13, metric = "SqEuclidean") :
  long vectors (argument 5) are not supported in .Fortran

Error: 待确认

e1071::cmeans



source code:

> ################################################e1071::cmeans######################################
> startTime <- Sys.time();
>
> library("e1071")
> eCm<-cmeans(newdata,15)
> tbl <- table(car.train$TypeName,eCm$cluster)
> tblView(tbl)
>
> ##耗时间
> endTime <- Sys.time()
> difTime <- difftime(endTime,startTime,units = "secs")
> print(paste0("stats::kmeans total time:", difTime))
[1] "stats::kmeans total time:8.7237401008606"

[1] "stats::kmeans total time:8.7237401008606"   result view:

待验证


时间: 2024-07-30 14:25:54

ML: 聚类算法R包-对比的相关文章

ML: 聚类算法R包-模糊聚类

1965年美国加州大学柏克莱分校的扎德教授第一次提出了'集合'的概念.经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面.为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析.用模糊数学的方法进行聚类分析,就是模糊聚类分析.FCM(Fuzzy C-Means)算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法.该聚类算法是传统硬聚类算法的一种改进. 算法流程: 标准化数据矩阵: 建立模糊相似矩阵,初始化隶属矩阵: 算法开始迭代,直到目标函数收敛到极小值: 根据迭代结果,

ML: 聚类算法R包-K中心点聚类

K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值,在 K-medoids算法中,我们将从当前cluster 中选取这样一个点--它到其他所有(当前cluster中的)点的距离之和最小--作为中心点.K-medodis算法不容易受到那些由于误差之类的原因产生的脏数据的影响,但计算量显然要比K-means要大,一般只适合小数据量. K-medoids

ML: 聚类算法R包 - 密度聚类

密度聚类 fpc::dbscan fpc::dbscan DBSCAN核心思想:如果一个点,在距它Eps的范围内有不少于MinPts个点,则该点就是核心点.核心和它Eps范围内的邻居形成一个簇.在一个簇内如果出现多个点都是核心点,则以这些核心点为中心的簇要合并.其中要注意参数eps的设置,如果eps设置过大,则所有的点都会归为一个簇,如果设置过小,那么簇的数目会过多.如果MinPts设置过大的话,很多点将被视为噪声点(先计算距离矩阵,然后看一下距离大概都是多少,找个靠谱的设置成半径) 优点: 对

R语言与数据分析之四:聚类算法1

前面和大家分享的分类算法属于有监督学习的分类算法,今天继续和小伙伴们分享无监督学习分类算法---聚类算法.聚类算法也因此更具有大数据挖掘的味道 聚类算法本质上是基于几何距离远近为标准的算法,最适合数据是球形的问题,首先罗列下常用的距离: 绝对值距离(又称棋盘距离或城市街区距离) Euclide距离(欧几里德距离,通用距离) Minkowski 距离(闵可夫斯基距离),欧几里德距离 (q=2).绝对值距离(q=1)和切比雪夫距离(q=无穷大),这些都是闵可夫斯基的特殊情况. Chebyshew(切

R语言与数据分析之四:聚类算法2

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">今天继续和小伙伴们分享聚类算法和R语言的实现,上篇和大家分享了聚类中的距离.类间距离和最古典的层次聚类法,今天和大家分享几个动态聚类算法.</span> 首先和大家分享被评为十大数据挖掘算法之一的K-means 算法(K为分类的个数,mean为平均值,该算法的难点即为K的指点

看完这篇文章,包你懂得如何用Python实现聚类算法的层次算法!

什么是聚类 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法. 聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的.聚类分析内容非常丰富,有系统聚类法.有序样品聚类法.动态聚类法.模糊聚类法.图论聚类法.聚类预报法等. 起步 层次聚类( Hierarchical Cluste

R语言最优聚类数目k改进kmean聚类算法

原文链接:http://tecdat.cn/?p=7237 在本文中,我们将探讨应用聚类算法(例如k均值和期望最大化)来确定集群的最佳数量时所遇到的问题之一.从数据集本身来看,确定集群数量的最佳值的问题通常不是很清楚.在本文中,我们将介绍几种技术,可用于帮助确定给定数据集的最佳k值.  我们将在当前的R Studio环境中下载数据集: StudentKnowledgeData <-read_csv(“ YourdownloadFolderPath / StudentKnowledgeData.c

K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

  一.概述 在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别. 首先需要明确的是上述四种算法都属于"硬聚类"算法,即数据集中每一个样本都是被100%确定得分到某一个类别中.与之相对的"软聚类"可以理解为每个样本是以一定的概率被分到某一个类别中. 先简要阐述下上述四种算法之间的关系,已经了解过经典K-means算法的读者应该会有所体会.没有了解过

学习笔记:聚类算法Kmeans

前记 Kmeans是最简单的聚类算法之一,但是运用十分广泛,最近看到别人找实习笔试时有考到Kmeans,故复习一下顺手整理成一篇笔记.Kmeans的目标是:把n 个样本点划分到k 个类簇中,使得每个点都属于离它最近的质心对应的类簇,以之作为聚类的标准.质心,是指一个类簇内部所有样本点的均值. 算法描述 Step 1. 从数据集中随机选取K个点作为初始质心         将每个点指派到最近的质心,形成k个类簇 Step 2. repeat             重新计算各个类簇的质心(即类内部