机器学习笔记

参考视频

机器学习分为 回归和分类

回归:预测的是连续值(如0.87 0.95)

分类:预测的是离散值

聚类:聚类(Clustering) 是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离

学习任务可大致划分为两大类: "监督学习"(supervised learning)和 "无监督学习 "(unsupervised learning),分类和回归是前者的代表,而聚类则是后者的代表

监督学习:指训练时是知道训练的数据的正确结果的

无监督学习:指训练时是不知道训练的数据的正确结果的

误差:学习器的实际预测输出与样本的真实输出之间的差异

错误率 : E = a m E = \frac{a}{m} E=ma

精度: 精度 = 1 − 错误率 精度= 1-错误率 精度=1−错误率

过拟合与欠拟合

过拟合:指学习器把样本训练的"太好了",把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质。

欠拟合:指学习器学习的不够,对训练样本的一般性质尚未学好。

NP问题、P问题、NPC问题

NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。

P类问题:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。(能很快找到答案的问题)

NP类问题:指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。所有的P类问题都是NP问题。(能很快验证答案是否正确的问题)

NPC问题:一个NP问题可以使所有NP问题在多项式复杂度内归约到它。也称NP完全问题。(能很快验证答案是否正确,但无法很快找到答案的问题)

归约:也叫约化。 简单地说,一个问题A可以约化为问题B的含义即是,可以用问题B的解法解决问题A,或者说,问题A可以"变成"问题B。

什么是P=NP?

P = N P P=NP P=NP:NP完全问题能在多项式时间内解出

KaTeX parse error: Expected '}', got 'EOF' at end of input: {P}\ne{NP:理论上根本没有多项式时间复杂度的解法

评估方法:留出法、交叉验证、自助法

性能度量:均方误差

均方误差: E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^{m} (f(x_i)-y_i)^2 E(f;D)=m1∑i=1m(f(xi)−yi)2

均方误差(一般形式): E ( f ; D ) = ∫ x ∼ D ( f ( x i ) − y i ) 2 E(f;D)=\int_{x\sim D} (f(x_i)-y_i)^2 E(f;D)=∫x∼D(f(xi)−yi)2

y i y_i yi真实值 f ( x i ) f(x_i) f(xi) 预测值 E ( f ; D ) E(f;D) E(f;D) 基于数据分布 D D D,学习器 f f f的期望均方误差

错误率,精度

错误率: E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_i)\ne y_i ) E(f;D)=m1∑i=1mI(f(xi)=yi)

错误率(一般形式): E ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x E(f;D)=\int_{x\sim D}\mathbb{I}(f(x)\ne y)p(x)dx E(f;D)=∫x∼DI(f(x)=y)p(x)dx

精度 : a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) acc(f;D)=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_i)=y_i ) =1-E(f;D) acc(f;D)=m1∑i=1mI(f(xi)=yi)=1−E(f;D)

精度(一般形式): a c c ( f ; D ) = ∫ x ∼ D I ( f ( x ) ≠ y ) p ( x ) d x = 1 − E ( f ; D ) acc(f;D)=\int_{x\sim D}\mathbb{I}(f(x)\ne y)p(x)dx=1-E(f;D) acc(f;D)=∫x∼DI(f(x)=y)p(x)dx=1−E(f;D)

I ( f ( x i ) ≠ y i ) \mathbb{I}(f(x_i) \ne y_i) I(f(xi)=yi):指示函数:若 ( f ( x i ) ≠ y i ) (f(x_i) \ne y_i) (f(xi)=yi)(即学习器对第 i i i样本预测错误),则 I ( ⋅ ) = 1 \mathbb{I}(\cdot) = 1 I(⋅)=1;若预测正确,则 I ( ⋅ ) = 0 \mathbb{I}(\cdot) = 0 I(⋅)=0。

真正例(true positive)、假正例(false positive)、 真反例(true negative)、假反例(false negative)四种情形,令 TP 、FP 、TN 、FN

TP + FP + TN + FN = 样 例 总 数

| 真实情况 | 预测结果 ||

真实情况 正例 反例
正例 TP (真正例) FN (假反例)
反例 FP (假正例) TN (真反例)

查准率P 与查全率R 分别定义为

查准率 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

查全率 P = T P T P + F N P=\frac{TP}{TP+FN} P=TP+FNTP

在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小

