【04】机器学习算法——回归与聚类总结

回归与聚类算法

0.对比

(1)线性回归与逻辑回归的区别

线性回归与逻辑回归的区别如下描述:

(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=1x;θ)=g(θTx),其中, g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1

​ 可以看出,线性回归的拟合函数,是对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 y1,即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 y0,即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)
函数 拟合函数 预测函数
参数计算方式 最小二乘法 极大似然估计

下面具体解释一下:

  1. 拟合函数和预测函数什么关系呢?简单来说就是将拟合函数做了一个逻辑函数的转换,转换后使得 y ( i ) ∈ ( 0 , 1 ) y^{(i)} \in (0,1) y(i)(0,1);
  2. 最小二乘和最大似然估计可以相互替代吗?回答当然是不行了。我们来看看两者依仗的原理:最大似然估计是计算使得数据出现的可能性最大的参数,依仗的自然是Probability。而最小二乘是计算误差损失。

1.线性回归

  • 记忆线性回归的原理过程
  • 应用LinearRegression或SGDRegressor实现回归预测
  • 记忆回归算法的评估标准及其公式

(1)定义与公式

  • 特征值与目标值之间建立的一个关系,这个可以理解为回归方程

线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。

  • 特点:只有一个自变量的情况称为单变量回归,大于一个自变量情况的叫做多元回归
    通 用 公 式 : h ( w ) = w 1 x 1 + w 2 x 2 + . . . + b = w T x + b 其 中 w , x 可 以 理 解 为 矩 阵 通用公式:h(w)=w_1x_1+w_2x_2+...+b = w^Tx+b\\ 其中w,x可以理解为矩阵 h(w)=w1x1+w2x2+...+b=wTx+bwx

那么怎么理解呢?我们来看几个例子

  • 期末成绩:0.7×考试成绩+0.3×平时成绩
  • 房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率

上面两个例子,我们看到特征值与目标值之间建立的一个关系,这个可以理解为回归方程

(2)线性回归的特征与目标的关系分析

线性回归当中的关系有两种,一种是线性关系,另一种是非线性关系

在这里我们只能画一个平面更好去理解,所以都用单个特征举例子。

  • 线性关系

    注释:如果在单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面的关系

    更高维度的我们不用自己去想,记住这种关系即可

  • 非线性关系

(3)线性回归的损失和优化原理

假设刚才的房子例子,真实的数据之间存在这样的关系

真实关系:真实房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率

那么现在呢,我们随意指定一个关系(猜测)

随机指定关系:预测房子价格 = 0.25×中心区域的距离 + 0.14×城市一氧化氮浓度 + 0.42×自住房平均房价 + 0.34×城镇犯罪率

请问这样的话,会发生什么?真实结果与我们预测的结果之间是不是存在一定的误差呢?类似这样样子

那么存在这个误差,我们将这个误差给衡量出来

①损失函数

  • 总损失定义为:
    J ( θ ) = ( h w ( x 1 ) − y 1 ) 2 + ( h w ( x 2 ) − y 2 ) 2 + . . . + ( h w ( x m ) − y m ) 2 = ∑ i = 1 m ( h w ( x i ) − y i ) 2 J(θ)=(h_w(x_1)-y_1)^2+(h_w(x_2)-y_2)^2+...+(h_w(x_m)-y_m)^2\\=\sum_{i=1}^{m}(h_w(x_i)-y_i)^2 J(θ)=(hw(x1)y1)2+(hw(x2)y2)2+...+(hw(xm)ym)2=i=1m(hw(xi)yi)2
    - y i 为 第 i 个 训 练 样 本 的 真 实 值 y_i为第i个训练样本的真实值 yii
    - h ( x i ) 为 第 i 个 训 练 样 本 特 征 值 组 合 预 测 函 数 h(x_i)为第i个训练样本特征值组合预测函数 h(xi)i
    • 又称最小二乘法

