文章目录
- 前言
- 一、聚类
-
- 常见的聚类算法包括:
- 聚类的步骤通常包括:
- K-means算法
-
- [K-means 算法的工作原理:](#K-means 算法的工作原理:)
- [K-means 算法的特点:](#K-means 算法的特点:)
- [K-means 算法的挑战:](#K-means 算法的挑战:)
- [K-means 算法的实现:](#K-means 算法的实现:)
- 损失函数(失真函数)
- 二、异常检测算法
前言
博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV1Bq421A74G
一、聚类
聚类是一种无监督学习方法,它旨在将数据集中的样本划分为若干个彼此相似的组或簇。聚类的目的是在同一个簇内的样本具有高相似度,而不同簇之间的样本具有低相似度。聚类分析在各种领域都有应用,包括市场细分、社交网络分析、图像分割、基因表达分析等。
常见的聚类算法包括:
-
K-Means 聚类:
- 最常见的聚类算法之一。算法随机初始化 K 个中心点,然后迭代地将每个点分配给最近的中心点形成 K 个簇,并更新中心点为所分配簇的所有点的均值,直到满足某个终止条件。
-
层次聚类(Hierarchical Clustering):
- 通过创建一个聚类树来逐步合并或分割聚类。可以是自底向上的聚合(Agglomerative)或自顶向下的分裂(Divisive)。
-
DBSCAN(Density-Based Spatial Clustering of Applications with Noise):
- 基于密度的聚类方法,可以识别出任意形状的簇,并且能够将噪声点识别出来。
-
Mean Shift 聚类:
- 一种基于密度的非参数聚类方法,通过寻找密度函数的局部极大值点来确定簇中心。
-
谱聚类(Spectral Clustering):
- 使用数据的谱特性来进行聚类,通常用于复杂数据结构的聚类,如图像和图数据。
-
OPTICS(Ordering Points To Identify the Clustering Structure):
- 是 DBSCAN 的一种改进,可以处理不同密度的簇。
聚类的步骤通常包括:
-
数据准备:
- 清洗数据,处理缺失值和异常值。
-
特征选择:
- 确定哪些特征对聚类最有信息量。
-
距离度量:
- 选择一个合适的距离度量方法,如欧氏距离、曼哈顿距离或余弦相似度。
-
选择聚类数量:
- 确定簇的数量,这可能是一个挑战,可以使用肘部法则、轮廓系数等方法来估计。
-
算法选择:
- 根据数据的特性和需求选择合适的聚类算法。
-
聚类算法执行:
- 运行聚类算法对数据进行分组。
-
结果评估:
- 使用内部评价指标(如簇内距离、簇间距离)或外部评价指标(如调整兰德指数)来评估聚类结果的质量。
-
结果解释:
- 分析聚类结果,确定簇的含义。
聚类分析是一个探索性的数据挖掘任务,它不依赖于预先定义的类别标签,而是试图发现数据中的自然分组。
K-means算法
K-means 是一种广泛使用的聚类算法,属于无监督学习的一种。它的目标是将数据集中的样本划分为预定数量 K 的簇,使得簇内的样本尽可能相似,而簇间的样本尽可能不同。
K-means 算法的工作原理:
-
初始化:
- 随机选择 K 个数据点作为初始的簇中心(质心)。
-
分配:
- 将每个数据点分配给最近的簇中心,形成 K 个簇。
如果有一个K没有任何簇,一般来说需要把那个K消掉
-
更新:
- 计算每个簇的质心,即将每个簇内所有点的均值作为新的质心。
-
- 计算每个簇的质心,即将每个簇内所有点的均值作为新的质心。
-
迭代:
- 重复分配和更新步骤,直到质心不再发生变化,或者达到预定的迭代次数。
-
终止:
- 当质心的变化非常小或达到预定的迭代次数时,算法终止。
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 是聚类分析中的基础工具,尽管它有一些局限性,但它在许多实际应用中仍然非常有效。
损失函数(失真函数)
二、异常检测算法
异常检测是机器学习中的一个重要任务,它旨在识别数据集中的异常或不寻常模式。这些异常可能是由错误、欺诈活动、系统故障或其他未知因素引起的。异常检测可以应用于金融欺诈检测、网络安全、工业系统监控、医疗诊断等多个领域。
常见的异常检测算法包括:
-
基于统计的方法:
- 参数方法:假设数据遵循特定的统计分布(如正态分布),使用均值、方差等参数来识别异常值。
- 非参数方法:不假设数据的分布形式,而是从数据中学习分布,如使用直方图或核密度估计。
-
基于距离的方法:
- K-Nearest Neighbors (KNN):计算数据点与其最近邻的距离,距离较大的点可能是异常点。
-
基于密度的方法:
- Local Outlier Factor (LOF):基于数据点的局部密度,比较数据点的密度与其邻居的密度。
- DBSCAN:基于核心点、边界点和噪声点的概念,将低密度区域的点识别为异常。
-
基于聚类的方法:
- K-Means:将数据点分组到最近的聚类中心,距离所有聚类中心都远的点可能是异常。
- Hierarchical Clustering:通过构建聚类树来识别异常。
-
基于降维的方法:
- Principal Component Analysis (PCA):通过降维来突出异常点,因为异常通常在低维空间中更容易被识别。
-
基于分类的方法:
- One-Class SVM:训练一个分类器来识别数据中的正常模式,将与正常模式显著不同的数据点识别为异常。
-
基于深度学习的方法:
- Autoencoders:使用神经网络来学习数据的压缩表示,然后通过比较重构误差来识别异常。
- Isolation Forest:一种基于随机森林的算法,通过随机选择特征和分割点来隔离异常。
-
基于时间序列的方法:
- ARIMA模型:适用于时间序列数据,通过模型残差来检测异常。
实现步骤通常包括:
- 数据预处理:清洗数据,处理缺失值和异常值。
- 特征选择:确定哪些特征对异常检测最有信息量。
- 模型训练:使用选定的算法训练模型。
- 模型评估:使用适当的评估指标来评估模型的性能。
- 异常检测:应用模型来识别新的异常数据点。
在选择异常检测算法时,需要考虑数据的特性、异常的类型、业务需求以及算法的复杂度。每种方法都有其优势和局限性,通常需要根据具体情况进行选择和调整。
基于正态分布
高斯分布(Gaussian distribution),也称为正态分布(Normal distribution),是统计学中最常见的概率分布之一。它在自然科学和社会科学的许多领域中都有应用,因为许多自然现象和社会现象的测量值都近似地遵循正态分布。
高斯分布的特点:
-
钟形曲线:正态分布的图形是一个对称的钟形曲线,其中心位于均值(平均值)。
-
均值(Mean):正态分布的中心点,表示数据的平均水平。
-
方差(Variance):衡量数据分布的离散程度,方差的平方根是标准差。
-
标准差(Standard Deviation):衡量数据分布的离散程度,是方差的平方根。
-
对称性:正态分布关于均值对称。
-
数据分布:在均值的一个标准差范围内的数据占总数据的约68%,在两个标准差范围内的数据占总数据的约95%,在三个标准差范围内的数据占总数据的约99.7%。
高斯分布的数学表达:
正态分布的概率密度函数(PDF)由以下公式给出:
高斯分布在异常检测中的应用:
在异常检测中,正态分布经常被用来建模正常数据的分布。基于正态分布的异常检测方法通常遵循以下步骤:
-
假设检验:假设数据遵循正态分布,然后使用统计检验(如Z-score或Grubbs' test)来确定数据点是否可能是异常的。
-
阈值设定:根据正态分布的特性,设定阈值(如均值±3标准差)来识别异常值。
-
概率评分:计算数据点遵循正态分布的概率,低概率的数据点可能是异常的。
-
模型拟合:使用正态分布模型来拟合数据,然后识别那些不符合模型的数据点。
实例:
假设我们有一个数据集,我们认为它遵循正态分布,均值为100,标准差为10。我们可以计算任何数据点的Z-score:
其中 X 是数据点,μ 是均值,σ 是标准差。
如果一个数据点的Z-score大于3或小于-3,那么它可能被视为异常值。
正态分布在异常检测中的应用非常广泛,但需要注意的是,如果数据分布显著偏离正态分布,那么基于正态分布的方法可能不太适用。在这种情况下,可能需要考虑其他类型的分布或异常检测方法。
在统计学中,方差的计算可以通过两种不同的方法来估计,这两种方法分别对应于不同的样本大小和应用场景。这两种估计方法通常被称为"总体方差"和"样本方差"。
-
总体方差(Population Variance):
-
用希腊字母 σ²(西格玛平方)表示。
-
计算公式为:
-
其中,N 是总体中的元素数量,x_i是每个元素的值,μ是总体的均值。
-
-
样本方差(Sample Variance):
-
用字母 s^2 表示。
-
计算公式为:
-
其中, n 是样本中的元素数量,x_i 是每个元素的值,bar{x} 是样本的均值。
-
开发与评估异常检测系统
异常检测与监督学习
选择什么样的特征