线性回归预测函数 y i = f ( x i ) = w x i − b y_i=f(x_i)=wx_i - b yi=f(xi)=wxi−b

最小二乘法的本质是 "求解参数 w w w(斜率)和 b b b(截距),使平方偏差和最小"

( w ∗ , b ∗ ) = arg ⁡ w , b m i n ∑ i = 1 m ( f ( x i ) − y i ) 2 = arg ⁡ w , b m i n ∑ i = 1 m ( y i − w x i − b ) 2 (w^*,b^*) =\arg\limits_{w,b}min\sum_{i=1}^{m} (f(x_i)-y_i)^2 =\arg\limits_{w,b}min\sum_{i=1}^{m} (y_i-wx_i-b)^2 (w∗,b∗)=w,bargmin∑i=1m(f(xi)−yi)2=w,bargmin∑i=1m(yi−wxi−b)2

从坐标系角度看,线性回归的核心是 "让预测直线尽可能贴近所有样本点"

一文让你彻底搞懂最小二乘法(超详细推导)

欧式空间 欧式距离

一、什么是欧式空间(Euclidean Space)

欧式空间是对现实中 "平直空间" 的数学抽象,我们日常生活的三维空间(长、宽、高)就是典型的欧式空间,数学上可拓展到任意维度(如机器学习中的高维特征空间)。

它的核心特征有两个,满足这两个条件的空间就是欧式空间:

有 "内积" 运算:

1.能对空间中的两个向量(如点的坐标)做内积计算(公式: a ⃗ ⋅ b ⃗ = a 1 b 1 + a 2 b 2 + ⋯ + a n b n \vec{a} \cdot \vec{b}=a_1b_1+a_2b_2+\dots +a_nb_n a ⋅b =a1b1+a2b2+⋯+anbn)内积可用来定义 "长度" 和 "角度"。

2.满足欧几里得公理:比如 "两点之间线段最短""平行线永不相交" 等我们熟悉的几何规则,不存在类似球面的 "弯曲" 特性(非欧式空间如球面,平行线会相交)。

常见的欧式空间例子:

复制代码
1 维欧式空间:直线(如数轴,只有 "前后" 一个维度)。
2 维欧式空间:平面(如纸面上的坐标系,有 "左右、上下" 两个维度)。
3 维欧式空间:现实中的立体空间(如房间,有 "长、宽、高" 三个维度)。
高维欧式空间:如机器学习中,一个样本若有 100 个特征(如 100 个用户属性),就对应 100 维欧式空间中的一个点。
什么是欧式距离(Euclidean Distance)

欧式距离是欧式空间中 "两点之间直线距离" 的数学计算方式,本质是勾股定理在高维空间的推广。

一维空间

距离=\\left \| x_1-x_2 \\right \|

n 维空间(平面上两点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)和 ( x 2 , y 2 ) (x_2,y_2) (x2,y2):

距离 =\\sqrt{\\ {\\textstyle \\sum_{i=1}\^{n}} (x_{1i}-x_{2i})\^2}

核心特点与用途

特点:计算简单直观,完全符合我们对 "距离" 的日常认知,且对空间中 "长度""角度" 的定义依赖欧式空间的内积运算。

用途:是数据科学和机器学习中最常用的距离度量方式,例如

复制代码
聚类算法(如 K-Means)中衡量样本相似度。
线性回归中计算样本点到预测直线的垂直距离(平方后求和即最小二乘法)。
图像识别中比较两个像素点的差异
python 复制代码
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体,确保中文正常显示
plt.rcParams['font.family'] = 'SimHei'  # 替换为你选择的字体
# 定义Sigmoid函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 生成x值(从-10到10,间隔0.1,确保曲线平滑)
x = np.arange(-10, 10, 0.1)
y = sigmoid(x)  # 计算对应的y值

# 创建画布
plt.figure(figsize=(8, 6))
# 绘制Sigmoid曲线
plt.plot(x, y, color='blue', linewidth=2, label='Sigmoid函数')
# 添加标题和坐标轴标签
plt.title('Sigmoid函数图像', fontsize=16)
plt.xlabel('x', fontsize=12)
plt.ylabel('σ(x) = 1/(1+e^(-x))', fontsize=12)
# 添加网格和图例
plt.grid(alpha=0.3)
plt.legend()

plt.show()

线性判别分析(Linear Discriminant Analysis,简 称 L D A)