如何去减少这个损失,使我们预测的更加准确些?既然存在了这个损失,我们一直说机器学习有自动学习的功能,在线性回归这里更是能够体现。这里可以通过一些优化方法去优化(其实是数学当中的求导功能)回归的总损失!!!

②优化算法:梯度下降(Gradient Descent)

如何去求模型当中的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

  • 其中, θ i , x i ( i = 0 , 1 , 2 , . . . , n ) \theta_i,x_i(i=0,1,2,...,n) θi,xi(i=0,1,2,...,n)分别为模型参数、每个样本的特征值。
  • 对于假设函数,损失函数为:

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=0m(hθ(x0(j),x1(j),...,xn(j))yj)2

(2)相关参数初始化。

  • 主要初始化 θ i {\theta}_i θi、算法迭代步长${\alpha} 、 终 止 距 离 、终止距离 {\zeta} 。 初 始 化 时 可 以 根 据 经 验 初 始 化 , 即 。初始化时可以根据经验初始化,即 {\theta} 初 始 化 为 0 , 步 长 初始化为0,步长 0{\alpha} 初 始 化 为 1 。 当 前 步 长 记 为 初始化为1。当前步长记为 1{\varphi}_i $。当然,也可随机初始化。

(3)迭代计算。

  • 1)计算当前位置时损失函数的梯度,对${\theta}_i $,其梯度表示为:

∂ ∂ θ 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 θiJ(θ0,θ1,...,θn)=2m1j=0m(hθ(x0(j),x1(j),...,xn(j))yj)2

  • 2)计算当前位置下降的距离。

φ i = α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) {\varphi}_i={\alpha} \frac{\partial}{\partial \theta_i}J({\theta}_0,{\theta}_1,...,{\theta}_n) φi=αθiJ(θ0,θ1,...,θn)

  • 3)判断是否终止。
    • 确定是否所有 θ i {\theta}_i θi梯度下降的距离 φ i {\varphi}_i φi都小于终止距离 ζ {\zeta} ζ,如果都小于 ζ {\zeta} ζ,则算法终止,当然的值即为最终结果,否则进入下一步。
  • 4)更新所有的 θ i {\theta}_i θi,更新后的表达式为:

θ 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αθiJ(θ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=0m(hθ(x0(j),x1(j),...,xn(j))yj)xi(j)

  • 5)令上式 x 0 ( j ) = 1 x^{(j)}_0=1 x0(j)=1,更新完毕后转入1)。
    • 由此,可看出,当前位置的梯度方向由所有样本决定,上式中 1 m \frac{1}{m} m1 α 1 m \alpha \frac{1}{m} αm1 的目的是为了便于理解。

理解:α为学习速率,需要手动指定(超参数),α旁边的整体表示方向

沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值

使用:面对训练数据规模十分庞大的任务 ,能够找到较好的结果

(4)线性回归API

sklearn.linear_model.LinearRegression(fit_intercept=True)
  • 通过正规方程优化
  • fit_intercept:是否计算偏置
  • LinearRegression.coef_:回归系数
  • LinearRegression.intercept_:偏置
sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)
  • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
  • loss:损失类型
    • loss=”squared_loss”: 普通最小二乘法
  • fit_intercept:是否计算偏置
  • learning_rate : string, optional
    • 学习率填充
    • ‘constant’: eta = eta0
    • ‘optimal’: eta = 1.0 / (alpha * (t + t0)) [default]
    • ‘invscaling’: eta = eta0 / pow(t, power_t)
      • power_t=0.25:存在父类当中
    • 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
  • SGDRegressor.coef_:回归系数
  • SGDRegressor.intercept_:偏置

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
    

(6)正规方程与梯度下降区别

梯度下降 正规方程
需要选择学习率 不需要
需要迭代求解 一次运算得出
特征数量较大可以使用 需要计算方程,时间复杂度高O(n3)
  • 选择:
    • 小规模数据:
      • LinearRegression(不能解决拟合问题)
      • 岭回归
    • 大规模数据:SGDRegressor

