1.K均值聚类
从数据中选择k个对象作为初始聚类中心,计算每个聚类对象到聚类中心的距离来划分,再次计算每个聚类中心,计算标准测度函数,直到达到最大迭代次数,则停止,否则,继续操作,这样就可以确定最优的聚类中心,中心确定以后就可以进行聚类
2.K均值聚类是生成式还是判别式方法
属于判别式方法
3.KNN VS 、K-means
KNN VS
KNN是一种惰性的、非参的算法模型。非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说 KNN 建立的模型结构是根据数据来决定的。
K-means
KMeans的核心目标是将给定的数据集划分成K个簇(K是超参),并给出每个样本数据对应的中心点。
4.主成分分析
主成分分析是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。为了全面分析问题,往往提出很多与此有关的变量(或因素),因为每个变量都在不同程度上反映这个课题的某些信息。主成分分析首先是由K.皮尔森对非随机变量引入的,后H.霍特林将此方法推广到随机向量的情形。信息的大小通常用离差平方和或方差来衡量。
5.LDA VS、PCA
LDA VS
LDA线性判别分析。LDA是一种监督学习的降维技术。主要用于数据预处理中的降维、分类任务。LDA的目标是最大化类间区分度的坐标轴成分,将特征空间投影到一个维度更小的k维子空间中,同时保持区分类别的信息。简而言之,LDA投影后的数据类内方差最小,类间方差最大。
PCA
PCA,主成分分析。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
6.奇异值分解(SVD)
奇异值分解是线性代数中一种重要的矩阵分解,在信号处理、统计学等领域有重要应用。奇异值分解在某些方面与对称矩阵或厄米矩陣基于特征向量的对角化类似。然而这两种矩阵分解尽管有其相关性,但还是有明显的不同。对称阵特征向量分解的基础是谱分析,而奇异值分解则是谱分析理论在任意矩阵上的推广。
7.特征人脸方法(Elgenface)
提出了一种借助 PCA 方法进行有效人脸识别的方法——特征脸法,就相当于把人脸从像素空间变换到另一个空间,在另一个空间中做相似性的计算,首先选择一个合适的子空间,将所有的图像变换到这个子空间上,然后再在这个子空间上衡量相似性或者进行分类学习。
8.潜在语义分析(LSA)
LSA主要用于文本的主题提取,挖掘文本背后的含义、数据降维等
9.期待最大化算法(EM)
EM算法主要分为两个步骤:E-step(求期望步骤,用来求出当前迭代轮次所要最大化的期望的表达式)以及M-step(最大化期望步骤,通过令偏导为0的形式求出该轮次使得期望最大化的所有参数的迭代计算式)。EM算法的执行过程就是从初始轮次开始,每一轮顺次执行E、M两个步骤,直至各参数收敛。
10.K-means是最简单的EM算法?
是最简单的一种之一
11.编程实现EM算法
import numpy as np
import math
import copy
import matplotlib.pyplot as plt
isdebug = True
def init_data(Sigma,Mu1,Mu2,k,N):
global X
global Mu
global Expectations
X = np.zeros((1,N))
Mu = np.random.random(k)
Expectations = np.zeros((N,k))
for i in range(0,N):
if np.random.random(1) > 0.5:
X[0,i] = np.random.normal(Mu1, Sigma)
else:
X[0,i] = np.random.normal(Mu2, Sigma)
if isdebug:
print("***********")
print("初始观测数据X:")
print(X )
def e_step(Sigma, k, N):
global Expectations
global Mu
global X
for i in range(0,N):
Denom = 0
Numer = [0.0] * k
for j in range(0,k):
Numer[j] = math.exp((-1/(2*(float(Sigma**2))))*(float(X[0,i]-Mu[j]))**2)
Denom += Numer[j]
for j in range(0,k):
Expectations[i,j] = Numer[j] / Denom
if isdebug:
print("***********")
print("隐藏变量E(Z):")
print(Expectations)
def m_step(k,N):
global Expectations
global X
for j in range(0,k):
Numer = 0
Denom = 0
for i in range(0,N):
Numer += Expectations[i,j]*X[0,i]
Denom +=Expectations[i,j]
Mu[j] = Numer / Denom
def run(Sigma,Mu1,Mu2,k,N,iter_num,Epsilon):
init_data(Sigma,Mu1,Mu2,k,N)
print("初始<u1,u2>:", Mu)
for i in range(iter_num):
Old_Mu = copy.deepcopy(Mu)
e_step(Sigma,k,N)
m_step(k,N)
print(i,Mu)
if sum(abs(Mu - Old_Mu)) < Epsilon:
break
if __name__ == '__main__':
sigma = 6
mu1 = 40
mu2 = 20
k = 2
N = 1000
iter_num = 1000
epsilon = 0.0001
run(sigma,mu1,mu2,k,N,iter_num,epsilon)
plt.hist(X[0,:],50)
plt.show()