一文读懂线性判别分析(LDA)

二分类+多分类LDA线性判别分析降维算法的原理与推导

复制代码
LDA的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,
使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样本进行分类时,
将其投影到同样的这条直线上,再根据投影点的位置来定新样本的类别.

欠采样"(undersampling),即去除一些反例使得正、反例数目接近,然后再进行学习

过采样" (oversampling),即增加一些正例使得正、反例数目接近,然后再进行学习

类别不平衡问题

复制代码
如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰.
例如有998个反例,但正例只有2 个,那么学习方法只需返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例.

几率 y 1 − y \frac{y}{1-y} 1−yy则反映了正例可能性与反例可能性之比值

当训练集中正、反例的数目不同时,令 m + m^+ m+表示正例数目, m − m^- m−表示反例数目,则观测几率是\\frac{m^+}{m^-}

于是,只要分类器的预测几率高于观测几率就应判定为正例,即 y 1 − y > m + m − \frac{y}{1-y}>\frac{m^+}{m^-} 1−yy>m−m+

我们的分类器是基于 y 1 − y \frac{y}{1-y} 1−yy进行决策,因此,需对其预测值进行调整,使其在基于 y 1 − y \frac{y}{1-y} 1−yy决策时,实际是在执行式 y 1 − y > m + m − \frac{y}{1-y}>\frac{m^+}{m^-} 1−yy>m−m+.要做到这一点很容易,

只需令 y ′ 1 − y ′ = y 1 − y × m + m − \frac{y'}{1-y'}=\frac{y}{1-y}\times \frac{m^+}{m^-} 1−y′y′=1−yy×m−m+

决策树

三种情形会导致递归返回

复制代码
( 1 )当前结点包含的样本全属于同一类别,无需划分
( 2 ) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
( 3 )当前结点包含的样本集合为空,不能划分.

信息熵(Information Entropy)的计算公式,用于度量样本集合的纯度

Ent(D)=-\\sum_{k-1}\^{\|y\|}p_klog_2p_k

符号与含义

E n t ( D ) Ent(D) Ent(D):样本集合 D D D的信息熵,值越大表示集合中类别分布越混乱(纯度越低);值越小表示纯度越高(如所有样本属于同一类时,熵为 0)。

D:待评估的样本集合(如一批用于分类的数据集)

∣ y ∣ |y| ∣y∣:样本集合中类别总数(如二分类任务中 ∣ y ∣ = 2 |y|=2 ∣y∣=2,多分类任务中 ∣ y ∣ > 2 |y|>2 ∣y∣>2

p k p_k pk:集合 D D D中第 k k k类样本的占比(即 p k = 第 k 类样本数 总样本数 p_k=\frac{第 k 类样本数}{总样本数} pk=总样本数第k类样本数) 满足 ∑ k = 1 ∣ y ∣ p k = 1 {\textstyle \sum_{k=1}^{|y|} } p_k =1 ∑k=1∣y∣pk=1

log ⁡ 2 p k \log_2 p_k log2pk:以 2 为底的对数运算,用于量化 "单个类别带来的信息量";由于 p k < 1 p_k<1 pk<1, log ⁡ 2 p k \log_2 p_k log2pk通常为负数,前面的负号保证信息熵为非负值。

信息增益(Information Gain),用于决策树算法中选择最优划分特征

信息增益的本质是 "划分前的总混乱度 - 划分后各子节点混乱度的加权和",反映了属性a对 "减少类别不确定性" 的贡献:

G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V} \frac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)

符号与含义

G a i n ( D , a ) Gain(D,a) Gain(D,a):用属性a对样本集D划分后获得的信息增益,值越大表示该属性对 "降低类别混乱度" 的贡献越大,越适合作为划分特征。

E n t ( D ) Ent(D) Ent(D):样本集 D D D的信息熵(衡量划分前的类别混乱程度)。