(7)拓展——关于优化方法GD,SGD,SAG

①GD

梯度下降(Gradient Descent),原始的梯度下降法需要计算所有样本的值才能够得出梯度,计算量大,所以后面才有会一系列的改进。

②SGD

随机梯度下降(Stochastic gradient descent)是一个优化方法。它在一次迭代时只考虑一个训练样本。

  • SGD的优点是:
    • 高效
    • 容易实现
  • SGD的缺点是:
    • SGD需要许多超参数:比如正则项参数、迭代数。
    • SGD对于特征标准化是敏感的。

③ SAG

随机平均梯度法(Stochasitc Average Gradient),由于收敛的速度太慢,有人提出SAG等基于梯度下降的算法

Scikit-learn:SGDRegressor、岭回归、逻辑回归等当中都会有SAG优化

(8)总结

  • 线性回归的损失函数-均方误差
  • 线性回归的优化方法
    • 正规方程
    • 梯度下降
  • 线性回归的性能衡量方法-均方误差
  • sklearn的SGDRegressor API 参数

2.欠拟合与过拟合

  • 说明线性回归(不带正则化)的缺点
  • 说明过拟合与欠拟合的原因以及解决方法

(1)定义

  • 过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)
  • 欠拟合:一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

那么是什么原因导致模型复杂?线性回归进行训练学习的时候变成模型会变得复杂,这里就对应前面再说的线性回归的两种关系,非线性关系的数据,也就是存在很多无用的特征或者现实中的事物特征跟目标值的关系并不是简单的线性关系。

(2)原因以及解决办法

  • 欠拟合原因以及解决办法
    • 原因:学习到数据的特征过少
    • 解决办法:增加数据的特征数量
  • 过拟合原因以及解决办法
    • 原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
    • 解决办法:
      • 正则化

在这里针对回归,我们选择了正则化。但是对于其他机器学习算法如分类算法来说也会出现这样的问题,除了一些算法本身作用之外(决策树、神经网络),我们更多的也是去自己做特征选择,包括之前说的删除、合并一些特征

在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,所以算法在学习的时候尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化

注:调整时候,算法并不知道某个特征影响,而是去调整参数得出优化的结果

(3)正则化类别

  • L2正则化
    • 作用:可以使得其中一些W的都很小,都接近于0,削弱某个特征的影响
    • 优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
    • Ridge回归
  • L1正则化
    • 作用:可以使得其中一些W的值直接为0,删除这个特征的影响
    • LASSO回归

3.线性回归的改进——岭回归

  • 说明岭回归的原理即与线性回归的不同之处
  • 说明正则化对于权重参数的影响
  • 说明L1和L2正则化的区别

(1) 带有L2正则化的线性回归-岭回归

岭回归,其实也是一种线性回归。只不过在算法建立回归方程时候,加上正则化的限制,从而达到解决过拟合的效果

(2)API

  • sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver=“auto”, normalize=False)
    • 具有l2正则化的线性回归
    • alpha:正则化力度,也叫 λ
      • λ取值:0~1 1~10
    • solver:会根据数据自动选择优化方法
      • sag:如果数据集、特征都比较大,选择该随机梯度下降优化
    • normalize:数据是否进行标准化
      • normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据
    • Ridge.coef_:回归权重
    • Ridge.intercept_:回归偏置
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)

  • sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)
    • 具有l2正则化的线性回归,可以进行交叉验证
    • coef_:回归系数
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))

4.无监督学习K-means算法

  • 说明K-means算法原理
  • 说明K-means的性能评估标准轮廓系数
  • 说明K-means的优缺点

(1) 什么是无监督学习

  • 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组,以便广告客户可以通过有关联的广告接触到他们的目标客户。
  • Airbnb 需要将自己的房屋清单分组成不同的社区,以便用户能更轻松地查阅这些清单。
  • 一个数据科学团队需要降低一个大型数据集的维度的数量,以便简化建模和降低文件大小。

