AI作业4-无监督学习

1、K均值聚类  

        K-means,属于无监督学习,通过迭代方式实现。策略是把相近的分为一类。算法大概为:

        (1)选n个质心(质心的个数(n>=2)和位置开始是由人定,但是质心个数和位置的选择对最终结果会有一定影响)

        (2)计算每个数据到质心的欧氏距离(不足:不同维度的重要性相同),判断数据距离哪个质心最近,将其归为一类

        (3)根据归为一类的数据求出新的质心值

        (4)重复(2)(3)直到质心值基本保持不变或迭代次数达规定阈值(时间开销大)

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

        K均值聚类是生成式方法。

        理由:通过相似度(或是特征,这里是欧氏距离的远近)学习数据的分布规律,得到结果。

3、KNN  VS.  K-means

同:思想:都是通过点之间的距离解决问题

异:k:KNN(k-Nearest Neighbor)中的k是离一个点距离最近的k个点

             K-means中的k是k个质心,形成k簇

        思想:KNN是找点P距离最近的k个点,判断这k个点多数是什么特征(带标签),则P表示的样本就判断为什么特征;K-means是给k个质心(位置不确定),利用质心与样本点之间的距离不断改变质心位置,以改变簇中样本,最终,在哪一簇就是有那一簇相似的特征。KNN属于监督学习,k-means属于无监督学习

        KNN属于判别式方法,k-means属于生成式方法。     

4、主成分分析

        抓住重要特征后进行降维。主要是通过将样本点投影到某个方向上使得方差最大(将点打散)

算法:样本中心化(使得计算量变小)->计算协方差矩阵(表示各点之间的相关程度,协方差为0则彼此无关)->协方差矩阵的特征值分解,对特征根排序->选择前L个最大特征根对应的特征向量组成映射矩阵(投影后选方差最大的L个)

5、LDA VS. PCA

同:二者都利用了映射的方法,找到特征向量w

异:LDA为监督学习,有给出的标签,知道分类,目的是将类内尽可能“近”,类外尽可能“远”,维    度与类别个数有关

       PCA为无监督学习,没有标签,自己学习,将数据通过映射打散,维度由原始数据特征有关

6、奇异值分解(SVD)

目的也是将复杂问题简单化。将一个复杂矩阵变成三个简单矩阵,其中,中间的那个只有主对角线上有值,其他元素均为0的矩阵中的值就是奇异值。(奇异值求法:求A的奇异值,首先求出、的所有特征值等和特征向量v、u,利用求出奇异值)

7、特征人脸方法(Eigenface)

        利用奇异值分解以简化运算,利用PCA实现降维,在另一较低维空间中做相似度计算。每幅人脸都是特征人脸(由特征向量还原)的线性组合,利用线性组合的系数来表示原始人脸图像

8、潜在语义分析 (LSA)

        以话题向量表示文本的语义内容。通过奇异值分解将文本从单词向量空间映射到话题向量空间(单词文本矩阵=单词话题矩阵*话题话题矩阵*话题文本矩阵)

9、期望最大化算法(EM)

        通过不断优化函数得出结果。

    算法:1、假设模型参数初始值,估计隐变量取值(E步),转2

               2、根据观测数据、模型参数、隐变量,最大化“拟合”数据,更新模型参数(M步),转3

               3、利用模型参数更新隐变量取值,算法收敛则结束,否则转2

10、K-means是最简单的EM算法?

        K-means是最简单的EM算法。

        K-means是初始化质心后根据质心与各点的距离判断是否属于一个集合,然后利用数据重新计算质心位置,再重新将数据放入距离最近质心的集合中,反复迭代,直至质心基本保持不变

        EM是初始化参数后求出隐变量取值,根据数据、参数、隐变量重新计算模型参数,再重新利用参数更新隐变量取值,反复迭代,直至算法收敛K-means中质心的位置就是EM中的参数取值,都是反复迭代直至参数基本不变。


11、编程实现EM算法。

def EM_algorithm(samples, n_components, max_iter=100, tol=1e-4):
    # 初始化均值和方差
    mu = np.random.uniform(samples.min(), samples.max(), size=n_components)
    sigma = np.random.uniform(0, 1, size=n_components)
 
    # 初始化混合系数
    alpha = np.ones(n_components) / n_components
 
    # 定义E步骤
    def E_step(samples, mu, sigma, alpha):
        p = np.zeros((len(samples), n_components))
        for i in range(n_components):
            p[:, i] = alpha[i] * norm.pdf(samples, mu[i], sigma[i])
        return p / p.sum(axis=1)[:, None]
 
    # 定义M步骤
    def M_step(samples, p):
        mu_new = np.sum(p * samples[:, None], axis=0) / np.sum(p, axis=0)
        sigma_new = np.sqrt(np.sum(p * (samples[:, None] - mu_new) ** 2, axis=0) / np.sum(p, axis=0))
        alpha_new = np.mean(p, axis=0)
        return mu_new, sigma_new, alpha_new
 
    # 迭代EM算法
    for i in range(max_iter):
        # E步骤:计算隐变量的期望
        p = E_step(samples, mu, sigma, alpha)
 
        # M步骤:最大化对数似然函数更新参数
        mu_new, sigma_new, alpha_new = M_step(samples, p)
 
        # 计算对数似然函数并判断是否收敛
        log_likelihood = np.sum(np.log(np.sum(p, axis=1)))
        if i > 0 and log_likelihood - log_likelihood_old < tol:
            break
        log_likelihood_old = log_likelihood
 
        # 更新参数
        mu, sigma, alpha = mu_new, sigma_new, alpha_new
 
    return mu, sigma, alpha, p

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值