线性回归与逻辑回归的区别如下描述:
(1)线性回归的样本的输出,都是连续值,$ y\in (-\infty ,+\infty ) , 而 逻 辑 回 归 中 ,而逻辑回归中 ,而逻辑回归中y\in (0,1)$,只能取0和1。
(2)对于拟合函数也有本质上的差别:
线性回归: f ( x ) = θ T x = θ 1 x 1 + θ 2 x 2 + . . . + θ n x n f(x)=\theta ^{T}x=\theta _{1}x _{1}+\theta _{2}x _{2}+...+\theta _{n}x _{n} f(x)=θTx=θ1x1+θ2x2+...+θnxn
逻辑回归: f ( x ) = P ( y = 1 ∣ x ; θ ) = g ( θ T x ) f(x)=P(y=1|x;\theta )=g(\theta ^{T}x) f(x)=P(y=1∣x;θ)=g(θTx),其中, g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
可以看出,线性回归的拟合函数,是对f(x)的输出变量y的拟合,而逻辑回归的拟合函数是对为1类样本的概率的拟合。
那么,为什么要以1类样本的概率进行拟合呢,为什么可以这样拟合呢?
θ T x = 0 \theta ^{T}x=0 θTx=0就相当于是1类和0类的决策边界:
当 θ T x > 0 \theta ^{T}x>0 θTx>0,则y>0.5;若 θ T x → + ∞ \theta ^{T}x\rightarrow +\infty θTx→+∞,则 y → 1 y \rightarrow 1 y→1,即y为1类;
当 θ T x < 0 \theta ^{T}x<0 θTx<0,则y<0.5;若 θ T x → − ∞ \theta ^{T}x\rightarrow -\infty θTx→−∞,则 y → 0 y \rightarrow 0 y→0,即y为0类;
这个时候就能看出区别,在线性回归中 θ T x \theta ^{T}x θTx为预测值的拟合函数;而在逻辑回归中 θ T x \theta ^{T}x θTx为决策边界。下表2-3为线性回归和逻辑回归的区别。
表2-3 线性回归和逻辑回归的区别
线性回归 | 逻辑回归 | |
---|---|---|
目的 | 预测 | 分类 |
y ( i ) y^{(i)} y(i) | 未知 | (0,1) |
函数 | 拟合函数 | 预测函数 |
参数计算方式 | 最小二乘法 | 极大似然估计 |
下面具体解释一下:
线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
那么怎么理解呢?我们来看几个例子
上面两个例子,我们看到特征值与目标值之间建立的一个关系,这个可以理解为回归方程。
线性回归当中的关系有两种,一种是线性关系,另一种是非线性关系
在这里我们只能画一个平面更好去理解,所以都用单个特征举例子。
线性关系
注释:如果在单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面的关系
更高维度的我们不用自己去想,记住这种关系即可
非线性关系
假设刚才的房子例子,真实的数据之间存在这样的关系
真实关系:真实房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率
那么现在呢,我们随意指定一个关系(猜测)
随机指定关系:预测房子价格 = 0.25×中心区域的距离 + 0.14×城市一氧化氮浓度 + 0.42×自住房平均房价 + 0.34×城镇犯罪率
请问这样的话,会发生什么?真实结果与我们预测的结果之间是不是存在一定的误差呢?类似这样样子
那么存在这个误差,我们将这个误差给衡量出来
如何去减少这个损失,使我们预测的更加准确些?既然存在了这个损失,我们一直说机器学习有自动学习的功能,在线性回归这里更是能够体现。这里可以通过一些优化方法去优化(其实是数学当中的求导功能)回归的总损失!!!
如何去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值)
线性回归经常使用的两种优化算法
W = ( X T X ) − 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)−1XTy
理解:X为特征值矩阵,y为目标值矩阵。直接求到最好的结果
缺点:当特征过多过复杂时,求解速度太慢并且得不到结果
(1)确定优化模型的假设函数及损失函数。
h θ ( x 1 , x 2 , . . . , x n ) = θ 0 + θ 1 x 1 + . . . + θ n x n h_\theta(x_1,x_2,...,x_n)=\theta_0+\theta_1x_1+...+\theta_nx_n hθ(x1,x2,...,xn)=θ0+θ1x1+...+θnxn
J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ j = 0 m ( h θ ( x 0 ( j ) , x 1 ( j ) , . . . , x n ( j ) ) − y j ) 2 J(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2m}\sum^{m}_{j=0}(h_\theta (x^{(j)}_0 ,x^{(j)}_1,...,x^{(j)}_n)-y_j)^2 J(θ0,θ1,...,θn)=2m1j=0∑m(hθ(x0(j),x1(j),...,xn(j))−yj)2
(2)相关参数初始化。
(3)迭代计算。
∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ j = 0 m ( h θ ( x 0 ( j ) , x 1 ( j ) , . . . , x n ( j ) ) − y j ) 2 \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n)=\frac{1}{2m}\sum^{m}_{j=0}(h_\theta (x^{(j)}_0 ,x^{(j)}_1,...,x^{(j)}_n)-y_j)^2 ∂θi∂J(θ0,θ1,...,θn)=2m1j=0∑m(hθ(x0(j),x1(j),...,xn(j))−yj)2
φ i = α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) {\varphi}_i={\alpha} \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n) φi=α∂θi∂J(θ0,θ1,...,θn)
θ i = θ i − α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) {\theta}_i={\theta}_i-\alpha \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n) θi=θi−α∂θi∂J(θ0,θ1,...,θn)
θ i = θ i − α 1 m ∑ j = 0 m ( h θ ( x 0 ( j ) , x 1 ( j ) , . . . , x n ( j ) ) − y j ) x i ( j ) \theta_i=\theta_i - \alpha \frac{1}{m} \sum^{m}_{j=0}(h_\theta (x^{(j)}_0 ,x^{(j)}_1,...,x^{(j)}_n)-y_j)x^{(j)}_i θi=θi−αm1j=0∑m(hθ(x0(j),x1(j),...,xn(j))−yj)xi(j)
理解:α为学习速率,需要手动指定(超参数),α旁边的整体表示方向
沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值
使用:面对训练数据规模十分庞大的任务 ,能够找到较好的结果
sklearn.linear_model.LinearRegression(fit_intercept=True)
sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)
sklearn提供给我们两种实现的API, 可以根据选择使用
def mylinearregression():
"""
线性回归预测房子价格
:return:
"""
lb = load_boston()
# print(lb.data)
# print(lb.target)
# 对数据集进行划分
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.3, random_state=24)
# 需要做标准化处理对于特征值处理
std_x = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.fit_transform(x_test)
# print(x_train)
# 对于目标值进行标准化
std_y = StandardScaler()
y_train = std_y.fit_transform(y_train)
y_test = std_y.transform(y_test)
y_test = std_y.inverse_transform(y_test)
# 使用线性模型进行预测
# 使用正规方程求解
lr = LinearRegression()
# # 此时在干什么?
lr.fit(x_train, y_train)
y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
print(lr.coef_)
print("正规方程预测的结果为:", y_lr_predict)
print("正规方程的均方误差为:", mean_squared_error(y_test, y_lr_predict))
# 梯度下降进行预测
sgd = SGDRegressor()
sgd.fit(x_train, y_train)
print("SGD的权重参数为:", sgd.coef_)
y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
print("SGD的预测的结果为:", y_sgd_predict)
# # 怎么评判这两个方法好坏
print("SGD的均方误差为:", mean_squared_error(y_test, y_sgd_predict))
return None
梯度下降 | 正规方程 |
---|---|
需要选择学习率 | 不需要 |
需要迭代求解 | 一次运算得出 |
特征数量较大可以使用 | 需要计算方程,时间复杂度高O(n3) |
梯度下降(Gradient Descent),原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以后面才有会一系列的改进。
随机梯度下降(Stochastic gradient descent)是一个优化方法。它在一次迭代时只考虑一个训练样本。
随机平均梯度法(Stochasitc Average Gradient),由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法
Scikit-learn:SGDRegressor、岭回归、逻辑回归等当中都会有SAG优化
那么是什么原因导致模型复杂?线性回归进行训练学习的时候变成模型会变得复杂,这里就对应前面再说的线性回归的两种关系,非线性关系的数据,也就是存在很多无用的特征或者现实中的事物特征跟目标值的关系并不是简单的线性关系。
在这里针对回归,我们选择了正则化。但是对于其他机器学习算法如分类算法来说也会出现这样的问题,除了一些算法本身作用之外(决策树、神经网络),我们更多的也是去自己做特征选择,包括之前说的删除、合并一些特征
在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,所以算法在学习的时候尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化
注:调整时候,算法并不知道某个特征影响,而是去调整参数得出优化的结果
岭回归,其实也是一种线性回归。只不过在算法建立回归方程时候,加上正则化的限制,从而达到解决过拟合的效果
All last four solvers support both dense and sparse data. However, only 'sag' supports sparse input when `fit_intercept` is True.
Ridge方法相当于SGDRegressor(penalty=‘l2’, loss=“squared_loss”),只不过SGDRegressor实现了一个普通的随机梯度下降学习,推荐使用Ridge(实现了SAG)
class _BaseRidgeCV(LinearModel):
def __init__(self, alphas=(0.1, 1.0, 10.0),
fit_intercept=True, normalize=False, scoring=None,
cv=None, gcv_mode=None,
store_cv_values=False):
rd = Ridge(alpha=1.0)
rd.fit(x_train, y_train)
print("岭回归的权重参数为:", rd.coef_)
y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
print("岭回归的预测的结果为:", y_rd_predict)
print("岭回归的均方误差为:", mean_squared_error(y_test, y_rd_predict))
我们可以怎样最有用地对其进行归纳和分组?我们可以怎样以一种压缩格式有效地表征数据?这都是无监督学习的目标,之所以称之为无监督,是因为这是从无标签的数据开始学习的。
选取专门用于测试分类、聚类算法的国际通用的UCI数据库中的IRIS数据集,IRIS数据集包含150个样本数据,分别取自三种不同 的莺尾属植物setosa、versicolor和virginica的花朵样本,每个数据含有4个属性,即萼片长度、萼片宽度、花瓣长度、花瓣宽度,单位为cm。 在数据集上执行不同的聚类算法,可以得到不同精度的聚类结果。基于前面描述的各算法原理及流程,可初步得如下聚类结果。
聚类方法 | 聚错样本数 | 运行时间/s | 平均准确率/(%) |
---|---|---|---|
K-means | 17 | 0.146001 | 89 |
层次聚类 | 51 | 0.128744 | 66 |
SOM | 22 | 5.267283 | 86 |
FCM | 12 | 0.470417 | 92 |
注:
(1) 聚错样本数:总的聚错的样本数,即各类中聚错的样本数的和;
(2) 运行时间:即聚类整个过程所耗费的时间,单位为s;
(3) 平均准确度:设原数据集有k个类,用 c i c_i ci表示第i类, n i n_i ni为 c i c_i ci中样本的个数, m i m_i mi为聚类正确的个数,则 m i / n i m_i/n_i mi/ni为 第i类中的精度,则平均精度为: a v g = 1 k ∑ i = 1 k m i n i avg=\frac{1}{k}\sum_{i=1}^{k}\frac{m_{i}}{n_{i}} avg=k1∑i=1knimi。
k-means是划分方法中较经典的聚类算法之一。由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。目前,许多算法均围绕着该算法进行扩展和改进。
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地 选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。 这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则,其定义如下:
E = ∑ i = 1 k ∑ p ∈ C i ∥ p − m i ∥ 2 E=\sum_{i=1}^{k}\sum_{p\in C_i}\left\|p-m_i\right\|^2 E=i=1∑kp∈Ci∑∥p−mi∥2
这里E是数据中所有对象的平方误差的总和,p是空间中的点, m i m_i mi是簇 C i C_i Ci的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。
算法流程:
sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)
S C i = b i − a i m a x ( b i , a i ) 注 : 对 于 每 个 点 i 为 已 聚 类 数 据 中 的 样 本 b i 为 i 到 其 它 族 群 的 所 有 样 本 的 距 离 最 小 值 a i 为 i 到 本 身 簇 的 距 离 平 均 值 。 最 终 计 算 出 所 有 的 样 本 点 的 轮 廓 系 数 平 均 值 SC_i = \frac{b_i-a_i}{max(b_i,a_i)}\\ 注:对于每个点i 为已聚类数据中的样本 \\ b_i 为i 到其它族群的所有样本的距离最小值\\ a_i 为i 到本身簇的距离平均值。\\最终计算出所有的样本点的轮廓系数平均值 SCi=max(bi,ai)bi−ai注:对于每个点i为已聚类数据中的样本bi为i到其它族群的所有样本的距离最小值ai为i到本身簇的距离平均值。最终计算出所有的样本点的轮廓系数平均值
如 果 b i > > a i : 趋 近 于 1 效 果 越 好 , b i < < a i : 趋 近 于 − 1 , 效 果 不 好 。 轮 廓 系 数 的 值 是 介 于 [ − 1 , 1 ] , 越 趋 近 于 1 代 表 内 聚 度 和 分 离 度 都 相 对 较 优 。 如果b_i>>a_i:趋近于1效果越好, b_i<
sklearn.metrics.silhouette_score(X, labels)
根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。
凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。
算法流程:——注:以采用最小距离的凝聚层次聚类算法为例:
SOM神经网络[11]是由芬兰神经网络专家Kohonen教授提出的,该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。
SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。 学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。
算法流程:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \left\{ \begin…
目前被广泛使用的聚类准则是取类内加权误差平方和的极小值。即:
( m i n ) J m ( U , V ) = ∑ j = 1 n ∑ i = 1 c u i j m d i j 2 ( x j , v i ) (min)J_m(U,V)=\sum^n_{j=1}\sum^c_{i=1}u^m_{ij}d^2_{ij}(x_j,v_i) (min)Jm(U,V)=j=1∑ni=1∑cuijmdij2(xj,vi)
其中 V V V为聚类中心, m m m为加权指数, d i j ( x j , v i ) = ∣ ∣ v i − x j ∣ ∣ d_{ij}(x_j,v_i)=||v_i-x_j|| dij(xj,vi)=∣∣vi−xj∣∣。
θ = arg max θ ∑ i = 1 m l o g P ( x ( i ) ; θ ) \theta = \mathop{\arg\max}_\theta\sum\limits_{i=1}^m logP(x^{(i)};\theta) θ=argmaxθi=1∑mlogP(x(i);θ)
θ = arg max θ ∑ i = 1 m l o g P ( x ( i ) ; θ ) = arg max θ ∑ i = 1 m l o g ∑ z ( i ) P ( x ( i ) , z ( i ) ; θ ) (a) \theta =\mathop{\arg\max}_\theta\sum\limits_{i=1}^m logP(x^{(i)};\theta) = \mathop{\arg\max}_\theta\sum\limits_{i=1}^m log\sum\limits_{z^{(i)}}P(x^{(i)}, z^{(i)};\theta) \tag{a} θ=argmaxθi=1∑mlogP(x(i);θ)=argmaxθi=1∑mlogz(i)∑P(x(i),z(i);θ)(a)
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \sum\limits_{i…
l o g ∑ j λ j y j ⩾ ∑ j λ j l o g y j , λ j ⩾ 0 , ∑ j λ j = 1 log\sum\limits_j\lambda_jy_j \geqslant \sum\limits_j\lambda_jlogy_j\;\;, \lambda_j \geqslant 0, \sum\limits_j\lambda_j =1 logj∑λjyj⩾j∑λjlogyj,λj⩾0,j∑λj=1
并且引入了一个未知的新分布 Q i ( z ( i ) ) Q_i(z^{(i)}) Qi(z(i))。
此时,如果需要满足Jensen不等式中的等号,所以有:
P ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) ) = c , c 为 常 数 \frac{P(x^{(i)}, z^{(i)};\theta)}{Q_i(z^{(i)})} =c, c为常数 Qi(z(i))P(x(i),z(i);θ)=c,c为常数
∑ z Q i ( z ( i ) ) = 1 \sum\limits_{z}Q_i(z^{(i)}) =1 z∑Qi(z(i))=1
Q i ( z ( i ) ) = P ( x ( i ) , z ( i ) ; θ ) ∑ z P ( x ( i ) , z ( i ) ; θ ) = P ( x ( i ) , z ( i ) ; θ ) P ( x ( i ) ; θ ) = P ( z ( i ) ∣ x ( i ) ; θ ) Q_i(z^{(i)}) = \frac{P(x^{(i)}, z^{(i)};\theta)}{\sum\limits_{z}P(x^{(i)}, z^{(i)};\theta)} = \frac{P(x^{(i)}, z^{(i)};\theta)}{P(x^{(i)};\theta)} = P( z^{(i)}|x^{(i)};\theta) Qi(z(i))=z∑P(x(i),z(i);θ)P(x(i),z(i);θ)=P(x(i);θ)P(x(i),z(i);θ)=P(z(i)∣x(i);θ)
如果 Q i ( z ( i ) ) = P ( z ( i ) ∣ x ( i ) ; θ ) Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)};\theta) Qi(z(i))=P(z(i)∣x(i);θ) ,则第(1)式是我们的包含隐藏数据的对数似然的一个下界。如果我们能极大化这个下界,则也在尝试极大化我们的对数似然。即我们需要最大化下式:
arg max θ ∑ i = 1 m ∑ z ( i ) Q i ( z ( i ) ) l o g P ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) ) \mathop{\arg\max}_\theta \sum\limits_{i=1}^m \sum\limits_{z^{(i)}}Q_i(z^{(i)})log\frac{P(x^{(i)}, z^{(i)};\theta)}{Q_i(z^{(i)})} argmaxθi=1∑mz(i)∑Qi(z(i))logQi(z(i))P(x(i),z(i);θ)
简化得:
arg max θ ∑ i = 1 m ∑ z ( i ) Q i ( z ( i ) ) l o g P ( x ( i ) , z ( i ) ; θ ) \mathop{\arg\max}_\theta \sum\limits_{i=1}^m \sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)}, z^{(i)};\theta)} argmaxθi=1∑mz(i)∑Qi(z(i))logP(x(i),z(i);θ)
以上即为EM算法的M步, ∑ z ( i ) Q i ( z ( i ) ) l o g P ( x ( i ) , z ( i ) ; θ ) 可 理 解 为 l o g P ( x ( i ) , z ( i ) ; θ ) 基 于 条 件 概 率 分 布 Q i ( z ( i ) ) \sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)}, \\ z^{(i)};\theta)}\\可理解为logP(x^{(i)}, z^{(i)};\theta) 基于条件概率分布Q_i(z^{(i)}) z(i)∑Qi(z(i))logP(x(i),z(i);θ)可理解为logP(x(i),z(i);θ)基于条件概率分布Qi(z(i))的期望。以上即为EM算法中E步和M步的具体数学含义。
考虑上一节中的(a)式,表达式中存在隐变量,直接找到参数估计比较困难,通过EM算法迭代求解下界的最大值到收敛为止。
图片中的紫色部分是我们的目标模型 p ( x ∣ θ ) p(x|\theta) p(x∣θ),该模型复杂,难以求解析解,为了消除隐变量 z ( i ) z^{(i)} z(i)的影响,我们可以选择一个不包含 z ( i ) z^{(i)} z(i)的模型 r ( x ∣ θ ) r(x|\theta) r(x∣θ),使其满足条件$r(x|\theta) \leqslant p(x|\theta) $。
求解步骤如下:
(1)选取 θ 1 \theta_1 θ1,使得 r ( x ∣ θ 1 ) = p ( x ∣ θ 1 ) r(x|\theta_1) = p(x|\theta_1) r(x∣θ1)=p(x∣θ1),然后对此时的 r r r求取最大值,得到极值点 θ 2 \theta_2 θ2,实现参数的更新。
(2)重复以上过程到收敛为止,在更新过程中始终满足$r \leqslant p $.
###(4) EM算法流程
输入:观察数据 x = ( x ( 1 ) , x ( 2 ) , . . . x ( m ) ) x=(x^{(1)},x^{(2)},...x^{(m)}) x=(x(1),x(2),...x(m)),联合分布 p ( x , z ; θ ) p(x,z ;\theta) p(x,z;θ),条件分布 p ( z ∣ x ; θ ) p(z|x; \theta) p(z∣x;θ),最大迭代次数 J J J
1)随机初始化模型参数 θ \theta θ的初值 θ 0 \theta^0 θ0。
2) f o r j f r o m 1 t o j for \ j \ from \ 1 \ to \ j for j from 1 to j:
a) E步。计算联合分布的条件概率期望:
Q i ( z ( i ) ) = P ( z ( i ) ∣ x ( i ) , θ j ) Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)}, \theta^{j}) Qi(z(i))=P(z(i)∣x(i),θj)
L ( θ , θ j ) = ∑ i = 1 m ∑ z ( i ) P ( z ( i ) ∣ x ( i ) , θ j ) l o g P ( x ( i ) , z ( i ) ; θ ) L(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}P( z^{(i)}|x^{(i)}, \theta^{j})log{P(x^{(i)}, z^{(i)};\theta)} L(θ,θj)=i=1∑mz(i)∑P(z(i)∣x(i),θj)logP(x(i),z(i);θ)
b) M步。极大化 L ( θ , θ j ) L(\theta, \theta^{j}) L(θ,θj),得到 θ j + 1 \theta^{j+1} θj+1:
θ j + 1 = arg max θ L ( θ , θ j ) \theta^{j+1} = \mathop{\arg\max}_\theta L(\theta, \theta^{j}) θj+1=argmaxθL(θ,θj)
c) 如果 θ j + 1 \theta^{j+1} θj+1收敛,则算法结束。否则继续回到步骤a)进行E步迭代。
输出:模型参数 θ \theta θ。