K均值聚类
一种常用的无监督学习算法,基于数据点之间的距离来进行聚类,通过最小化簇内点到簇中心的距离的平方和来进行优化。
K均值聚类是生成式还是判别式方法
不是生成式也不是判别式。
KNN VS. K-means
- 监督学习 vs. 无监督学习:KNN是一种监督学习算法,而K-means是一种无监督学习算法。
- 分类/回归 vs. 聚类:KNN用于分类和回归问题,而K-means用于聚类问题。
- 预测新数据点 vs. 确定数据点的分组:KNN用于预测新数据点的标签或数值,而K-means用于确定数据点的分组。
- K值的含义不同:在KNN中,K代表要考虑的最近邻居的数量,而在K-means中,K代表要将数据点分成的簇的数量。
主成分分析
将高维数据映射到低维空间,从而实现对数据的降维和特征提取
LDA VS. PCA
LDA 让映射后的样本有最好的分类性能 PCA 让映射后的样本有最大的发散性
奇异值分解(SVD)
对于一个
m
×
n
m \times n
m×n的实矩阵
A
A
A,它的奇异值分解为:
A
=
U
Σ
V
T
A = U Σ V^T
A=UΣVT
其中, U U U是 m × m m \times m m×m的正交矩阵, V V V是 n × n n \times n n×n的正交矩阵, Σ \Sigma Σ是 m × n m \times n m×n的对角矩阵,对角线上的元素 σ 1 , σ 2 , . . . , σ r \sigma_1,\sigma_2,...,\sigma_r σ1,σ2,...,σr称为 A A A的奇异值( r = m i n ( m , n ) r=min(m,n) r=min(m,n))。 Σ \Sigma Σ的其余元素都是零。
具体来说, U U U和 V V V的列向量是 A A T AA^T AAT和 A T A A^TA ATA的特征向量, Σ \Sigma Σ的对角线元素是 A A T AA^T AAT和 A T A A^TA ATA的非零特征值的平方根。
特征人脸方法(Eigenface)
基于奇异值分解(SVD)的思想,通过计算训练集中人脸图像的主成分,从而得到一组人脸特征向量,这些特征向量被称为Eigenface。
潜在语义分析 (LSA)
基于奇异值分解(SVD)的文本挖掘技术,它通过将文本转化为向量空间模型,利用矩阵分解技术找到文本语义的潜在结构,从而实现文本的自动分类、聚类和相似性计算。
期望最大化算法(EM)
一种常用的统计学习算法,用于估计包含隐变量的概率模型的参数。它通过迭代的方式,交替进行两个步骤:E步骤和M步骤,从而不断更新模型参数,直到收敛。
K-means是最简单的EM算法
可以说K-means是EM算法的一种特殊情况,它可以看作是最简单的EM算法之一,但并不完全等同于EM算法。
编程实现EM算法
import math
def cal_mu(w, p, q, xi):
return w * math.pow(p, xi) * math.pow(1 - p, 1 - xi) / \
float(w * math.pow(p, xi) * math.pow(1 - p, 1 - xi) +
(1 - w) * math.pow(q, xi) * math.pow(1 - q, 1 - xi))
def e_step(w, p, q, x):
mu = [cal_mu(w, p, q, xi) for xi in x]
return mu
def m_step(mu, x):
w = sum(mu) / len(mu)
p = sum([mu[i] * x[i] for i in range(len(mu))]) / sum(mu)
q = sum([(1 - mu[i]) * x[i] for i in range(len(mu))]) / \
sum([1 - mu[i] for i in range(len(mu))])
return [w, p, q]
def run(x, w, p, q, maxiteration):
for i in range(maxiteration):
mu = e_step(w, p, q, x)
print(i, [w, p, q])
if [w, p, q] == m_step(mu, x):
break
else:
[w, p, q] = m_step(mu, x)
print([w, p, q])
if __name__ == "__main__":
x = [1, 1, 0, 1, 0, 0, 1, 0, 1, 1]
[w, p, q] = [0.4, 0.6, 0.7]
run(x, w, p, q, 100)