我们可以怎样最有用地对其进行归纳和分组?我们可以怎样以一种压缩格式有效地表征数据?这都是无监督学习的目标,之所以称之为无监督,是因为这是从无标签的数据开始学习的。

(2)四种聚类算法试验

​ 选取专门用于测试分类、聚类算法的国际通用的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=k1i=1knimi

(3)K-Means算法原理

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=1kpCipmi2
 这里E是数据中所有对象的平方误差的总和,p是空间中的点, m i m_i mi是簇 C i C_i Ci的平均值[9]。该目标函数使生成的簇尽可能紧凑独立,使用的距离度量是欧几里得距离,当然也可以用其他距离度量。

(4)K-means聚类步骤

  • 1、随机设置K个特征空间内的点作为初始的聚类中心
  • 2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
  • 3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
  • 4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行第二步过程

算法流程

  • 输入:包含n个对象的数据和簇的数目k;
  • 输出:n个对象到k个簇,使平方误差准则最小。
  • 步骤:
    • (1) 任意选择k个对象作为初始的簇中心;
    • (2) 根据簇中对象的平均值,将每个对象(重新)赋予最类似的簇;
    • (3) 更新簇的平均值,即计算每个簇中对象的平均值;
    • (4) 重复步骤(2)、(3)直到簇中心不再变化;

(5)API

sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++)
  • k-means聚类
  • n_clusters:开始的聚类中心数量
  • init:初始化方法,默认为’k-means ++’
  • labels_:默认标记的类型,可以和真实值比较(不是值比较)

(6)Kmeans性能评估指标

① 轮廓系数

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)biaiibiiaii

②轮廓系数值分析

  • 分析过程(我们以一个蓝1点为例)
    • 1、计算出蓝1离本身族群所有点的距离的平均值a_i
    • 2、蓝1到其它两个族群的距离计算出平均值红平均,绿平均,取最小的那个距离作为b_i
    • 根据公式:极端值考虑:如果b_i >>a_i: 那么公式结果趋近于1;如果a_i>>>b_i: 那么公式结果趋近于-1

③结论

如 果 b i > > a i : 趋 近 于 1 效 果 越 好 , b i < < a i : 趋 近 于 − 1 , 效 果 不 好 。 轮 廓 系 数 的 值 是 介 于 [ − 1 , 1 ] , 越 趋 近 于 1 代 表 内 聚 度 和 分 离 度 都 相 对 较 优 。 如果b_i>>a_i:趋近于1效果越好, b_i<bi>>ai:1bi<<ai:1[1,1]1

④轮廓系数API

sklearn.metrics.silhouette_score(X, labels)
  • 计算所有样本的平均轮廓系数
  • X:特征值
  • labels:被聚类标记的目标值

(7)K-means总结

  • 特点分析:采用迭代式算法,直观易懂并且非常实用
  • 缺点:容易收敛到局部最优解(多次聚类)

(8)其他聚类方法

① 层次聚类算法

  • 根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法分为凝聚的层次聚类算法和分裂的层次聚类算法。

  • 凝聚型层次聚类的策略是先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。

  • 算法流程:——注:以采用最小距离的凝聚层次聚类算法为例:

    • (1)将每个对象看作一类,计算两两之间的最小距离;
    • (2)将距离最小的两个类合并成一个新类;
    • (3)重新计算新类与所有类之间的距离;
    • 重复(2)、(3),直到所有类最后合并成一类。

