Machine Learning Specialization 学习笔记(5)

文章目录


前言

博客仅记录个人学习进度和一些查缺补漏。

学习内容:BV1Bq421A74G


一、聚类

聚类是一种无监督学习方法,它旨在将数据集中的样本划分为若干个彼此相似的组或簇。聚类的目的是在同一个簇内的样本具有高相似度,而不同簇之间的样本具有低相似度。聚类分析在各种领域都有应用,包括市场细分、社交网络分析、图像分割、基因表达分析等。

常见的聚类算法包括:

  1. K-Means 聚类

    • 最常见的聚类算法之一。算法随机初始化 K 个中心点,然后迭代地将每个点分配给最近的中心点形成 K 个簇,并更新中心点为所分配簇的所有点的均值,直到满足某个终止条件。
  2. 层次聚类(Hierarchical Clustering)

    • 通过创建一个聚类树来逐步合并或分割聚类。可以是自底向上的聚合(Agglomerative)或自顶向下的分裂(Divisive)。
  3. DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

    • 基于密度的聚类方法,可以识别出任意形状的簇,并且能够将噪声点识别出来。
  4. Mean Shift 聚类

    • 一种基于密度的非参数聚类方法,通过寻找密度函数的局部极大值点来确定簇中心。
  5. 谱聚类(Spectral Clustering)

    • 使用数据的谱特性来进行聚类,通常用于复杂数据结构的聚类,如图像和图数据。
  6. OPTICS(Ordering Points To Identify the Clustering Structure)

    • 是 DBSCAN 的一种改进,可以处理不同密度的簇。

聚类的步骤通常包括:

  1. 数据准备

    • 清洗数据,处理缺失值和异常值。
  2. 特征选择

    • 确定哪些特征对聚类最有信息量。
  3. 距离度量

    • 选择一个合适的距离度量方法,如欧氏距离、曼哈顿距离或余弦相似度。
  4. 选择聚类数量

    • 确定簇的数量,这可能是一个挑战,可以使用肘部法则、轮廓系数等方法来估计。
  5. 算法选择

    • 根据数据的特性和需求选择合适的聚类算法。
  6. 聚类算法执行

    • 运行聚类算法对数据进行分组。
  7. 结果评估

    • 使用内部评价指标(如簇内距离、簇间距离)或外部评价指标(如调整兰德指数)来评估聚类结果的质量。
  8. 结果解释

    • 分析聚类结果,确定簇的含义。

聚类分析是一个探索性的数据挖掘任务,它不依赖于预先定义的类别标签,而是试图发现数据中的自然分组。

K-means算法

K-means 是一种广泛使用的聚类算法,属于无监督学习的一种。它的目标是将数据集中的样本划分为预定数量 K 的簇,使得簇内的样本尽可能相似,而簇间的样本尽可能不同。

K-means 算法的工作原理:

  1. 初始化

    • 随机选择 K 个数据点作为初始的簇中心(质心)。
  2. 分配

    • 将每个数据点分配给最近的簇中心,形成 K 个簇。

    • 如果有一个K没有任何簇,一般来说需要把那个K消掉
  3. 更新

    • 计算每个簇的质心,即将每个簇内所有点的均值作为新的质心。
      -
  4. 迭代

    • 重复分配和更新步骤,直到质心不再发生变化,或者达到预定的迭代次数。
  5. 终止

    • 当质心的变化非常小或达到预定的迭代次数时,算法终止。

K-means 算法的特点:

  • 简单高效:K-means 算法易于理解和实现,对于大型数据集也相对高效。
  • 缩放性:可以处理大规模数据集,但对初始质心的选择和数据维度敏感。
  • 适用范围:适用于球形簇的聚类,但对于非球形或大小不一的簇可能效果不佳。

K-means 算法的挑战:

  • 确定 K 值 :需要预先指定簇的数量 K,但这个值通常不是显而易见的。常用的方法有肘部法则、轮廓系数等。

    很多人使用Elbow Method,但是这也不一定是个好方法,因为更多的时候会像右边一样平滑下降。

    更推荐的是通过用途来区分K

  • 局部最优 :K-means 可能会陷入局部最优解,而不是全局最优解,这取决于初始质心的选择。

  • 对异常值敏感:异常值或噪声数据可能会对质心的计算产生较大影响。

K-means 算法的实现:

在 Python 中,可以使用 scikit-learn 库中的 KMeans 类来实现 K-means 算法:

python 复制代码
from sklearn.cluster import KMeans
import numpy as np

# 假设 X 是一个包含数据点的 numpy 数组
X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])

# 创建 KMeans 实例,设置簇的数量为 2
kmeans = KMeans(n_clusters=2)

# 拟合模型
kmeans.fit(X)

# 预测数据点的簇标签
labels = kmeans.predict(X)

# 获取质心
centroids = kmeans.cluster_centers_

print("Labels:", labels)
print("Centroids:", centroids)

在这个例子中,我们首先创建了一个 KMeans 实例,指定了簇的数量 n_clusters。然后使用 fit 方法来拟合数据,并通过 predict 方法来获取每个数据点的簇标签。cluster_centers_ 属性包含了最终的质心位置。

K-means 是聚类分析中的基础工具,尽管它有一些局限性,但它在许多实际应用中仍然非常有效。

损失函数(失真函数)



二、异常检测算法

异常检测是机器学习中的一个重要任务,它旨在识别数据集中的异常或不寻常模式。这些异常可能是由错误、欺诈活动、系统故障或其他未知因素引起的。异常检测可以应用于金融欺诈检测、网络安全、工业系统监控、医疗诊断等多个领域。

