统计学习方法——机器学习和统计学习介绍及基本入门

1.统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学习包括监督学习、非监督学习、半监督学习和强化学习。

2.统计学习方法三要素------模型、策略、算法,对理解统计学习方法起到提纲挈领的作用。

3.本书主要讨论监督学习,监督学习可以概括如下:从给定有限的训练数据出发, 假设数据是独立同分布的,而且假设模型属于某个假设空间,应用某一评价准则,从假设空间中选取一个最优的模型,使它对已给训练数据及未知测试数据在给定评价标准意义下有最准确的预测。

4.统计学习中,进行模型选择或者说提高学习的泛化能力是一个重要问题。如果只考虑减少训练误差,就可能产生过拟合现象。模型选择的方法有正则化与交叉验证。学习方法泛化能力的分析是统计学习理论研究的重要课题。

5.分类问题、标注问题和回归问题都是监督学习的重要问题。本书中介绍的统计学习方法包括感知机、 𝑘 近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、EM算法、隐马尔可夫模型和条件随机场。这些方法是主要的分类、标注以及回归方法。它们又可以归类为生成方法与判别方法。

使用最小二乘法拟和曲线

这段代码实现了一个多项式拟合的示例,使用最小二乘法来拟合一个带有噪声的正弦函数。以下是对代码流程的详细解释:

1. 导入必要的库

python 复制代码
import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
  • numpy:用于数值计算和数组操作。
  • scipy:提供科学计算的工具,这里主要使用 scipy.optimize 中的 leastsq 函数进行最小二乘法拟合。
  • matplotlib.pyplot:用于绘图和可视化。

2. 定义目标函数

python 复制代码
def real_func(x):
    return np.sin(2 * np.pi * x)
  • real_func:定义了一个目标函数,返回 y = sin ⁡ ( 2 π x ) y = \sin(2\pi x) y=sin(2πx),这是我们希望拟合的真实函数。

3. 定义多项式函数

python 复制代码
def fit_func(p, x):
    f = np.poly1d(p)
    return f(x)
  • fit_func:接受多项式系数 p 和输入 x,返回多项式在 x 上的值。np.poly1d(p) 创建一个多项式对象。

4. 定义残差函数

python 复制代码
def residuals_func(p, x, y):
    ret = fit_func(p, x) - y
    return ret
  • residuals_func:计算拟合值与真实值之间的残差(误差)。它返回拟合值与实际观测值之间的差。

5. 生成数据点

python 复制代码
x = np.linspace(0, 1, 10)
x_points = np.linspace(0, 1, 1000)
y_ = real_func(x)
y = [np.random.normal(0, 0.1) + y1 for y1 in y_]
  • x:生成 10 个均匀分布在 0 , 1 0, 1 0,1 区间的点。
  • x_points:生成 1000 个均匀分布在 0 , 1 0, 1 0,1 区间的点,用于绘制拟合曲线。
  • y_:计算真实函数在 x 上的值。
  • y:在真实值上添加正态分布的噪声,生成带噪声的观测值。

6. 定义拟合函数

python 复制代码
def fitting(M=0):
    """
    M    为 多项式的次数
    """
    # 随机初始化多项式参数
    p_init = np.random.rand(M + 1)
    # 最小二乘法
    p_lsq = leastsq(residuals_func, p_init, args=(x, y))
    print('Fitting Parameters:', p_lsq[0])

    # 可视化
    plt.plot(x_points, real_func(x_points), label='real')
    plt.plot(x_points, fit_func(p_lsq[0], x_points), label='fitted curve')
    plt.plot(x, y, 'bo', label='noise')
    plt.legend()
    return p_lsq
  • fitting:定义了一个拟合函数,接受一个参数 M,表示多项式的次数。
    • 随机初始化多项式参数 p_init,长度为 M + 1 M + 1 M+1。
    • 使用 leastsq 函数进行最小二乘法拟合,计算最佳的多项式参数 p_lsq
    • 打印拟合参数。
    • 使用 Matplotlib 绘制真实函数、拟合曲线和带噪声的观测值。

7. 调用拟合函数

在代码中并没有直接调用 fitting 函数的部分,但可以通过以下方式调用它:

python 复制代码
fitting(M=3)  # 例如,拟合一个三次多项式
plt.show()  # 显示绘制的图形

这段代码的主要流程是:

  1. 定义真实函数和多项式拟合函数。
  2. 生成带有噪声的观测数据。
  3. 使用最小二乘法拟合多项式,并可视化结果。

通过调整多项式的次数 M,可以观察到不同复杂度的多项式如何拟合带噪声的数据。

M=0

python 复制代码
p_lsq_0 = fitting(M=0)

M=1

python 复制代码
p_lsq_0 = fitting(M=1)

M=3

python 复制代码
p_lsq_0 = fitting(M=3)

M=9

python 复制代码
p_lsq_0 = fitting(M=9)

结果显示过拟合, 引入正则化项(regularizer),降低过拟合

python 复制代码
regularization = 0.0001


def residuals_func_regularization(p, x, y):
    ret = fit_func(p, x) - y
    ret = np.append(ret,
    np.sqrt(0.5 * regularization * np.square(p)))  # L2范数作为正则化项
    return ret
# 最小二乘法,加正则化项
p_init = np.random.rand(9 + 1)
p_lsq_regularization = leastsq(
residuals_func_regularization, p_init, args=(x, y))
plt.plot(x_points, real_func(x_points), label='real')
plt.plot(x_points, fit_func(p_lsq_9[0], x_points), label='fitted curve')
plt.plot(
    x_points,
    fit_func(p_lsq_regularization[0], x_points),
    label='regularization')
plt.plot(x, y, 'bo', label='noise')
plt.legend()
相关推荐
2601_955767424 分钟前
2026年iPhone17贴膜怎么选:偏振片缺失与磁控溅射AR镀膜技术解析及SGS认证观复盾方案
人工智能·智能手机·ar·护眼钢化膜·磁控溅射
金融RPA机器人丨实在智能5 分钟前
数据库运维Agent比价指南:国产自研产品适配国产数据库兼容性更好吗?
运维·数据库·人工智能·ai
2601_955767426 分钟前
iPhone17偏振片缺失怎么补救:圆偏振光与磁控溅射AR技术解析及悟赫德观复盾方案
人工智能·ar·护眼钢化膜·圆偏振光·#观复盾护景贴
Black蜡笔小新10 分钟前
自动化AI算法训练服务器DLTM一体化训推平台构建企业专属AI能力中台
人工智能·算法·自动化
代码有点萌11 分钟前
CloudStudio 体验 ComfyUI:不用本地部署也能学习 AI 绘图
人工智能
前端小蜗16 分钟前
搞了个 vibecoding 时防摸鱼沉迷的提醒,震到手环上
人工智能·程序员
ZzT17 分钟前
瑞幸 skill 引发的一些思考
人工智能·ai编程·claude
道友可好18 分钟前
AI 测试全绿,代码却是错的
前端·人工智能·后端
美团技术团队24 分钟前
从月球漫步到赛博都市,WBench 测出了世界模型的边界
人工智能
Geoffwo31 分钟前
Windows 本地电脑部署 RAGFlow
人工智能