这是一个经典的无监督学习问题,具有简单的最大似然解决方案。该解决方案是期望最大化算法的一个激励示例。过程是:
- 初始化组分配
- 估计分组方式和可能性。
- 计算每个观察到任一组的成员的可能性
- 基于 MLE 分配组标签
重复步骤 2-4 直到收敛,即没有重新分配组。
WLOG 我可以假设我知道所有 200 人中有 80 人是女性。另一件需要注意的事情是,如果我们不建立女性比男性矮的假设,那么聚类算法就不太清楚哪个组被标记为哪个组,有趣的是,聚类标签分配可以颠倒。
set.seed(1)
Women=rnorm(80, mean=168, sd=6)
Men=rnorm(120, mean=182, sd=7)
AllHeight <- c(Women, Men)
trueMF <- rep(c('F', 'M'), c(80, 120))
## case1 assume women are shorter, so assign first
## 80 lowest height
MF <- ifelse(order(AllHeight) <= 80, 'F', 'M')
## case 2 try randomly allocating
# MF <- sample(trueMF, replace = F)
steps <- 0
repeat {
steps <- steps + 1
mu <- tapply(AllHeight, MF, mean)
sd <- tapply(AllHeight, MF, sd)
logLik <- mapply(dnorm, x=list(AllHeight), mean=mu, sd=sd,
log=T)
MFnew <- c('F', 'M')[apply(logLik, 1, which.max)]
if (all(MF==MFnew)) break
else MF <- MFnew
}
## case 1:
# 85% correct
# 2 steps
# Means
# F M
# 168.7847 183.5424
## case 2:
## 15% correct
## 7 steps
# F M
# 183.5424 168.7847
## what else?