常见的异常检测算法包括:

  1. 基于统计的方法

    • 参数方法:假设数据遵循特定的统计分布(如正态分布),使用均值、方差等参数来识别异常值。
    • 非参数方法:不假设数据的分布形式,而是从数据中学习分布,如使用直方图或核密度估计。
  2. 基于距离的方法

    • K-Nearest Neighbors (KNN):计算数据点与其最近邻的距离,距离较大的点可能是异常点。
  3. 基于密度的方法

    • Local Outlier Factor (LOF):基于数据点的局部密度,比较数据点的密度与其邻居的密度。
    • DBSCAN:基于核心点、边界点和噪声点的概念,将低密度区域的点识别为异常。
  4. 基于聚类的方法

    • K-Means:将数据点分组到最近的聚类中心,距离所有聚类中心都远的点可能是异常。
    • Hierarchical Clustering:通过构建聚类树来识别异常。
  5. 基于降维的方法

    • Principal Component Analysis (PCA):通过降维来突出异常点,因为异常通常在低维空间中更容易被识别。
  6. 基于分类的方法

    • One-Class SVM:训练一个分类器来识别数据中的正常模式,将与正常模式显著不同的数据点识别为异常。
  7. 基于深度学习的方法

    • Autoencoders:使用神经网络来学习数据的压缩表示,然后通过比较重构误差来识别异常。
    • Isolation Forest:一种基于随机森林的算法,通过随机选择特征和分割点来隔离异常。
  8. 基于时间序列的方法

    • ARIMA模型:适用于时间序列数据,通过模型残差来检测异常。

实现步骤通常包括:

  1. 数据预处理:清洗数据,处理缺失值和异常值。
  2. 特征选择:确定哪些特征对异常检测最有信息量。
  3. 模型训练:使用选定的算法训练模型。
  4. 模型评估:使用适当的评估指标来评估模型的性能。
  5. 异常检测:应用模型来识别新的异常数据点。

在选择异常检测算法时,需要考虑数据的特性、异常的类型、业务需求以及算法的复杂度。每种方法都有其优势和局限性,通常需要根据具体情况进行选择和调整。



基于正态分布

高斯分布(Gaussian distribution),也称为正态分布(Normal distribution),是统计学中最常见的概率分布之一。它在自然科学和社会科学的许多领域中都有应用,因为许多自然现象和社会现象的测量值都近似地遵循正态分布。

高斯分布的特点:

  1. 钟形曲线:正态分布的图形是一个对称的钟形曲线,其中心位于均值(平均值)。

  2. 均值(Mean):正态分布的中心点,表示数据的平均水平。

  3. 方差(Variance):衡量数据分布的离散程度,方差的平方根是标准差。

  4. 标准差(Standard Deviation):衡量数据分布的离散程度,是方差的平方根。

  5. 对称性:正态分布关于均值对称。

  6. 数据分布:在均值的一个标准差范围内的数据占总数据的约68%,在两个标准差范围内的数据占总数据的约95%,在三个标准差范围内的数据占总数据的约99.7%。

高斯分布的数学表达:

正态分布的概率密度函数(PDF)由以下公式给出:

高斯分布在异常检测中的应用:

在异常检测中,正态分布经常被用来建模正常数据的分布。基于正态分布的异常检测方法通常遵循以下步骤:

  1. 假设检验:假设数据遵循正态分布,然后使用统计检验(如Z-score或Grubbs' test)来确定数据点是否可能是异常的。

  2. 阈值设定:根据正态分布的特性,设定阈值(如均值±3标准差)来识别异常值。

  3. 概率评分:计算数据点遵循正态分布的概率,低概率的数据点可能是异常的。

  4. 模型拟合:使用正态分布模型来拟合数据,然后识别那些不符合模型的数据点。

实例:

假设我们有一个数据集,我们认为它遵循正态分布,均值为100,标准差为10。我们可以计算任何数据点的Z-score:

其中 X 是数据点,μ 是均值,σ 是标准差。

如果一个数据点的Z-score大于3或小于-3,那么它可能被视为异常值。

正态分布在异常检测中的应用非常广泛,但需要注意的是,如果数据分布显著偏离正态分布,那么基于正态分布的方法可能不太适用。在这种情况下,可能需要考虑其他类型的分布或异常检测方法。


在统计学中,方差的计算可以通过两种不同的方法来估计,这两种方法分别对应于不同的样本大小和应用场景。这两种估计方法通常被称为"总体方差"和"样本方差"。

  1. 总体方差(Population Variance)

    • 用希腊字母 σ²(西格玛平方)表示。

    • 计算公式为:

    • 其中,N 是总体中的元素数量,x_i是每个元素的值,μ是总体的均值。

  2. 样本方差(Sample Variance)

    • 用字母 s^2 表示。

    • 计算公式为:

    • 其中, n 是样本中的元素数量,x_i 是每个元素的值,bar{x} 是样本的均值。

开发与评估异常检测系统


异常检测与监督学习

选择什么样的特征






相关推荐
eybk5 小时前
Pytorch+Mumu模拟器+萤石摄像头实现对小孩学习的监控
学习
6.945 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
Aileen_0v05 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
itwangyang5205 小时前
AIDD - 从机器学习到深度学习:蛋白质-配体对接评分函数的进展
人工智能·深度学习·机器学习
jerry2011086 小时前
机器学习常用术语
人工智能·机器学习
IT古董6 小时前
【机器学习】机器学习的基本分类-强化学习-Actor-Critic 方法
人工智能·机器学习·分类
終不似少年遊*6 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
嘿嘻哈呀7 小时前
使用ID3算法根据信息增益构建决策树
决策树·机器学习·信息增益·id3算法
守护者1707 小时前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
学会沉淀。7 小时前
Docker学习
java·开发语言·学习