当前位置: 首页 > java >正文

机器学习通关秘籍|Day 05:过拟合和欠拟合、正则化、岭回归、拉索回归、逻辑回归、Kmeans聚类

目录

一、欠拟合过拟合

1、欠拟合

2、过拟合

3、正则化

二、岭回归Ridge

1、损失函数

2、API

三、拉索回归Lasso

1、损失函数

2、API

四、逻辑回归

1、概念

2、原理

3、API

五、K-means算法

1、无监督学习

2、K-means算法

(1)什么是K-means?

(2)算法目标

(3)算法步骤(迭代过程)

(4)示例说明

(5)K-means 的优缺点

3、API

六、总结


一、欠拟合过拟合

        在机器学习中,模型的性能通常受到两个关键问题的影响:欠拟合过拟合。为了缓解这些问题,引入了正则化技术。

        我们把拟合比作一个人的学习程度。欠拟合就是只学了一点,过拟合就是学过头了。欠拟合没有学习到正确的规律,而过拟合却是连“噪声点”的规律也学进去了。

        通过上图,应该能让大家初步地理解欠拟合和过拟合。

1、欠拟合

  • 定义:模型过于 简单,无法捕捉到数据中的复杂模式。

  • 表现

    • 训练集和测试集的误差都较高。

    • 模型对数据的拟合程度不足,表现为低方差和高偏差。

  • 原因

    • 模型复杂度太低(例如线性回归用于非线性数据)。

    • 特征选择不当,忽略了重要特征。

  • 解决方法

    • 增加模型复杂度(例如使用更高阶的多项式特征)。

    • 增加特征数量或引入更多特征工程。

    • 减少正则化强度(如果已经使用了正则化)。

2、过拟合

  • 定义:模型 过于复杂,过度拟合训练数据,导致在新数据上的泛化能力较差。

  • 表现

    • 训练集误差很低,但测试集误差很高。

    • 模型对噪声非常敏感,表现为高方差和低偏差。

  • 原因

    • 模型复杂度过高(例如高阶多项式回归)。

    • 数据量不足,导致模型记忆噪声。

    • 特征维度过高,导致模型参数过多。

  • 解决方法

    • 简化模型(例如降低多项式的阶数)。

    • 增加训练数据量。

    • 使用正则化技术(如岭回归、拉索回归)。

    • 使用交叉验证评估模型。

3、正则化

  • 定义:通过 增加 额外的惩罚项 来限制模型的复杂度,从而防止过拟合。

  • 原理

    • 在损失函数中加入正则化项,使得模型参数的值被约束在一个较小的范围内。

    • 正则化项通常是模型参数的某种范数(如 L1 范数或 L2 范数)。

    • 正则化可以平衡模型的拟合能力和泛化能力。

  • 作用

    • 防止模型参数过大,避免过拟合。

    • 提高模型的泛化能力,使其在新数据上表现更好。

正则化是一种防止过拟合的技术,通过在损失函数中加入惩罚项来限制模型的复杂度。

常见正则化方式:
  • L1 正则化(Lasso)
    促使部分权重变为零,实现特征选择。

  • L2 正则化(Ridge)
    使权重变小但不为零,平滑模型输出。

        在正则化公式中出现的符号 ‖·‖ 是  " 范数(Norm)"  的数学符号。它用来衡量向量(或矩阵)的“大小”或“长度”。在机器学习中,范数常用于衡量模型参数的复杂度,从而作为正则化项加入损失函数中,以防止过拟合。

✅ 正则化的本质是在偏差(Bias)和方差(Variance)之间取得平衡


二、岭回归Ridge

        岭回归是在普通最小二乘法基础上引入 L2 正则化的一种线性回归方法。

1、损失函数

标准线性回归的目标是最小化均方误差:

其中

岭回归在损失函数中添加 L2 正则项:

其中:

  • λ 是正则化系数(控制正则化强度)

优化目标:找到使 J(w) 最小的权重向量 w 。

2、API

