Python机器学习笔记(二):无监督学习
大一暑假期间学习热情极高却又急功近利,在短时间内草率地花了几天快速浏览完了Python机器学习入门课程内容后便很快遗忘了这些关键知识点。在随后的半年里虽然间断性学习了C++语言导致对Python语法的理解逐渐模糊。
经过两年时间的沉淀这次计划在接下来的三周内完成全部课程笔记的更新工作并另起一篇博客分享吴恩达机器学习课程笔记以及深度学习基础部分的学习内容希望不会忘记重要内容!
聚类:K-means算法
算法介绍:
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
算法流程:
- 随机选择k个点作为初始的聚类中心;
- 对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
- 对每个簇,计算所有点的均值作为新的聚类中心
- 重复2、3直到聚类中心不再发生改变
K-means算法实例
> 1. import numpy as np
>
> 2. from sklearn.cluster import KMeans
>
>
>
KMeans的核心设置项包括以下几大要素:
- n_clusters:定义聚类中心的数量
- init:决定初始聚类中心设定的方式
- max_iter:设定最大迭代计算次数
在常规使用中通常只需提供n_clusters即可;其中init默认采用k-means++方法,并且max_iter默认设置为300次。
> Label = KMeans(n_clusters=4).fit_predict(Data)
聚类:DBSCAN算法
算法介绍:
DBSCAN属于基于密度的方法:其主要特点在于无需预先设定类别数量,并且其最终类别数目具有不确定性。
数据分类标准:
- 核心对象:位于半径Epsilon范围内的样本数量超过MinPts
- 边界对象:位于该范围内的样本少于MinPts 但又在其核心对象周围存在分布
- 噪音数据:既不满足核心条件也不符合边界特征的数据样本

算法流程如下:
- 将所有数据样本分类为核心样本、边缘样本或噪音样本;
- 移除非核心数据样本;
- 构建连接位于Eps范围内核心样本之间的网络关系;
- 将相互连接的核心样本归为同一聚类群体;
- 将边缘样本分配至与其相关联的核心群体中;具体而言,在该核心群体覆盖的范围内进行分配。
DBSCAN算法实例
> 1. import numpy as np
>
> 2. from sklearn.cluster import DBSCAN
>
>
>
DBSCAN的主要参数:
- eps:两个样本被看作邻居节点的最大距离
- min_samples:簇的样本数
- metric:距离计算方式
> db=DBSCAN(eps=0.01,min_samples=20).fit(X)
数学补充
方差即为各个观察值与其平均数之间差异平方的平均数...用于衡量一组数据分布的离散程度。

协方差是衡量两个变量之间线性关联程度的重要指标。
当协方差为零时,则称这两个变量之间不存在线性相关关系。
协方差矩阵是由各个变量两两之间的协方差值所组成的矩阵(一种对称矩阵)。

特征向量:矩阵的特征向量是描述数据集结构的非零向量。


降维:主成分分析(PCA)
算法介绍:
矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。PCA可以把具有相关性的高维变量合成为线性无关的低维变量,称为主成分。主成分能够尽可能保留原始数据的信息。
算法流程:

PCA算法实例
> from sklearn.decomposition import PCA
PCA的主要参数如下:
- n_components表示主成分的数量,在降维后的数据空间中对应该维度
- svd_solver用于配置特征值分解的具体方法,默认选择为auto;可选方法包括full、arpack和randomized
> reduced_X = PCA(n_components=2).fit_transform(X)
降维:非负矩阵分解(NMF)
算法介绍:
基于所有元素均为非负数限制条件的这种分解方法被称为非负矩阵分解。其基本思路在于对于任意给定的一个非负数据_matrix_ V,在应用NMF时总能确定两个相应的低维子空间表示W和H。

W matrix represents core image features, which are equivalent to the features extracted from the original matrix V. H matrix: transformation coefficients.

该技术已被广泛应用至图像处理、文档分类以及语音识别等前沿领域。
算法流程如下:
首先进行矩阵分解以优化目标:
具体而言,
我们旨在通过最小化W与H相乘后的结果与原始数据矩阵之间的差异来实现。
基于欧几里得距离计算的目标函数为:
初始化参数→迭代更新→收敛检查→结果输出

基于KL散度的优化目标的损失函数:

NMF算法实例
> from sklearn.decomposition import NMF
NMF的主要参数:
n_components:用于决定分解后的矩阵中每个一维空间的数量;
init:定义W和H矩阵的初始化方法,默认采用值'nnDSVdard'.
非监督学习过程总结
建立工程,导入相关包
> 1. from sklearn.cluster import Kmeans
>
> 2. from sklearn.cluster import DBSCAN
>
> 3. from sklearn.decomposition import PCA
>
> 4. from sklearn.decomposition import NMF
>
> 5.
>
> 6. from sklearn.datasets import ...
>
>
>
加载数据,进行预处理
加载算法,创建算法实例
对数据进行训练,获得标签
PS. 图像分割
图像分割常用方法:阈值分割、边缘分割、直方图法、聚类分析 、小波变换等。
