聚类
数据分簇
聚类算法 (Clustering )是一种常见的无监督学习算法。在本系列的第一篇日志中提到,无监督学习算法就是不给定训练数据的标签 。监督学习中的训练样本通常被描述为 ( x ( i ) , y ( i ) ) (\boldsymbol{x}^{(i)},y^{(i)}) ( x ( i ) , y ( i ) ) ,而无监督学习的样本只保留特征量 x ( i ) \boldsymbol{x}^{(i)} x ( i ) 。
聚类算法可以通常描述为:算法会将数据点划分为多个互不相交的簇 (Cluster ),使得同一簇内的数据点相似度高,而不同簇间的数据点相似度低。其核心在于寻找数据对象的相似性 。
聚类得到的簇可以用聚类中心、簇大小、簇密度和簇描述等来表示
聚类中心是一个簇中所有样本点的均值
簇大小表示簇中所含样本的数量
簇密度表示簇中样本点的紧密程度
簇描述是簇中样本的业务特征
K-means算法
K K K 平均算法 (K-means )是一种常用的聚类算法,其中 K K K 代表聚类得到的簇的个数。K K K 平均算法主要通过构造不断迭代的聚类中心 ,实现聚类的效果。设样本特征空间的维度为 R n \mathbb{R}^n R n ,算法的具体流程如下
随机选取 K K K 个聚类中心 μ 1 , μ 2 , ⋯ , μ K ∈ R n \mu_1,\mu_2,\cdots,\mu_K\in\mathbb{R}^n μ 1 , μ 2 , ⋯ , μ K ∈ R n
对于所有的数据 x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) \boldsymbol{x}^{(1)},\boldsymbol{x}^{(2)},\cdots,\boldsymbol{x}^{(m)} x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) ,设 c ( i ) c^{(i)} c ( i ) 表示距离 x ( i ) \boldsymbol{x}^{(i)} x ( i ) 最近的聚类中心的下标索引,并把该数据纳入该聚类中心代表的簇
c ( i ) = arg min 1 ⩽ k ⩽ K ∥ x ( i ) − μ k ∥ 2 c^{(i)}=\arg\min_{1\leqslant k\leqslant K}\|\boldsymbol{x}^{(i)}-\mu_k\|^2
c ( i ) = arg 1 ⩽ k ⩽ K min ∥ x ( i ) − μ k ∥ 2
对于每一个簇,令新的聚类中心为所有内部数据的平均值 ,即
μ k : = mean of x ( i ) in cluster k , k = 1 , 2 ⋯ , K \mu_k:=\text{mean of } \boldsymbol{x}^{(i)}\text{ in cluster k},\quad k=1,2\cdots,K
μ k := mean of x ( i ) in cluster k , k = 1 , 2 ⋯ , K
不断重复过程 (2,3),直到满足聚类要求
过程(2)中的 arg min \arg\min arg min 表示取得最小值对应的自变量值。需要指出的是,聚类的簇个数 K K K 一般需要小于样本数量 m m m ,否则无法有效起到聚类效果。
可以看出,K K K 平均算法是一种相当简单的聚类算法,并且有多种优化方式。一种方式是类比监督学习算法中的代价函数,定义目标优化函数
J ( c ( 1 ) , c ( 2 ) , ⋯ , c ( m ) , μ 1 , μ 2 , ⋯ , m K ) = 1 m ∑ i = 1 m ∥ x ( i ) − μ c ( i ) ∥ 2 J(c^{(1)},c^{(2)},\cdots,c^{(m)},\mu_1,\mu_2,\cdots,m_K)=\frac1m\sum_{i=1}^m\|\boldsymbol{x}^{(i)}-\mu_{c^{(i)}}\|^2
J ( c ( 1 ) , c ( 2 ) , ⋯ , c ( m ) , μ 1 , μ 2 , ⋯ , m K ) = m 1 i = 1 ∑ m ∥ x ( i ) − μ c ( i ) ∥ 2
可以看出,上式描述了所有数据点到其聚类中心的密集度。函数值越大,代表数据点越分散;函数值越小,代表数据点越密集,因此我们有最小化优化目标
min J ( c ( 1 ) , c ( 2 ) , ⋯ , c ( m ) , μ 1 , μ 2 , ⋯ , m K ) \min J(c^{(1)},c^{(2)},\cdots,c^{(m)},\mu_1,\mu_2,\cdots,m_K)
min J ( c ( 1 ) , c ( 2 ) , ⋯ , c ( m ) , μ 1 , μ 2 , ⋯ , m K )
当优化函数趋于收敛时,聚类算法就可以终止。
注意到,K K K 平均算法对于不同的初值条件可能得到不同的聚类结果,同时也容易导致局部最优化。因此需要选取合适的方式进行随机初始化 ,多次随机 的选取聚类中心,并选取使得目标优化函数 J J J 最小的那种情况。
[{"url":"/img/mlearning/m8f1.png","alt":"局部最优化","title":""}]
最后,我们来看如何选取合适的 K K K 值。一般而言,随着簇数量 K K K 的增加,目标函数 J J J 的最小值会下降。具体可以描述为
当 K K K 小于某一值时,增加 K K K 会大幅降低 min J \min J min J
当 K K K 超过这个值时,增加 K K K 时 min J \min J min J 降低的幅度大大减小
上述现象通常被描述为肘部法则 (Elbow Method ),下图直观地展示了这一法则。当我们选取这个肘部点对应的 K K K 值时,通常是一个兼顾正确性和效率的优秀选择。
[{"url":"/img/mlearning/m8f2.png","alt":"肘部法则","title":""}]
代码实现
随机创建一些有聚类趋势的数据,使用 Python 实现 K K K 平均算法聚类算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_blobsfrom sklearn.cluster import KMeansplt.rcParams['font.sans-serif' ] = ['SimHei' , 'Microsoft YaHei' ,] plt.rcParams['axes.unicode_minus' ] = False X, y_true = make_blobs(n_samples=300 , centers=4 , cluster_std=0.60 , random_state=0 ) plt.scatter(X[:, 0 ], X[:, 1 ], s=50 ) plt.title("原始未标记数据" ) plt.show() kmeans = KMeans(n_clusters=4 , random_state=0 , n_init='auto' ) y_kmeans = kmeans.fit_predict(X) centroids = kmeans.cluster_centers_ plt.scatter(X[:, 0 ], X[:, 1 ], c=y_kmeans, s=50 , cmap='viridis' ) plt.scatter(centroids[:, 0 ], centroids[:, 1 ], c='red' , s=200 , alpha=0.8 , marker='X' ) plt.title("K-Means 聚类结果 (K=4)" ) plt.show() print ("四个簇的质心坐标:\n" , centroids)
主成分分析PCA
数据降维
降维 (Dimensionality Reduction )就是一种对高维度特征数据预处理方法。降维将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。
在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。例如,图像压缩就是一种数据降维的应用,可以保证图像基本清晰的同时大幅减少内存占用。
数据降维通常有以下优点
使得数据集更易使用
降低算法的计算开销
去除噪声
使得结果容易理解
PCA的概念
PCA (Principal Component Analysis ),即主成分分析方法 ,是一种使用最广泛的数据降维算法。PCA的主要思想是将 n n n 维特征映射到 k k k 维上,这 k k k 维是全新的正交特征 ,也称作主成分。
PCA算法通常可以由特征值分解 或奇异值分解 (SVD )实现。但是在介绍其数学原理之前,我们先用低维度的例子进行说明。
对于两个特征 x 1 , x 2 x_1,x_2 x 1 , x 2 ,现在想要把其降维变成一个特征。首先需要进行均值归一化 ,即设 m m m 个样本的均值为
μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac1m\sum_{i=1}^m\boldsymbol{x}^{(i)}
μ = m 1 i = 1 ∑ m x ( i )
此时,把每个样本减去均值 μ \mu μ ,就可以保证新样本的均值为 0 \boldsymbol{0} 0 。接下来,尝试寻找一条过原点的有向直线 L L L ,其方向向量为 u \boldsymbol{u} u ,并把每个样本投影到该直线上,得到直线上的一个点 P i P_i P i 和其在该直线上的坐标 p i p_i p i 。
如何寻找一条合适的直线进行投影呢?PCA要求最小化投影方向的误差 ,也就是使得每个数据到直线 L L L 的投影误差尽可能的小,这一点我们将在数学原理部分进一步说明。
注意,线性回归和PCA是两个不同的模型
线性回归中包含样本标签,误差表示为垂直距离
PCA只对数据特征进行处理,误差表示为投影误差
[{"url":"/img/mlearning/m8f3.png","alt":"线性回归和PCA的区别","title":""}]
对于 n n n 维的PCA算法,对数据进行均值归一化处理后,我们需要寻找一个 k k k 维超平面,使得新数据投影到该超平面的投影误差最小,并且投影后的新样本最为降维处理的结果。
特征值分解
对于一个 n n n 阶实对称矩阵 A \boldsymbol{A} A ,可以对其进行特征值分解
A = Q Λ Q T \boldsymbol{A}=\boldsymbol{Q}\boldsymbol{\Lambda}\boldsymbol{Q}^T
A = Q Λ Q T
其中,n n n 阶矩阵 Q , Λ \boldsymbol{Q},\boldsymbol{\Lambda} Q , Λ 可以如下求得
Λ \boldsymbol{\Lambda} Λ :对角矩阵 d i a g ( λ 1 , λ 2 , ⋯ , λ n ) \mathrm{diag(\lambda_1,\lambda_2,\cdots,\lambda_n)} diag ( λ 1 , λ 2 , ⋯ , λ n ) ,其中 λ i \lambda_i λ i 为 A \boldsymbol{A} A 的特征值,并且规定 λ 1 ⩾ λ 2 ⩾ ⋯ ⩾ λ n ⩾ 0 \lambda_1\geqslant\lambda_2\geqslant\cdots\geqslant\lambda_n\geqslant0 λ 1 ⩾ λ 2 ⩾ ⋯ ⩾ λ n ⩾ 0
Q \boldsymbol{Q} Q :正交矩阵 [ x 1 , x 2 , , ⋯ x n ] [\boldsymbol{x}_1,\boldsymbol{x}_2,,\cdots\boldsymbol{x}_n] [ x 1 , x 2 ,, ⋯ x n ] ,其中 x i \boldsymbol{x}_i x i 为 A \boldsymbol{A} A 的特征值 λ i \lambda_i λ i 对应的单位特征向量,且 x i \boldsymbol{x}_i x i 相互正交
一个高维矩阵本质上就是高维空间中的一个线性变换 ,该矩阵的各特征值反映该矩阵各个方向变换的程度,我们取从大到小特征值中的前 k k k 个特征值,也就是提取了该矩阵变化程度最大的 k k k 个方向,其它方向进行舍弃,也就提取了该矩阵中最重要的 k k k 个特征,以此来近似原矩阵的线性变换。这就是基于特征值分解的降维原理。
因此,我们需要找到一个基于样本特征量构造的矩阵 S S S ,使得 S S S 的特征值分解能够体现不同特征量的重要性,从而实现PCA降维。
对于两个随机变量 X , Y X,Y X , Y ,其协方差 (Covariance )定义为
Cov = 1 m − 1 ∑ i = 1 m − 1 ( x i − x ˉ ) ( y i − y ˉ ) \text{Cov}=\frac{1}{m-1}\sum_{i=1}^{m-1}(x_i-\bar{x})(y_i-\bar{y})
Cov = m − 1 1 i = 1 ∑ m − 1 ( x i − x ˉ ) ( y i − y ˉ )
其中 m m m 为样本量,x i , y i x_i,y_i x i , y i 是特征 X , Y X,Y X , Y 的第 i i i 个样本值,x ˉ , y ˉ \bar{x},\bar{y} x ˉ , y ˉ 是特征 X , Y X,Y X , Y 的样本均值。协方差刻画了两组特征的样本值的协同变化趋势,其绝对值越大,两个变量的相关性越强。
对于 n n n 个经过均值归一化 的特征变量 X 1 , X 2 , ⋯ , X n X_1,X_2,\cdots,X_n X 1 , X 2 , ⋯ , X n ,其协方差矩阵 定义为
S = ( s i j ) n × n , s i j = Cov ( X i , X j ) \boldsymbol{S}=(s_{ij})_{n\times n},\quad s_{ij}=\text{Cov}(X_i,X_j)
S = ( s ij ) n × n , s ij = Cov ( X i , X j )
由于 Cov ( X i , X j ) = Cov ( X j , X i ) ∈ R \text{Cov}(X_i,X_j)=\text{Cov}(X_j,X_i)\in\mathbb{R} Cov ( X i , X j ) = Cov ( X j , X i ) ∈ R ,所以 S \boldsymbol{S} S 是一个实对称矩阵,因此可以进行特征值分解。
S = Q Λ Q T \boldsymbol{S}=\boldsymbol{Q}\boldsymbol{\Lambda}\boldsymbol{Q}^T
S = Q Λ Q T
把 X 1 , X 2 , ⋯ , X n ∈ R m X_1,X_2,\cdots,X_n\in\mathbb{R}^m X 1 , X 2 , ⋯ , X n ∈ R m 整合成一个样本数据矩阵
X = [ X 1 , X 2 , ⋯ , X n ] ∈ R m × n \boldsymbol{X}=[X_1,X_2,\cdots,X_n]\in\mathbb{R}^{m\times n}
X = [ X 1 , X 2 , ⋯ , X n ] ∈ R m × n
此时协方差矩阵还可以等价写作
S = 1 m − 1 X T X \boldsymbol{S}=\frac{1}{m-1}\boldsymbol{X}^T\boldsymbol{X}
S = m − 1 1 X T X
由于前面提到,一个矩阵本质上表示一个线性变换,即投影。我们用特征向量组成的矩阵 Q \boldsymbol{Q} Q 对原数据 X \boldsymbol{X} X 进行线性变换(投影),得到新数据 Y \boldsymbol{Y} Y 表示为
Y = X Q ∈ R m × n \boldsymbol{Y}=\boldsymbol{XQ}\in\mathbb{R}^{m\times n}
Y = XQ ∈ R m × n
PCA希望线性变换(投影)后的数据满足两点:
数据尽可能分散,即方差尽可能大(这由信号处理学保证)
不同特征互不相关,即协方差为0
我们来计算新数据 Y \boldsymbol{Y} Y 的协方差矩阵 S Y \boldsymbol{S}_Y S Y
S Y = 1 m − 1 Y T Y = 1 m − 1 ( X Q ) T X Q = 1 m − 1 Q T X T X Q = Q T S Q = Q T Q Λ Q T Q = Λ ∈ R n × n \begin{aligned}
\boldsymbol{S}_Y&=\frac{1}{m-1}\boldsymbol{Y}^T\boldsymbol{Y}=\frac{1}{m-1}(\boldsymbol{XQ})^T\boldsymbol{XQ}\\&=\frac{1}{m-1}\boldsymbol{Q}^T\boldsymbol{X}^T\boldsymbol{XQ}\\&=\boldsymbol{Q}^T\boldsymbol{SQ}\\&=\boldsymbol{Q}^T\boldsymbol{Q}\boldsymbol{\Lambda Q}^T\boldsymbol{Q}\\&=\boldsymbol{\Lambda}\in \mathbb{R}^{n\times n}
\end{aligned}
S Y = m − 1 1 Y T Y = m − 1 1 ( XQ ) T XQ = m − 1 1 Q T X T XQ = Q T SQ = Q T Q Λ Q T Q = Λ ∈ R n × n
由于 Λ \boldsymbol{\Lambda} Λ 是一个对角矩阵,因此不同的新特征之间协方差为0,也就是相互正交;同时,由于协方差矩阵的主对角线元素为该数据的方差,因此每个新数据的方差即为 S \boldsymbol{S} S 的特征值,且降序排列,那么选取前 k k k 大的特征值对应的新特征量,就实现了降维的操作。
使用特征值分解的PCA算法流程如下
去中心化处理:每个特征下的各个样本值减去各自均值
计算协方差矩阵:S = 1 m − 1 X T X \boldsymbol{S}=\dfrac{1}{m-1}\boldsymbol{X}^T\boldsymbol{X} S = m − 1 1 X T X
对 S \boldsymbol{S} S 进行特征值分解:S = Q Λ Q T \boldsymbol{S}=\boldsymbol{Q}\boldsymbol{\Lambda}\boldsymbol{Q}^T S = Q Λ Q T
对特征值从大到小排序,选择前 k k k 大的特征值
将这 k k k 个特征向量分别作为行向量组成新的特征向量矩阵 P ∈ R n × k \boldsymbol{P}\in\mathbb{R}^{n\times k} P ∈ R n × k
将原数据映射新空间中:Y = X P ∈ R m × k \boldsymbol{Y}=\boldsymbol{XP}\in\mathbb{R}^{m\times k} Y = XP ∈ R m × k
SVD分解
对于任意维度的矩阵 A ∈ R m × n \boldsymbol{A}\in\mathbb{R}^{m\times n} A ∈ R m × n ,其可以分解为如下形式
A = U Σ V T \boldsymbol{A}=\boldsymbol{U\Sigma V}^T
A = U Σ V T
称该式子为矩阵 A \boldsymbol{A} A 的奇异值分解 (Singular Value Decomposition, SVD )。其中 U ∈ R m × m , V ∈ R n × n \boldsymbol{U}\in\mathbb{R}^{m\times m},\boldsymbol{V}\in\mathbb{R}^{n\times n} U ∈ R m × m , V ∈ R n × n 称作左、右奇异矩阵,同时是半正交矩阵;Σ ∈ R m × n \boldsymbol{\Sigma}\in\mathbb{R}^{m\times n} Σ ∈ R m × n 称作对角奇异矩阵,其一般形式为
Σ = [ σ 1 σ 2 ⋱ σ min ( m , n ) ⋱ ] \boldsymbol{\Sigma}=\begin{bmatrix}\sigma_1&&&&\\&\sigma_2&&&\\&&\ddots&&\\&&&\sigma_{\min(m,n)}&\\&&&&\ddots\end{bmatrix}
Σ = σ 1 σ 2 ⋱ σ m i n ( m , n ) ⋱
其中 σ i , i = 1 , 2 ⋯ , min ( m , n ) \sigma_i,i=1,2\cdots,\min(m,n) σ i , i = 1 , 2 ⋯ , min ( m , n ) 是矩阵 A \boldsymbol{A} A 的奇异值 。下面简单介绍如何求这个分解形式。
设矩阵 X = A T A ∈ R n × n , Y = A A T ∈ R m × m \boldsymbol{X}=\boldsymbol{A}^T\boldsymbol{A}\in\mathbb{R}^{n\times n},\boldsymbol{Y}=\boldsymbol{AA}^T\in\mathbb{R}^{m\times m} X = A T A ∈ R n × n , Y = AA T ∈ R m × m ,不难证明他们都是实对称矩阵,并且具有相同的非零特征值,因此应用特征值分解方法,首先可以得到
A T A = Q Λ Q T \boldsymbol{A}^T\boldsymbol{A}=\boldsymbol{Q}\boldsymbol{\Lambda}\boldsymbol{Q}^T
A T A = Q Λ Q T
代入 A = U Σ V T \boldsymbol{A}=\boldsymbol{U\Sigma V}^T A = U Σ V T 有以下对应关系
Q = V \boldsymbol{Q}=\boldsymbol{V} Q = V
X = A T A \boldsymbol{X}=\boldsymbol{A}^T\boldsymbol{A} X = A T A 的特征值 λ i = σ i 2 \lambda_i=\sigma_i^2 λ i = σ i 2
此时考虑原SVD分解式的展开,即按列展开有
A [ v 1 , v 2 , ⋯ , v n ] = [ u 1 , u 2 , ⋯ , u m ] [ σ 1 σ 2 ⋱ σ min ( m , n ) ⋱ ] ⇔ u i = 1 σ i A v i \boldsymbol{A}[v_1,v_2,\cdots,v_n]=[u_1,u_2,\cdots,u_m]\begin{bmatrix}\sigma_1&&&&\\&\sigma_2&&&\\&&\ddots&&\\&&&\sigma_{\min(m,n)}&\\&&&&\ddots\end{bmatrix}\Leftrightarrow u_i=\frac{1}{\sigma_i}\boldsymbol{A}v_i
A [ v 1 , v 2 , ⋯ , v n ] = [ u 1 , u 2 , ⋯ , u m ] σ 1 σ 2 ⋱ σ m i n ( m , n ) ⋱ ⇔ u i = σ i 1 A v i
上述步骤只对非零奇异值对应的向量计算,剩下的通过正交补齐即可。这样就得到了矩阵 A \boldsymbol{A} A 的奇异值分解。这里简单指出:奇异值分解反映了任意一个矩阵进行线性变换时的三个步骤,旋转、伸缩、逆旋转 。越大的奇异值对应的向量,其在线性变换的作用幅度越大。因此,我们可以把特征值分解的PCA方法套用在SVD分解上,但只需要对原数据矩阵 X \boldsymbol{X} X 进行SVD分解即可。下表展现了两种方法的区别。
比较维度
PCA的特征值分解法
PCA的SVD分解法
计算对象
协方差矩阵 S = 1 m − 1 X T X \boldsymbol{S} = \dfrac{1}{m-1}\boldsymbol{X}^T\boldsymbol{X} S = m − 1 1 X T X
均值归一化后的原数据矩阵 X \boldsymbol{X} X
数学分解形式
S = Q Λ Q T \boldsymbol{S} = \boldsymbol{Q}\boldsymbol{\Lambda}\boldsymbol{Q}^T S = Q Λ Q T
X = U Σ V T \boldsymbol{X} = \boldsymbol{U\Sigma V}^T X = U Σ V T
主成分
协方差矩阵的特征向量
右奇异矩阵的列向量
数值稳定性
较差
现代算法优化能力强
高维数据适应性
极差
极好
工程实现首选
仅用于理论推导或小规模数据集
主流库底层均采用SVD实现
平方映射误差
接下来的讲解以 SVD 分解法为主。将原来的 n n n 维数据降维到 k k k 维数据,我们的降维公式为
Y = X P ∈ R m × k \boldsymbol{Y}=\boldsymbol{XP}\in\mathbb{R}^{m\times k}
Y = XP ∈ R m × k
其中 P ∈ R n × k \boldsymbol{P}\in\mathbb{R}^{n\times k} P ∈ R n × k 是前 k k k 大奇异值对应的,右奇异矩阵的特征向量组成的矩阵。现在考虑逆转降维过程,也就是有逆转公式
X i n v = Y P T ∈ R m × n \boldsymbol{X}_{inv}=\boldsymbol{YP}^T\in\mathbb{R}^{m\times n}
X in v = YP T ∈ R m × n
由于在降维过程中,有数据已经发生丢失,因此 X i n v \boldsymbol{X}_{inv} X in v 与 X \boldsymbol{X} X 并不会完全相同,而这之间的误差就似乎我们之前提到的投影误差 。定义平均平方映射误差 为
d = 1 m ∑ i = 1 m ∥ x ( i ) − x i n v ( i ) ∥ 2 d=\frac1m\sum_{i=1}^{m}\|\boldsymbol{x}^{(i)}-\boldsymbol{x}_{inv}^{(i)}\|^2
d = m 1 i = 1 ∑ m ∥ x ( i ) − x in v ( i ) ∥ 2
PCA算法的目的就是尽可能选取合适的超参数 k k k ,使得上述误差尽可能小。由于原数据经过了均值归一化处理,因此原数据的总方差为
D = 1 m ∑ i = 1 m ∥ x ( i ) ∥ 2 D=\frac1m\sum_{i=1}^{m}\|\boldsymbol{x}^{(i)}\|^2
D = m 1 i = 1 ∑ m ∥ x ( i ) ∥ 2
一般而言,应当尝试不同的 k k k 值,在最小化平均平方误差的同时,满足经验条件
d D = ∑ i = 1 m ∥ x ( i ) − x i n v ( i ) ∥ 2 ∥ x ( i ) ∥ ⩽ 1 % \frac{d}{D}=\sum_{i=1}^m\frac{\|\boldsymbol{x}^{(i)}-\boldsymbol{x}_{inv}^{(i)}\|^2}{\|\boldsymbol{x}^{(i)}\|}\leqslant 1\%
D d = i = 1 ∑ m ∥ x ( i ) ∥ ∥ x ( i ) − x in v ( i ) ∥ 2 ⩽ 1%
也就是说,该经验条件保证PCA降维保留了原始数据99%的有效信息 。
结语
至此,吴恩达Andrew Ng机器学习篇已经结束ヾ(✿゚▽゚)ノ
本系列通过八篇日志,大致总结了机器学习方向的主流算法,介绍了监督学习和无监督学习的多种回归、分类算法。这些内容只是机器学习领域的开场白,而如今更常用的AI模型,比如计算机视觉CV,大语言模型LLM,具身智能等更加依赖于深度神经网络等算法模型。这些内容涉及更深层次的数理基础和模型算法,属于深度学习 (Deep Learning )的范畴,后续也会更新相关日志。
希望本系列学习日志能够对您有所帮助,如有错误欢迎大佬在评论区指出,感谢观看。