V V V:属性a的取值总数(如属性 "性别" 有 "男、女" 两个取值,则 ( V = 2 ) (V=2) (V=2)。

D v D^v Dv:按属性a的第v个取值划分后得到的子样本集。

∣ D v ∣ ∣ D ∣ \frac{|D^v|}{|D|} ∣D∣∣Dv∣:子样本集 D v D^v Dv样本占比(即 D v D^v Dv中样本数与 D D D总样本数的比值,用于对各子节点的条件熵加权)。

E n t ( D v ) Ent(D^v) Ent(Dv):子样本集 D v D^v Dv的信息熵(衡量划分后子节点的类别混乱程度)

增益率(Gain Ratio),是决策树算法中用于改进 "信息增益" 选择特征偏倚的指标

Gain ⁡ ratio ⁡ ( D , a ) = Gain ⁡ ( D , a ) IV ⁡ ( a ) \operatorname{Gain}\operatorname{ratio}(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} Gainratio(D,a)=IV(a)Gain(D,a)

I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V} \frac{|D^v|}{|D|}log_2 \frac{|D^v|}{|D|} IV(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣

Gain ⁡ ratio ⁡ ( D , a ) \operatorname{Gain}\operatorname{ratio}(D, a) Gainratio(D,a):属性 a a a对样本集 D D D的增益率,用于平衡 "信息增益" 对多值属性的偏好。

G a i n ( D , a ) Gain(D, a) Gain(D,a):属性 a a a的信息增益(前文已解释,衡量划分后熵的减少量)。

I V ( a ) IV(a) IV(a):属性 a a a的固有值(Intrinsic Value),衡量属性本身的 "分裂复杂度"(即属性取值越多,固有值越大)。

固有值的本质是 "属性a划分样本集时的信息熵" ------ 属性取值越多(即V越大), I V ( a ) IV(a) IV(a)越大(例如,若一个属性的每个取值仅对应一个样本,其固有值会非常大)。

基尼指数用于度量样本集合的不纯度

基尼指数通过 "随机抽两个样本属于不同类的概率" 量化了样本集合的不纯度,是 CART 决策树实现特征选择和节点划分的关键工具。

Gini(D)=\\sum_{k=1}\^{\|y\|} \\sum_{k'\\ne k} =1-\\sum_{k=1}^{\|y\|}{p_k}^2

属性a 的基尼指数定义

Gini_ index(D,a)=\\sum_{\|D\|}^{\|D^v\|}Gini(D\^v)

p k p_k pk:是第k类样本的占比。

决策树、理解信息熵、信息增益(ID3)、增益率(C4.5)、基尼指数(CART)、预剪枝、后剪枝、多变量决策树

决策树、ID3算法、C4.5算法、CART算法:原理,案例和代码

连续值和缺失值详解

激活函数
python 复制代码
# 1. 导入必备库
import numpy as np  # 用于数值计算和生成数据
import matplotlib.pyplot as plt  # 用于绘制图像

# 2. 生成x轴数据(覆盖两个函数的有效定义域,确保曲线平滑)
x = np.linspace(-1, 1, 1000000)  # 从-5到5生成1000个均匀分布的点,步长越小曲线越平滑

# 3. 定义并计算两个函数的值
## 3.1 阶跃函数(符号函数):x≥0时返回1,x<0时返回0
step_func = np.where(x >= 0, 1, 0)  # np.where是向量化判断,高效计算每个x对应的函数值

## 3.2 Sigmoid函数:σ(x) = 1 / (1 + e^(-x))(常用激活函数,平滑过渡)
sigmoid_func = 1 / (1 + np.exp(-x))  # np.exp实现e的幂运算,向量化计算无需循环

# 4. 创建画布和子图(分栏展示两个函数)
plt.figure(figsize=(12, 5))  # 画布尺寸:宽12英寸,高5英寸

# 5. 绘制阶跃函数(左图)
plt.subplot(1, 2, 1)  # 1行2列的子图,当前绘制第1个(左)
plt.plot(x, step_func, color='red', linewidth=2)  # 绘制阶跃函数,红色粗线
plt.scatter(0, 0, color='red', marker='o', edgecolor='white', s=80)  # 标记x=0处的空心点(与定义一致)
plt.axvline(x=0, color='gray', linestyle='--', alpha=0.5)  # 垂直参考线(y轴)
plt.axhline(y=0, color='gray', linestyle='--', alpha=0.5)  # 水平参考线(x轴)
plt.xlim(-1, 1)  # x轴范围:-5到5
plt.ylim(-0.5, 1.5)  # y轴范围:-0.5到1.5(避免图像紧贴边界)
plt.xlabel('x', fontsize=11)  # x轴标签
plt.ylabel('y', fontsize=11)  # y轴标签
plt.title('阶跃函数(符号函数)', fontsize=12, fontweight='bold')  # 标题
plt.grid(alpha=0.3)  # 添加网格,alpha控制透明度(0-1)

# 6. 绘制Sigmoid函数(右图)
plt.subplot(1, 2, 2)  # 1行2列的子图,当前绘制第2个(右)
plt.plot(x, sigmoid_func, color='blue', linewidth=2)  # 绘制Sigmoid函数,蓝色粗线
plt.axvline(x=0, color='gray', linestyle='--', alpha=0.5)  # 垂直参考线(y轴)
plt.axhline(y=0.5, color='orange', linestyle=':', alpha=0.8)  # 标记Sigmoid中点(x=0时y=0.5)
plt.xlim(-1, 1)  # x轴范围与左图一致,保持视觉统一
plt.ylim(-0.1, 1.1)  # y轴范围:-0.1到1.1(覆盖Sigmoid的取值范围0-1)
plt.xlabel('x', fontsize=11)
plt.ylabel('y', fontsize=11)
plt.title('Sigmoid函数', fontsize=12, fontweight='bold')
plt.grid(alpha=0.3)

# 7. 调整子图间距,避免标签重叠
plt.tight_layout()

# 8. 显示图像
plt.show()
感知机

感知机原理详解

感知机(Perceptron)由两层神经元组成

感知机通过错误驱动的迭代更新来学习权重w和偏置b,核心思想是 "对分类错误的样本,调整权重使模型更接近正确分类"。

更新规则
W i ← W i + △ W i W_i\gets W_i+\bigtriangleup W_i Wi←Wi+△Wi

△ W i = η ( y − y ′ ) x i \bigtriangleup W_i =\eta (y-y')x_i △Wi=η(y−y′)xi

称为学习率 η \eta η

支持向量机

向量机

支持向量机(SVM, Support Vector Machine)

支持向量机的核心思想是:寻找一条"最宽"的街道(Margin),使得两类数据点都被清晰地分在街道的两侧,并且街道的中间线就是我们的决策边界。

"最好"的边界:这条边界应该对未见过的数据具有最强的泛化能力,即最不容易分错。直觉上,位于两类数据"正中间"的边界是最鲁棒的。

"街道"的边界:这条"街道"是由距离最近的数据点来定义的。这些决定了街道宽度的、最关键的数据点,就叫做支持向量。

核心目标:最大化这个街道的宽度(Margin)。

处理线性不可分:软间隔与核技巧

3.1 软间隔

为了解决线性不可分和过拟合问题,我们引入松弛变量 ξ_i。它允许某些数据点在一定程度上"违反"间隔边界。

优化目标变为:

最小化: 1 2 ∗ ∣ ∣ w ∣ ∣ 2 + C ∗ Σ ( ξ i ) \frac{1}{2} * ||w||² + C * Σ(ξ_i) 21∗∣∣w∣∣2+C∗Σ(ξi)

约束条件: y i ( w ⋅ x i + b ) ≥ 1 − ξ i 且 ξ i ≥ 0 y_i (w · x_i + b) ≥ 1 - ξ_i 且 ξ_i ≥ 0 yi(w⋅xi+b)≥1−ξi且ξi≥0

这里的 C 是一个非常重要的正则化参数:

C 值很大: 模型对误分类的惩罚很大,间隔会变窄,倾向于在训练集上做到完美分类,但可能导致过拟合。

C 值很小: 模型对误分类的容忍度更高,间隔会变宽,可能允许更多的训练错误,但模型的泛化能力可能更强,避免了过拟合。

软间隔SVM在"最大化间隔"和"最小化分类错误"之间找到了一个平衡点。

3.2 核技巧

对于完全无法用线性平面分开的数据(例如同心圆),SVM使用了其最强大的武器------核技巧。

核心思想:将数据从原始的低维空间,映射到一个更高维的特征空间。在这个高维空间中,数据变得线性可分了。

贝叶斯分类器

贝叶斯分类

贝叶斯分类器(贝叶斯定理、极大似然估计、朴素贝叶斯、半朴素贝叶斯、贝叶斯网、Python源码)

贝叶斯

一、核心思想:用 "概率" 做分类决策

贝叶斯分类器的本质的是 "逆概率推理":已知 "某类样本的特征分布"(先验概率),当出现一个新样本时,通过其特征反推 "它属于该类的概率"(后验概率),最终选择后验概率最大的类别。

集成学习

集成学习

集成学习(Ensemble Learning)简单入门

集成学习

核心思想

集成学习(Ensemble Learning)是一类通过组合多个基础模型(弱学习器)的预测结果,来提升整体模型性能的机器学习方法。核心逻辑是 "集思广益"------ 单个弱学习器(性能略优于随机猜测)可能存在偏差或方差问题,但通过合理的组合策略,能降低过拟合风险、提升泛化能力,最终得到强学习器。

聚类

【聚类】五种主要聚类算法

聚类(Clustering)是 无监督学习(Unsupervised Learning) 的核心任务之一,核心思想是 "物以类聚、人以群分"------ 在没有标签的情况下,通过衡量样本间的 "相似性" 或 "距离",将数据自动划分为多个互不重叠的子集(簇 / Cluster),使得同一簇内的样本高度相似,不同簇间的样本差异显著。

经典聚类算法

3.1 K-Means聚类 - 基于质心

复制代码
这是最著名、最常用的聚类算法,以其简单和高效著称。
核心思想:将数据集划分为K个簇,使得每个样本到其所属簇的质心(中心点)的平方距离之和最小。
算法步骤:
初始化:随机选择K个样本点作为初始的质心。

分配步骤:
对于数据集中的每一个样本,计算它与K个质心的距离。
将其分配给距离最近的那个质心所在的簇。

更新步骤:
对于每一个簇,重新计算该簇所有样本点的平均值,将这个平均值作为新的质心。

迭代:
重复步骤2和3,直到质心的位置不再发生显著变化(或达到最大迭代次数)。

优点:
简单、高效,适用于大规模数据集。
当簇是球状、大小相近且分离良好时,效果很好。

缺点:
必须预先指定簇数K。K值的选择通常需要依赖经验或肘部法则等启发式方法。
对初始质心的选择敏感,可能收敛到局部最优解。
对噪声和异常值敏感。
只能发现球状簇,无法处理非凸形状的簇。

3.2 层次聚类 - 基于连通性

复制代码
层次聚类通过构建一颗树(树状图) 来展示数据的层次化簇结构。

核心思想:不需要预先指定簇的数量,而是通过不断地合并或分裂簇来形成一个层次化的嵌套簇集合。

主要方法:
凝聚式(自底向上):开始时将每个样本视作一个独立的簇,然后逐步合并最相似的两个簇,直到所有样本都合并为一个簇。
分裂式(自顶向下):开始时将所有样本视为一个簇,然后逐步分裂为更小的簇,直到每个样本都成为一个簇。(较少使用)

关键问题:如何衡量簇与簇之间的距离?
单链接:两个簇中最近的两个样本之间的距离。容易形成"链式"结构,对噪声敏感。
全链接:两个簇中最远的两个样本之间的距离。倾向于形成紧凑的、大小相近的簇。
平均链接:两个簇中所有样本对之间的平均距离。是前两种方法的折衷。
质心法:两个簇的质心之间的距离。

优点:
不需要预先指定K值。
树状图提供了丰富的可视化结果,可以直观地看到数据在不同粒度下的聚类情况。

缺点:
计算复杂度高,通常为O(n³)或O(n²),不适合大规模数据集。
一旦一个合并或分裂步骤完成,就无法撤销。

3.3 DBSCAN - 基于密度

复制代码
DBSCAN是一种非常强大的基于密度的聚类算法,它能发现任意形状的簇,并且能有效识别噪声点。
核心思想:簇是数据空间中样本点密集的区域,簇之间由低密度区域分隔。

核心概念:
核心对象:如果一个样本在以其为中心、半径为ε的邻域内,包含的样本数量不小于MinPts,则该样本为核心对象。
直接密度可达:如果样本点p在核心对象q的ε邻域内,则称p是从q直接密度可达的。
密度可达:如果存在一个核心对象链,使得p1->p2->...->pn,其中每个pi+1是从pi直接密度可达的,则称pn是从p1密度可达的。
密度相连:如果存在一个核心对象o,使得样本点p和q都是从o密度可达的,则称p和q是密度相连的。
噪声点:不属于任何簇的点。

算法流程:
标记所有点为核心对象、边界点或噪声点。
删除噪声点。
为距离在ε之内的所有核心对象之间添加一条边。
将彼此连通的核心对象及其边界点分配到一个簇中。

优点:
不需要预先指定簇的数量K。
能发现任意形状的簇。
对噪声和异常值有天然的鲁棒性。

缺点:
对参数(ε和MinPts)非常敏感,参数选择困难。
在簇间密度差异较大时,性能不佳。
对高维数据效果不好("维度灾难")
什么是鲁棒性

鲁棒性(Robustness)的核心是 模型 / 系统在面对干扰或不确定性时,保持性能稳定的能力------ 简单说就是 "抗造、不容易崩",即使输入数据有噪声、异常值,或环境 / 数据分布发生小幅变化,模型依然能给出可靠结果。

在机器学习和数据分析中,鲁棒性主要体现在以下几个方面:

  1. 对数据噪声的鲁棒性

    指数据中存在随机干扰(如测量误差、记录错误)时,模型不受影响的能力。
    例:手写数字识别中,图像有轻微模糊(噪声),鲁棒性强的模型仍能正确识别;鲁棒性弱的模型会频繁误判。
    对比:决策树对轻微噪声鲁棒,而线性回归对噪声较敏感(易被异常值带偏)。

  2. 对异常值的鲁棒性

    异常值是数据中偏离正常分布的极端值(如身高数据中的 "3 米"),鲁棒性强的模型能忽略或弱化其影响。
    例:K-Means 对异常值敏感(异常值会拉偏簇中心),而 DBSCAN 能自动将异常值标记为噪声,鲁棒性更强;
    对比:均值对异常值敏感,中位数对异常值鲁棒(所以用 "中位数工资" 比 "平均工资" 更能反映真实水平)。

  3. 对数据分布变化的鲁棒性(泛化能力的延伸)

    指训练数据和测试数据的分布不一致时,模型仍能保持性能的能力(即 "抗分布偏移")。
    例:用城市用户数据训练的推荐模型,应用到农村用户时(数据分布变化),鲁棒性强的模型仍能给出合理推荐,鲁棒性弱的模型推荐效果会大幅下降。

  4. 对模型参数 / 超参数的鲁棒性

    指模型性能不随参数的小幅调整而剧烈波动的能力。
    例:随机森林的性能对 "树的数量""最大深度" 等参数的小幅变化不敏感,鲁棒性强;而 SVM 对 "惩罚系数 C""核函数参数 γ" 的变化很敏感,鲁棒性较弱(需精细调参)。

为什么鲁棒性重要?

复制代码
现实中的数据和环境永远不完美:
数据会有噪声、异常值;
新场景的数据分布可能和训练时不同;
模型参数不可能永远精准。
鲁棒性强的模型才能在这些 "不完美" 中稳定工作,是工业界落地的关键要求(比如金融、医疗等核心场景,模型崩一次可能造成巨大损失)。

提升鲁棒性的常见方法

复制代码
数据层面:数据清洗(去除异常值)、数据增强(增加噪声、扰动,让模型见多识广);
模型层面:选择鲁棒性强的算法(如集成学习、DBSCAN)、加入正则化(防止过拟合,提升泛化能力)、使用鲁棒损失函数(如用 HuberLoss 替代 MSE,抗异常值);
工程层面:交叉验证(确保模型在不同数据子集上都稳定)、参数调优(找到稳健的参数组合)。
相关推荐
听风吹等浪起2 小时前
基于改进TransUNet的港口船只图像分割系统研究
人工智能·深度学习·cnn·transformer
好望角雾眠2 小时前
第四阶段C#通讯开发-9:网络协议Modbus下的TCP与UDP
网络·笔记·网络协议·tcp/ip·c#·modbus
化作星辰2 小时前
深度学习_原理和进阶_PyTorch入门(2)后续语法3
人工智能·pytorch·深度学习
boonya2 小时前
ChatBox AI 中配置阿里云百炼模型实现聊天对话
人工智能·阿里云·云计算·chatboxai
8K超高清2 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒
老夫的码又出BUG了3 小时前
预测式AI与生成式AI
人工智能·科技·ai
AKAMAI3 小时前
AI 边缘计算:决胜未来
人工智能·云计算·边缘计算
仰望—星空3 小时前
MiniEngine学习笔记 : CommandListManager
c++·windows·笔记·学习·cg·direct3d
flex88883 小时前
输入一个故事主题,使用大语言模型生成故事视频【视频中包含大模型生成的图片、故事内容,以及音频和字幕信息】
人工智能·语言模型·自然语言处理