- K均值聚类:K均值聚类是基于样本集合划分的聚类算法,是一种硬聚类算法。算法将样本集合划分为k个子集,构成k个类,将n个样本分到k个类中,每个样本到其所属类的中心距离最小,每个样本仅属于一个类。
- K均值聚类是生成式方法,聚类属于无监督学习,无监督学习中无法提供监督信号,基本上都是生成式模型,K均值聚类通过对数据进行建模生成聚类,不是对数据进行分类判别。
- KNN:KNN是最邻近分类算法,是数据挖掘分类技术的一种算法。可以解决聚类问题的经典算法,在处理大数据集合时,可以保证效率以及保持可伸缩性,但难以估计k值,对于不同的初值,可能导致不同结果,不适合非凸形簇或大小差别很大的簇。
K-means:K均值算法,可以处理分类问题,简单易懂,对于手写数字识别、鸢尾花分类这种问题,准确率较高。可以处理回归预测问题。但算法效率较低,不适用于大数据处理,并且对于训练数据的依赖度较大,可能导致预测的数据不准确,对训练数据的容错性太差。 - 主成分分析:主成分分析算法是一种线性降维方法,目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原数据点的特性。降维的目的就是为了尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大投影信息量的维度上进行投影。将原特征投影到这些维度上,使降维后信息量损失最小。
- PCA:PCA是一种无监督的降维方法,目的是为了让映射后的样本具有最大的发散性。为了去除原始数据集中冗余的维度,让投影子空间的各维度的方差尽可能大,降低的维度与类别无关,主要用于提取数据的主要特征分量。
LDA:LDA是一种有监督的降维方法,为了让映射后的样本具有最好的分类性能。将线性分类看作数据降维的一种应用,可以作为一种特征抽取的技术,最多降低到k-1维,在样本分类信息依赖方差而不是均值的时候,降维效果较差,可能会产生过拟合。 - 奇异值分解:奇异值分解可以用于降维算法中的特征分解,还可用于推荐系统,以及自然语言处理等领域。奇异值相当于方阵中的特征值,奇异值分解相当于特征值分解。SVD同样是对矩阵进行分解,但是和特征分解不同,并不要求分解的矩阵是方阵,适用于任何矩阵的分解。
- 特征人脸方法:利用PCA得到人脸分布的主要成分,具体实现是对训练集中所有人脸图像的协方差矩阵进行特征值分解,得对对应的特征向量,这些特征向量就是“特征脸”。每个特征向量或者特征脸相当于捕捉或者描述人脸之间的一种变化或者特性。这就意味着每个人脸都可以表示为这些特征脸的线性组合。
- 潜在语义分析:潜在语义分析是一种无监督学习方法,主要用于文本的话题分析,特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系,最初应用于文本信息检索,也被称为潜在语义索引。将文本集合表示为单词-文本矩阵,对单词-文本矩阵进行奇异值分解,从而得到话题向量空间,以及文本在话题向量空间的表示。
- 期望最大化算法:是最常见的隐变量估计方法,是一种迭代优化策略,其计算方法中每一次迭代都分两步,其中一个为期望步(E步),另一个为极大步(M步),所以算法被称为EM算法。基本思想是,根据己经给出的观测数据,估计出模型参数的值;然后再依据上一步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前己经观测到的数据重新再对参数值进行估计,然后反复迭代,直至最后收敛,迭代结束。
- K-means是一种特殊的EM算法,步骤中只包括E步骤和M步骤,不存在参数更新过程,可以说是一种简化版的EM算法,但是并不是最简单的EM算法,更简单的EM算法还有比如单变量高斯模型的EM算法。
- 编程实现EM算法:
import numpy as np # 初始化参数 theta = np.array([0.5, 0.5]) # 初始的两个类别的概率 mu = np.array([1, 4]) # 初始的两个高斯分布的均值 sigma = np.array([1, 1]) # 初始的两个高斯分布的标准差 # 生成数据 np.random.seed(1) N = 1000 x = np.random.normal(0, 1, N) z = np.random.choice([0, 1], size=N, p=theta) x[z == 0] = x[z == 0] * sigma[0] + mu[0] x[z == 1] = x[z == 1] * sigma[1] + mu[1] # EM算法 for _ in range(10): # E步骤 p_z_x = np.zeros((2, N)) for k in range(2): p_z_x[k] = theta[k] * np.exp(-0.5 * (x - mu[k]) ** 2 / sigma[k] ** 2) p_z_x /= np.sum(p_z_x, axis=0) # M步骤 N_k = np.sum(p_z_x, axis=1) theta = N_k / N mu = np.sum(p_z_x * x, axis=1) / N_k sigma = np.sqrt(np.sum(p_z_x * (x - mu.reshape(-1, 1)) ** 2, axis=1) / N_k) print(theta, mu, sigma)
【22-23春】AI作业4
最新推荐文章于 2024-08-15 16:46:21 发布