-
K均值聚类:K均值聚类是一种无监督学习算法,它的目标是将样本数据集分成K个不同的簇或群组。K均值聚类通过计算每个样本与簇中心的距离来对样本进行聚类,并将相似的样本分配到同一个簇中。其中K值是事先给定的,用户需要根据实际情况自行设定。K均值聚类的优点是简单易懂、计算速度快,但缺点是对于非凸形状的数据集,效果可能会较差。
-
K均值聚类是生成式方法:K均值聚类属于生成式方法,它假设数据服从某种概率分布,然后使用该分布来对观测数据进行建模、分类和预测。在K均值聚类中,它通过计算每个簇中所有样本的均值来估计该簇的概率分布,然后使用这些概率分布来对新样本进行分类。
-
KNN和K-means:KNN和K-means都是机器学习中常见的算法,但它们的应用场景和算法思想有所不同。KNN是一种基于实例的学习方法,它通过查找最近邻居来预测新样本的标签。而K-means是一种聚类算法,它将样本根据它们的相似性分为不同的簇。
-
主成分分析(PCA)和线性判别分析(LDA):PCA和LDA都是降维技术,但它们的目的不同。PCA旨在找到数据中具有最大方差的主要成分,以减少数据的维度。而LDA则旨在找到可以使不同类之间区分度最大的最佳特征子集。这两种算法应用不同,PCA通常应用于数据压缩、特征提取和图像处理等领域,而LDA通常应用于分类问题。
-
奇异值分解(SVD):奇异值分解是一种矩阵分解技术,它将任意矩阵分解为三个矩阵的乘积:U、Sigma和V转置。其中,U和V是正交矩阵,Sigma是对角矩阵,包含了原始矩阵特征值的平方根。SVD常用于数据压缩、降维和图像处理等领域。
-
特征人脸方法(Eigenface):特征人脸方法是一种用于人脸识别的算法,它通过将人脸图像分解为特征向量(即“特征脸”)来进行识别。该算法首先使用PCA对训练集中的人脸图像进行降维和特征提取,然后使用这些特征向量来构建每个人的“特征脸”,最后通过比较待识别的人脸图像与已知的特征脸,来识别出该人的身份。
-
潜在语义分析(LSA):潜在语义分析是一种基于矩阵分解的文本挖掘技术,它将文本文档映射到低维语义空间中,以便更好地理解文本之间的关系和主题。在LSA中,文本数据首先被表示为一个文档-词项矩阵,然后使用SVD对该矩阵进行分解,得到文本数据在低维语义空间中的表示。
-
期望最大化算法(EM):期望最大化算法是一种迭代优化算法,用于估计包含潜在变量的概率模型参数。EM算法经常用于高斯混合模型、隐马尔可夫模型等的学习与推断。EM算法的核心思想是通过迭代的方式,交替进行“E步”和“M步”,来不断优化模型参数。在E步中,算法基于当前模型参数估计潜在变量的后验分布;在M步中,算法基于所估计的潜在变量后验分布更新模型参数。
-
K-means是最简单的EM算法:K-means可以看作是一种特殊的EM算法,用于聚类问题。在K-means算法中,每个簇的中心被视为高斯混合模型中的一个组件,每个样本都被视为由一个高斯分布生成的数据点。因此,K-means可以看作是使用均值和样本方差来估计高斯分布参数的特殊情况。
-
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
AI作业4-无监督学习
于 2023-04-12 12:53:45 首次发布