② SOM聚类算法

  • SOM神经网络[11]是由芬兰神经网络专家Kohonen教授提出的,该算法假设在输入对象中存在一些拓扑结构或顺序,可以实现从输入空间(n维)到输出平面(2维)的降维映射,其映射具有拓扑特征保持性质,与实际的大脑处理有很强的理论联系。

  • SOM网络包含输入层和输出层。输入层对应一个高维的输入向量,输出层由一系列组织在2维网格上的有序节点构成,输入节点与输出节点通过权重向量连接。 学习过程中,找到与之距离最短的输出层单元,即获胜单元,对其更新。同时,将邻近区域的权值更新,使输出节点保持输入向量的拓扑特征。

  • 算法流程

    • (1)网络初始化,对输出层每个节点权重赋初值;
    • (2)从输入样本中随机选取输入向量并且归一化,找到与输入向量距离最小的权重向量;
    • (3)定义获胜单元,在获胜单元的邻近区域调整权重使其向输入向量靠拢;
    • (4)提供新样本、进行训练;
    • (5)收缩邻域半径、减小学习率、重复,直到小于允许值,输出聚类结果。

③ FCM聚类算法

  • 1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合’的概念。经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析,就是模糊聚类分析[12]。
  • FCM算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。
  • 设数据集 X = x 1 , x 2 , . . . , x n X={x_1,x_2,...,x_n} X=x1,x2,...,xn,它的模糊 c c c划分可用模糊矩阵 U = [ u i j ] U=[u_{ij}] U=[uij]表示,矩阵 U U U的元素 u i j u_{ij} uij表示第 j ( j = 1 , 2 , . . . , n ) j(j=1,2,...,n) j(j=1,2,...,n)个数据点属于第 i ( i = 1 , 2 , . . . , c ) i(i=1,2,...,c) i(i=1,2,...,c)类的隶属度, u i j u_{ij} uij满足如下条件:

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=1ni=1cuijmdij2(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)=vixj

  • 算法流程
    • (1) 标准化数据矩阵;
    • (2) 建立模糊相似矩阵,初始化隶属矩阵;
    • (3) 算法开始迭代,直到目标函数收敛到极小值;
    • (4) 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果

5.EM算法

(1)EM算法基本思想

  • 最大期望算法(Expectation-Maximization algorithm, EM),是一类通过迭代进行极大似然估计的优化算法,通常作为牛顿迭代法的替代,用于对包含隐变量或缺失数据的概率模型进行参数估计。
  • 最大期望算法基本思想是经过两个步骤交替进行计算:
    • 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值**;**
    • 第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。
    • M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。

(2)EM算法推导

  • 对于 m m m个样本观察数据 x = ( x 1 , x 2 , . . . , x m ) x=(x^{1},x^{2},...,x^{m}) x=(x1,x2,...,xm),现在想找出样本的模型参数 θ \theta θ,其极大化模型分布的对数似然函数为:

θ = 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=1mlogP(x(i);θ)

  • 如果得到的观察数据有未观察到的隐含数据 z = ( z ( 1 ) , z ( 2 ) , . . . z ( m ) ) z=(z^{(1)},z^{(2)},...z^{(m)}) z=(z(1),z(2),...z(m)),极大化模型分布的对数似然函数则为:

θ = 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=1mlogP(x(i);θ)=argmaxθi=1mlogz(i)P(x(i),z(i);θ)(a)

  • 由于上式不能直接求出 θ \theta θ,采用缩放技巧:

KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \sum\limits_{i…

  • 上式用到了Jensen不等式:

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λjyjjλjlogyj,λj0,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

  • 由于 Q i ( z ( i ) ) Q_i(z^{(i)}) Qi(z(i))是一个分布,所以满足

∑ z Q i ( z ( i ) ) = 1 \sum\limits_{z}Q_i(z^{(i)}) =1 zQi(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))=zP(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=1mz(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=1mz(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步的具体数学含义。

(3) 图解EM算法

​ 考虑上一节中的(a)式,表达式中存在隐变量,直接找到参数估计比较困难,通过EM算法迭代求解下界的最大值到收敛为止。

【04】机器学习算法——回归与聚类总结_第1张图片

图片中的紫色部分是我们的目标模型 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(zx;θ),最大迭代次数 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=1mz(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 θ

你可能感兴趣的:(机器学习,算法,回归)