from sklearn.linear_model import Ridge
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split# 生成模拟数据
X, y = make_regression(n_samples=100, n_features=5, noise=10, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建岭回归模型
ridge = Ridge(alpha=1.0)  # alpha 对应 λ# 拟合模型
ridge.fit(X_train, y_train)# 预测
y_pred = ridge.predict(X_test)# 查看系数
print("系数:", ridge.coef_)
print("截距:", ridge.intercept_)

📌 注意:alpha 参数越大,正则化越强,模型越简单;太大会导致欠拟合。


三、拉索回归Lasso

        拉索回归使用 L1 正则化,具有稀疏性特点,常用于特征选择。

1、损失函数

其中

由于 L1 的非光滑性,无法直接求导得到闭式解,通常采用坐标下降法或梯度下降法求解。

优点

  • 自动进行特征选择(部分权重被压缩为 0)

  • 更适合高维稀疏数据

缺点

  • 当特征高度相关时,可能随机选择其中一个

  • 解不唯一

2、API

from sklearn.linear_model import Lasso# 创建拉索回归模型
lasso = Lasso(alpha=1.0, max_iter=1000)# 拟合模型
lasso.fit(X_train, y_train)# 预测
y_pred = lasso.predict(X_test)# 查看系数(注意某些可能为0)
print("系数:", lasso.coef_)
print("截距:", lasso.intercept_)

🔍 可以观察到 lasso.coef_ 中某些值为 0,表示对应特征被剔除。


四、逻辑回归

        逻辑回归虽然名字中有 “回归” ,但实际上是 分类算法,主要用于 二分类问题

1、概念

逻辑回归通过 Sigmoid 函数将线性组合映射到 [0,1] 区间,表示属于某一类的概率。

对于输入 x ,预测概率为:

其中 σ(z) 是 sigmoid 函数。

2、原理

损失函数(交叉熵损失)

假设样本标签为 yi​∈{0,1} ,则对数似然函数为:

对应的损失函数为负对数似然:

梯度更新公式:

3、API

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification# 生成二分类数据
X, y = make_classification(n_samples=100, n_features=4, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建逻辑回归模型
log_reg = LogisticRegression()# 拟合
log_reg.fit(X_train, y_train)# 预测
y_pred = log_reg.predict(X_test)
y_proba = log_reg.predict_proba(X_test)  # 获取概率print("预测结果:", y_pred)
print("概率估计:", y_proba)

五、K-means算法

1、无监督学习

什么是无监督学习?

        无监督学习(Unsupervised Learning) 是机器学习中的一种学习方式,它不依赖于带有标签的数据。换句话说,输入数据没有“正确答案”或“目标值”,模型的目标是从数据中发现隐藏的结构、模式或关系。

常见的无监督学习任务包括:

  • 聚类(Clustering)

  • 降维(Dimensionality Reduction)

  • 异常检测(Anomaly Detection)

✅ K-means 就是一种典型的聚类算法,属于无监督学习范畴。

为什么需要无监督学习?

在现实世界中,很多数据是没有标签的。例如:

  • 用户购物行为记录

  • 社交网络中的用户互动

  • 图像像素数据

        这些数据虽然丰富,但没有明确的分类标签。通过无监督学习,我们可以将相似的数据点分组,从而揭示数据的内在结构。

2、K-means算法

(1)什么是K-means?

K-means(K-均值)是一种简单而有效的聚类算法,用于将数据集划分为 K个簇(clusters),使得每个数据点都属于离它最近的簇中心(质心)所代表的簇。

它的核心思想是:最小化簇内平方误差和(Within-cluster sum of squares, WCSS)

(2)算法目标

给定一个数据集 X={x1​,x2​,...,xn​} ,其中每个 xi​ 是一个 d 维向量,K-means 的目标是找到 K 个簇 C1​,C2​,...,CK​ ,并为每个簇分配一个中心点(质心)μj​ ,使得:

即:所有点到其所属簇中心的距离平方和最小

(3)算法步骤(迭代过程)

K-means 算法是一个迭代优化算法,具体步骤如下:

1.初始化

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

2.分配阶段(Assignment Step)

对每个数据点 xi​ ,计算它到各个质心的距离,将其分配给距离最近的簇:

3.更新阶段(Update Step)

重新计算每个簇的质心(即该簇中所有点的均值):

4.重复步骤 2 和 3

直到满足停止条件,如:

  • 质心不再变化(收敛)

  • 达到最大迭代次数

  • 簇的分配不再改变

⚠️ 注意:K-means 可能会陷入局部最优解,因此通常运行多次取最佳结果。

(4)示例说明

假设我们有以下二维数据点:

(1, 1), (2, 1), (3, 1),

(1, 2), (2, 2), (3, 2),

(1, 3), (2, 3), (3, 3)

设定 K = 2。

  1. 随机选两个点作为初始质心,比如 (1,1) 和 (3,3)

  2. 计算每个点到这两个质心的距离,分配到最近的簇

  3. 更新质心(取每簇平均)

  4. 重复直到收敛

最终可能得到两个簇:左下区域和右上区域。

(5)K-means 的优缺点

优点缺点

实现简单,易于理解

必须预先指定 K 值

计算效率高,适合大规模数据

对异常值敏感

结果可解释性强

只适用于球形簇(圆形/椭圆)

支持在线学习(部分变体)

初始质心影响结果(可能陷入局部最优)

3、API

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 随机种子
np.random.seed(42)
# 随机生成数据 int:整型
data = np.random.randint(0, 100, (200, 2))# 创建模型
model = KMeans(n_clusters=2)
# 训练模型
model.fit(data)
print(model.labels_)
print(model.cluster_centers_)x = data[:, 0]
y = data[:, 1]
# 绘制散点图
plt.scatter(x, y, c=model.labels_)


六、总结

        本文我们讲解了处理正则化的两个回归方式,一种绝对值,一种平方的形式。还介绍了逻辑回归和k-means算法这两个用来“分类”的算法。

        机器学习的阶段我们就告一段落啦,以上就是我在机器学习过程中学到领悟到的所有知识和重点,我们下个阶段再见!

http://www.xdnf.cn/news/19616.html

相关文章:

  • ubantu安装配置hive
  • GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【一】
  • Android入门到实战(六):Android主流图片加载框架
  • 夜莺监控新版表格配置图文讲解
  • TypeScript交叉类型、重复属性、类型断言和as const详解
  • 基于Hadoop的可视化城市宜居指数分析(代码+数据库+LW)
  • Masonry入门学习
  • 精确率、召回率、漏检率、误判率
  • Git安装教程
  • AI瘦身狂魔!微软推出原生1-bit大模型,性能不减,内存仅需同行零头!
  • 基于大数据的京东手机销售数据 可视化分析设计与开发03446原创的定制程序,java、PHP、python、C#小程序、文案全套、毕设程序定制、成品等
  • 华清远见25072班I/O学习day2
  • 继承体系中的隐藏机制解析(继承中的作用域)
  • MongoDB主从切换实战:如何让指定从库“精准”升级为主库?保姆级教程!
  • 基于单片机智能家居语音控制系统
  • 如何在VS Code远程连接Xshell使用
  • Linux - Redis离线安装(安装包的方式安装Redis)
  • 从Redisson分布式锁看锁的设计思路
  • IPC 进程间通信 interprocess communicate
  • 企业微信AI落地:如何选择企业微信服务商?
  • Axios拦截器:前端通信的交通警察[特殊字符]
  • 搭载AX650N高能效比智能视觉芯片——AX2050系列边缘计算盒,可应用在智慧安防交通仓储教育,人脸识别,明厨亮灶,安全生产,智能机器人等
  • table表格字段明细展示
  • 不透明指针
  • 【iOS】折叠cell
  • 《青衣剑客 · Claude》连载
  • 总线矩阵的原理
  • 如何将多个Excel报表合并为一个汇总文件?
  • N32G43x Bootloader 中 ENV 区的管理与实现
  • 前缀和(优化算法)