首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中k均值的生成预测函数

R中k均值的生成预测函数
EN

Stack Overflow用户
提问于 2018-11-17 15:00:05
回答 1查看 1.1K关注 0票数 1

我想要创建预测函数来预测哪一个聚类,观察属于哪一个。

代码语言:javascript
复制
data(iris)
 mydata=iris
m=mydata[1:4]
train=head(m,100)
xNew=head(m,10)


rownames(train)<-1:nrow(train)

norm_eucl=function(train)
  train/apply(train,1,function(x)sum(x^2)^.5)
m_norm=norm_eucl(train)


result=kmeans(m_norm,3,30)

predict.kmean <- function(cluster, newdata)
{
  simMat <- m_norm(rbind(cluster, newdata),
              sel=(1:nrow(newdata)) + nrow(cluster))[1:nrow(cluster), ]
  unname(apply(simMat, 2, which.max))
}

## assign new data samples to exemplars
predict.kmean(m_norm, x[result$cluster, ], xNew)

在我得到错误后

代码语言:javascript
复制
Error in predict.kmean(m_norm, x[result$cluster, ], xNew) : 
  unused argument (xNew)

我知道我做错了什么功能,因为我只是在学习去做,但是我不知道具体在哪里。

实际上,我想采用ap群集的类似功能(我曾见过类似的主题,但对于ap群集)。

代码语言:javascript
复制
predict.apcluster <- function(s, exemplars, newdata)
{
  simMat <- s(rbind(exemplars, newdata),
              sel=(1:nrow(newdata)) + nrow(exemplars))[1:nrow(exemplars), ]
  unname(apply(simMat, 2, which.max))
}

## assign new data samples to exemplars
predict.apcluster(negDistMat(r=2), x[apres@exemplars, ], xNew)

怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-17 16:00:19

与其试图复制某件东西,不如我们想出我们自己的功能。对于给定的向量x,我们希望使用一些先前的k均值输出来分配一个集群.考虑到k均值算法的工作原理,我们想要的是找到哪个集群的中心离x最近。这可以作为

代码语言:javascript
复制
predict.kmeans <- function(x, newdata)
  apply(newdata, 1, function(r) which.min(colSums((t(x$centers) - r)^2)))

也就是说,我们逐行检查newdata,计算对应的行到每个中心的距离,并找到最小的距离。然后,例如,

代码语言:javascript
复制
head(predict(result, train / sqrt(rowSums(train^2))), 3)
# 1 2 3 
# 2 2 2
all.equal(predict(result, train / sqrt(rowSums(train^2))), result$cluster)
# [1] TRUE

这证实了我们的预测功能将所有相同的聚类分配给训练观测。然后也

代码语言:javascript
复制
predict(result, xNew / sqrt(rowSums(xNew^2)))
#  1  2  3  4  5  6  7  8  9 10 
#  2  2  2  2  2  2  2  2  2  2 

还请注意,我调用的只是predict而不是predict.kmeans。这是因为result属于kmeans类,并且自动选择正确的方法。还请注意,我是如何在没有使用apply的情况下,以矢量化的方式规范化数据的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53352409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档