AI作业4-无监督学习

K均值聚类

一种常用的无监督学习算法,基于数据点之间的距离来进行聚类,通过最小化簇内点到簇中心的距离的平方和来进行优化。

K均值聚类是生成式还是判别式方法

不是生成式也不是判别式。

KNN VS. K-means
  1. 监督学习 vs. 无监督学习:KNN是一种监督学习算法,而K-means是一种无监督学习算法。
  2. 分类/回归 vs. 聚类:KNN用于分类和回归问题,而K-means用于聚类问题。
  3. 预测新数据点 vs. 确定数据点的分组:KNN用于预测新数据点的标签或数值,而K-means用于确定数据点的分组。
  4. 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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追寻远方的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值