步骤:
(1)从数据中选取k随机行(质心)
(2)使用Lloyd’s算法确定集群
(3)与质心的距离对每个数据点进行分配
(4)将质心重新用与其相关的所有点的平均值代替
(5)对与质心距离最近的数据重新分配
(6)循坏3、4,直到数据不再分配
第三步表示k-means无法与相当稀疏的数据或者有较多异常值的数据一起工作,另外,集群最好有线性形状。
kmeans()
x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
x
fit <- kmeans(x,10)
fit
#碎石图选集群数
results <-matrix(nrow=14,ncol=2,dimnames=list(2:15,c("clusters","sumsquares")))
for(1 in 2:15){
fit<-kmeans(x,i)
results[i-1,1]<-i
results[i-1,2]<-fit$totss
}
plot(results)
cluster means用于集群分配的平均值的分解
cluster vector将100个数分配的集群
cluster sum of squares总平方和94.6%是拟合度的表现。
pam()
medoids.csv数据
library(cluster)
x <- read.table(“medoids.csv”, header=TRUE, sep=",")
result <- pam(x, 2, FALSE, "euclidean") ##medoids函数
result
summary(result)
plot(result$data, col = result$clustering)
medoids指定使用第3行和第6行
clustering vector聚集群
objective function展示构建阶段和交换阶段的函数值
聚合法和分裂法
hclust()
dat <- matrix(rnorm(100), nrow=10, ncol=10) #以正态数据为例
dat
hc <- hclust(dist(dat));hc
plot(hc)
mclust函数包里的Mclust函数(基于模型的聚类、分类、密度估计、贝叶斯正则化等,通过EM算法拟合正态混合模型)
Mclust
install.packages(“mclust”)
library(mclust)
data <- read.csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data") ##iris数据
fit <- Mclust(data) ##用EM计算最优匹配
fit
summary(fit)
plot(fit)
log.likelihood:BIC数值的对数似然值
n:数据量
df:自由度
BIC:最优贝叶斯信息准则
ICL:集成完全数据似然值(ICL与BIC相同,即可对数据点进行分类)
plot中有四类图
density(密度估计)、DBSCAN(确定固定点集群的聚类)、OPTICS(确定广泛分布集群的聚类)函数
density()
data <- read.csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")
#计算X5.1的密度
d <- density(data$X5.1)
d
plot(d)
统计测试,基于深度、偏差、距离、密度的方法,高维方法。
identify(in boxplot) #identify函数便于标记散点图的点,boxplot生成盒须图
---------------------------------------------------------------------
y <- rnorm(100)
boxplot(y)
identify(rep(1, length(y)), y, labels = seq_along(y))
boxplot函数会自动计算数据集的异常值
x <- rnorm(100)
summary(x)
boxplot.stats(x)$out ##显示异常值
boxplot(x)
boxplot(mpg~cyl,data=mtcars, xlab="Cylinders", ylab="MPG") ##汽车的数据示例
二维的箱线图异常检测(并集而非交集)
x <- rnorm(1000);y <- rnorm(1000)
f <- data.frame(x,y)
a <- boxplot.stats(x)$out;b <- boxplot.stats(y)$out
list <- union(a,b)
plot(f)
px <- f[f$x %in% a,];py <- f[f$y %in% b,]
p <- rbind(px,py)
par(new=TRUE)
plot(p$x, p$y,cex=2,col=2)
#结果并不准确,需结合实际
data <- read.csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")
outliers <- function(data, low, high) {
outs <- subset(data, data$X5.1 < low | data$X5.1 > high)
return(outs)
}
outliers(data, 4.5, 7.5) ## <4.5,>7.5为异常
install.packages(“DMwR”)
library(DMwR)
nospecies <- data[,1:4] ##移除“种类”列
scores <- lofactor(nospecies, k=3) #确定异常值
plot(density(scores)) #画出异常值分布
apriori()
install.packages("arules")
library(arules)
data <- read.csv("http://www.salemmarafi.com/wp-ontent/uploads/2014/03/groceries.csv")
rules <- apriori(data) ;rules #生成规则
##置信度默认为0.8,三个项目中有15295个事务,有五个规则
inspect(rules)
rules <- apriori(data, parameter = list(supp = 0.001, conf = 0.8)) #当参数修改后,生成500多个规则,但是置信度为0.001