本文是李航老师的《统计学习方法》[1]一书的代码复现。

作者:黄海广[2]

备注:代码都可以在github[3]中下载。

我将陆续将代码发布在公众号“机器学习初学者”,敬请关注。

代码目录

  • 第 1 章 统计学习方法概论

  • 第 2 章 感知机

  • 第 3 章 k 近邻法

  • 第 4 章 朴素贝叶斯

  • 第 5 章 决策树

  • 第 6 章 逻辑斯谛回归

  • 第 7 章 支持向量机

  • 第 8 章 提升方法

  • 第 9 章 EM 算法及其推广

  • 第 10 章 隐马尔可夫模型

  • 第 11 章 条件随机场

  • 第 12 章 监督学习方法总结

代码参考:wzyonggege[4],WenDesi[5],火烫火烫的[6]

第 1 章 统计学习方法概论

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

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

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

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

5.分类问题、标注问题和回归问题都是监督学习的重要问题。本书中介绍的统计学习方法包括感知机、




近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、EM 算法、隐马尔可夫模型和条件随机场。这些方法是主要的分类、标注以及回归方法。它们又可以归类为生成方法与判别方法。

使用最小二乘法拟和曲线

高斯于 1823 年在误差














独立同分布的假定下,证明了最小二乘方法的一个最优性质: 在所有无偏的线性估计类中,最小二乘方法是其中方差最小的!对于数据



























拟合出函数







有误差,即残差:




















此时





范数(残差平方和)最小时,







 和 




 相似度最高,更拟合

一般的












次的多项式,































为参数

最小二乘法就是要找到一组 





























 ,使得





























 (残差平方和) 最小

即,求 

































举例:我们用目标函数













, 加上一个正态分布的噪音干扰,用多项式去拟合【例 1.1 11 页】

import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
%matplotlib inline
  • ps: numpy.poly1d([1,2,3]) 生成 




















    *

# 目标函数
def real_func(x):return np.sin(2*np.pi*x)# 多项式
def fit_func(p, x):f = np.poly1d(p)return f(x)# 残差
def residuals_func(p, x, y):ret = fit_func(p, x) - yreturn ret
# 十个点
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_]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

M=0

# M=0
p_lsq_0 = fitting(M=0)
Fitting Parameters: [0.02515259]

M=1

# M=1
p_lsq_1 = fitting(M=1)
Fitting Parameters: [-1.50626624  0.77828571]

M=3

# M=3
p_lsq_3 = fitting(M=3)
Fitting Parameters: [ 2.21147559e+01 -3.34560175e+01  1.13639167e+01 -2.82318048e-02]

M=9

# M=9
p_lsq_9 = fitting(M=9)
Fitting Parameters: [-1.70872086e+04  7.01364939e+04 -1.18382087e+05  1.06032494e+05-5.43222991e+04  1.60701108e+04 -2.65984526e+03  2.12318870e+02-7.15931412e-02  3.53804263e-02]

当 M=9 时,多项式曲线通过了每个数据点,但是造成了过拟合

正则化

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

回归问题中,损失函数是平方损失,正则化可以是参数向量的 L2 范数,也可以是 L1 范数。

  • L1: regularization*abs(p)

  • L2: 0.5 * regularization * np.square(p)

regularization = 0.0001
def residuals_func_regularization(p, x, y):ret = fit_func(p, x) - yret = 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()

参考资料

[1] 《统计学习方法》: https://baike.baidu.com/item/统计学习方法/10430179
[2] 黄海广: https://github.com/fengdu78
[3] github: https://github.com/fengdu78/lihang-code
[4] wzyonggege: https://github.com/wzyonggege/statistical-learning-method
[5] WenDesi: https://github.com/WenDesi/lihang_book_algorithm
[6] 火烫火烫的: https://blog.csdn.net/tudaodiaozhale

关于本站

“机器学习初学者”公众号由是黄海广博士创建,黄博个人知乎粉丝23000+,github排名全球前100名(33000+)。本公众号致力于人工智能方向的科普性文章,为初学者提供学习路线和基础资料。原创作品有:吴恩达机器学习个人笔记、吴恩达深度学习笔记等。

