AI作业4-无监督学习

  1. K均值聚类:K均值聚类是一种无监督学习算法,它的目标是将样本数据集分成K个不同的簇或群组。K均值聚类通过计算每个样本与簇中心的距离来对样本进行聚类,并将相似的样本分配到同一个簇中。其中K值是事先给定的,用户需要根据实际情况自行设定。K均值聚类的优点是简单易懂、计算速度快,但缺点是对于非凸形状的数据集,效果可能会较差。

  2. K均值聚类是生成式方法:K均值聚类属于生成式方法,它假设数据服从某种概率分布,然后使用该分布来对观测数据进行建模、分类和预测。在K均值聚类中,它通过计算每个簇中所有样本的均值来估计该簇的概率分布,然后使用这些概率分布来对新样本进行分类。

  3. KNN和K-means:KNN和K-means都是机器学习中常见的算法,但它们的应用场景和算法思想有所不同。KNN是一种基于实例的学习方法,它通过查找最近邻居来预测新样本的标签。而K-means是一种聚类算法,它将样本根据它们的相似性分为不同的簇。

  4. 主成分分析(PCA)和线性判别分析(LDA):PCA和LDA都是降维技术,但它们的目的不同。PCA旨在找到数据中具有最大方差的主要成分,以减少数据的维度。而LDA则旨在找到可以使不同类之间区分度最大的最佳特征子集。这两种算法应用不同,PCA通常应用于数据压缩、特征提取和图像处理等领域,而LDA通常应用于分类问题。

  5. 奇异值分解(SVD):奇异值分解是一种矩阵分解技术,它将任意矩阵分解为三个矩阵的乘积:U、Sigma和V转置。其中,U和V是正交矩阵,Sigma是对角矩阵,包含了原始矩阵特征值的平方根。SVD常用于数据压缩、降维和图像处理等领域。

  6. 特征人脸方法(Eigenface):特征人脸方法是一种用于人脸识别的算法,它通过将人脸图像分解为特征向量(即“特征脸”)来进行识别。该算法首先使用PCA对训练集中的人脸图像进行降维和特征提取,然后使用这些特征向量来构建每个人的“特征脸”,最后通过比较待识别的人脸图像与已知的特征脸,来识别出该人的身份。

  7. 潜在语义分析(LSA):潜在语义分析是一种基于矩阵分解的文本挖掘技术,它将文本文档映射到低维语义空间中,以便更好地理解文本之间的关系和主题。在LSA中,文本数据首先被表示为一个文档-词项矩阵,然后使用SVD对该矩阵进行分解,得到文本数据在低维语义空间中的表示。

  8. 期望最大化算法(EM):期望最大化算法是一种迭代优化算法,用于估计包含潜在变量的概率模型参数。EM算法经常用于高斯混合模型、隐马尔可夫模型等的学习与推断。EM算法的核心思想是通过迭代的方式,交替进行“E步”和“M步”,来不断优化模型参数。在E步中,算法基于当前模型参数估计潜在变量的后验分布;在M步中,算法基于所估计的潜在变量后验分布更新模型参数。

  9. K-means是最简单的EM算法:K-means可以看作是一种特殊的EM算法,用于聚类问题。在K-means算法中,每个簇的中心被视为高斯混合模型中的一个组件,每个样本都被视为由一个高斯分布生成的数据点。因此,K-means可以看作是使用均值和样本方差来估计高斯分布参数的特殊情况。

  10. 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
     
        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]
     
        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
     
    
        for i in range(max_iter):
            p = E_step(samples, mu, sigma, alpha)
            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、付费专栏及课程。

余额充值