往期精彩回顾

  • 那些年做的学术公益-你不是一个人在战斗

  • 适合初学者入门人工智能的路线及资料下载

  • 吴恩达机器学习课程笔记及资源(github标星12000+,提供百度云镜像)

  • 吴恩达深度学习笔记及视频等资源(github标星8500+,提供百度云镜像)

  • 《统计学习方法》的python代码实现(github标星7200+)

  • 机器学习的数学精华(在线阅读版)

备注:加入本站微信群或者qq群,请回复“加群

复现经典:《统计学习方法》第1章 统计学习方法概论相关推荐

  1. 机器学习——统计学习方法——第1章 统计学习及监督学习概论

    监督学习是从标注数据中学习模型的机器学习问题,是统计学习的重要组成部分. 1.1 统计学习 统计学习的特点 统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科. 特点 ...

  2. 统计学习方法——第1章(个人笔记)

    统计学习方法--第1章 统计学习及监督学习概论 <统计学习方法>(第二版)李航,学习笔记 1.1 统计学习 1.特点 (1)以计算机及网络为平台,是建立在计算机及网络上的: (2)以数据为 ...

  3. 复现经典:《统计学习方法》第 6 章 逻辑斯谛回归

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  4. 复现经典:《统计学习方法》第13章 无监督学习概论

    第13章 无监督学习概论 本文是李航老师的<统计学习方法>一书的代码复现.作者:黄海广 备注:代码都可以在github中下载.我将陆续将代码发布在公众号"机器学习初学者" ...

  5. 复现经典:《统计学习方法》第12章 监督学习方法总结

    第 12 章 监督学习方法总结 本文是李航老师的<统计学习方法>一书的代码复现.作者:黄海广 备注:代码都可以在github中下载.我将陆续将代码发布在公众号"机器学习初学者&q ...

  6. 复现经典:《统计学习方法》第 7 章 支持向量机

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  7. 复现经典:《统计学习方法》第 8 章 提升方法

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  8. 复现经典:《统计学习方法》第 10 章 隐马尔可夫模型

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  9. 复现经典:《统计学习方法》第 9 章 EM 算法及其推广

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  10. 复现经典:《统计学习方法》​第 11 章 条件随机场

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

最新文章

  1. 天津发票版本文件服务器端口,天津市增值税发票综合服务平台网址
  2. 句柄 matlab_matlab 整车仿真
  3. Flutter StreamBuilder 实现的一个倒计时功能
  4. 腾讯阿里达成“共识”!马化腾称“用链量”“用云量”或成数字时代的重要指标...
  5. jsp实现仿QQ空间新建多个相册名称,向相册中添加照片
  6. html中div背景颜色渐变(透明 对角 附赠颜色查询对照表)
  7. web开发常用js及html代码
  8. java跳转页面后再跳回前一个页面_js中实现页面跳转(返回前一页、后一页)
  9. 利用python可视化散点图及其计算欧式距离分析相关性
  10. css自适应单位布局vm,vh
  11. 云存储:对象存储管理与安全
  12. 新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题开源全解密版
  13. windows电脑蓝光过滤,颜色校准调节蓝光,电脑源头过滤蓝光,保护眼睛,护眼软件原理
  14. 《手把手教你读财报》读后感
  15. python xlsxwriter行数_使用python库xlsxwriter库来输出各种xlsx文件的示例
  16. 视频教程-php初级到项目实战-PHP
  17. 国内首家苹果iBeacon系统“水滴”启动商用
  18. JavaScript jQuery 实现banner(轮播图) 一
  19. Android 12 新APP启动画面(SplashScreen API)简介源码分析
  20. Python UserAgent解析库——user_agents,判断手机等访问设备

热门文章

  1. Oracle关于TX锁的一个有趣的问题
  2. 利用django中间件CsrfViewMiddleware防止csrf攻击
  3. Array.from()
  4. linux命令学习之:ifconfig
  5. 如何实现分类表统计数目和详情表数量同步
  6. JavaScript中随着鼠标拖拽而移动的块
  7. Codeforces 484B Maximum Value(高效+二分)
  8. 银行登录控件仿制--防钩子,防嗅探
  9. CSDN博客文章写作技巧
  10. GraphPad Prism 9 如何一次处理多张图表?