Full Code of fengdu78/lihang-code for AI

master a0b8ab2366b6 cached
25 files
1.3 MB
744.6k tokens
1 requests
Download .txt
Showing preview only (1,339K chars total). Download the full file or copy to clipboard to get everything.
Repository: fengdu78/lihang-code
Branch: master
Commit: a0b8ab2366b6
Files: 25
Total size: 1.3 MB

Directory structure:
gitextract_a4phc2jx/

├── readme.md
├── 第01章 统计学习方法概论/
│   └── 1.Introduction_to_statistical_learning_methods.ipynb
├── 第02章 感知机/
│   └── 2.Perceptron.ipynb
├── 第03章 k近邻法/
│   └── 3.KNearestNeighbors.ipynb
├── 第04章 朴素贝叶斯/
│   └── 4.NaiveBayes.ipynb
├── 第05章 决策树/
│   └── 5.DecisonTree.ipynb
├── 第06章 逻辑斯谛回归/
│   └── 6.LogisticRegression.ipynb
├── 第07章 支持向量机/
│   └── 7.support-vector-machine.ipynb
├── 第08章 提升方法/
│   └── 8.Boost.ipynb
├── 第09章 EM算法及其推广/
│   └── 9.Expectation_Maximization.ipynb
├── 第10章 隐马尔可夫模型/
│   └── 10.HMM.ipynb
├── 第11章 条件随机场/
│   └── 11.CRF.ipynb
├── 第12章 监督学习方法总结/
│   └── 12.Summary_of_Supervised_Learning_Methods.ipynb
├── 第13章 无监督学习概论/
│   └── 13.Introduction_to_Unsupervised_Learning.ipynb
├── 第14章 聚类方法/
│   └── 14.Clustering.ipynb
├── 第15章 奇异值分解/
│   └── 15.SVD.ipynb
├── 第16章 主成分分析/
│   ├── 16.PCA.ipynb
│   └── data/
│       └── ex7data1.mat
├── 第17章 潜在语义分析/
│   └── 17.LSA.ipynb
├── 第18章 概率潜在语义分析/
│   └── 18.PLSA.ipynb
├── 第19章 马尔可夫链蒙特卡洛法/
│   └── 19.MCMC.ipynb
├── 第20章 潜在狄利克雷分配/
│   ├── 20.LDA.ipynb
│   └── data/
│       └── LDA_test.txt
├── 第21章 PageRank算法/
│   └── 21.PageRank.ipynb
└── 第22章 无监督学习方法总结/
    └── 22.Summary_of_UnSupervised_Learning_Methods.ipynb

================================================
FILE CONTENTS
================================================

================================================
FILE: readme.md
================================================
# 《统计学习方法》第二版的代码实现

李航老师编写的《统计学习方法》全面系统地介绍了统计学习的主要方法,特别是监督学习方法,包括感知机、k近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与支持向量机、提升方法、em算法、隐马尔可夫模型和条件随机场等。除第1章概论和最后一章总结外,每章介绍一种方法。叙述从具体问题或实例入手,由浅入深,阐明思路,给出必要的数学推导,便于读者掌握统计学习方法的实质,学会运用。

《统计学习方法》可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。 

今天我们将李航老师的《统计学习方法》第二版的代码进行了整理,并提供下载。

非常感谢各位朋友贡献的自己的笔记、代码!

2020年6月7日

## 代码目录 

第1章 统计学习方法概论

第2章 感知机

第3章 k近邻法

第4章 朴素贝叶斯

第5章 决策树

第6章 逻辑斯谛回归

第7章 支持向量机

第8章 提升方法

第9章 EM算法及其推广

第10章 隐马尔可夫模型

第11章 条件随机场

第12章 监督学习方法总结

第13章 无监督学习概论

第14章 聚类方法

第15章 奇异值分解

第16章 主成分分析

第17章 潜在语义分析

第18章 概率潜在语义分析

第19章 马尔可夫链蒙特卡洛法

第20章 潜在狄利克雷分配

第21章 PageRank算法

第22章 无监督学习方法总结


## 参考

https://github.com/wzyonggege/statistical-learning-method

https://github.com/WenDesi/lihang_book_algorithm

https://blog.csdn.net/tudaodiaozhale

https://github.com/hktxt/Learn-Statistical-Learning-Method

代码整理和修改:机器学习初学者(公众号) ![gongzhong](images/gongzhong.jpg)


知识星球:黄博的机器学习圈子![xingqiu](images/zhishixingqiu1.jpg)

[知乎](https://www.zhihu.com/people/fengdu78)

================================================
FILE: 第01章 统计学习方法概论/1.Introduction_to_statistical_learning_methods.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第1章 统计学习方法概论"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学习包括监督学习、非监督学习、半监督学习和强化学习。\n",
    "\n",
    "2.统计学习方法三要素——模型、策略、算法,对理解统计学习方法起到提纲挈领的作用。\n",
    "\n",
    "3.本书主要讨论监督学习,监督学习可以概括如下:从给定有限的训练数据出发, 假设数据是独立同分布的,而且假设模型属于某个假设空间,应用某一评价准则,从假设空间中选取一个最优的模型,使它对已给训练数据及未知测试数据在给定评价标准意义下有最准确的预测。\n",
    "\n",
    "4.统计学习中,进行模型选择或者说提高学习的泛化能力是一个重要问题。如果只考虑减少训练误差,就可能产生过拟合现象。模型选择的方法有正则化与交叉验证。学习方法泛化能力的分析是统计学习理论研究的重要课题。\n",
    "\n",
    "5.分类问题、标注问题和回归问题都是监督学习的重要问题。本书中介绍的统计学习方法包括感知机、$k$近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、EM算法、隐马尔可夫模型和条件随机场。这些方法是主要的分类、标注以及回归方法。它们又可以归类为生成方法与判别方法。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用最小二乘法拟和曲线\n",
    "\n",
    "高斯于1823年在误差$e_1,…,e_n$独立同分布的假定下,证明了最小二乘方法的一个最优性质: 在所有无偏的线性估计类中,最小二乘方法是其中方差最小的!\n",
    "对于数据$(x_i, y_i)   (i=1, 2, 3...,m)$\n",
    "\n",
    "拟合出函数$h(x)$\n",
    "\n",
    "有误差,即残差:$r_i=h(x_i)-y_i$\n",
    "\n",
    "此时$L2$范数(残差平方和)最小时,$h(x)$ 和 $y$ 相似度最高,更拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一般的$H(x)$为$n$次的多项式,$H(x)=w_0+w_1x+w_2x^2+...w_nx^n$\n",
    "\n",
    "$w(w_0,w_1,w_2,...,w_n)$为参数\n",
    "\n",
    "最小二乘法就是要找到一组 $w(w_0,w_1,w_2,...,w_n)$ ,使得$\\sum_{i=1}^n(h(x_i)-y_i)^2$ (残差平方和) 最小\n",
    "\n",
    "即,求 $min\\sum_{i=1}^n(h(x_i)-y_i)^2$\n",
    "\n",
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "举例:我们用目标函数$y=sin2{\\pi}x$, 加上一个正态分布的噪音干扰,用多项式去拟合【例1.1 11页】"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy as sp\n",
    "from scipy.optimize import leastsq\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* ps: numpy.poly1d([1,2,3])  生成  $1x^2+2x^1+3x^0$*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 目标函数\n",
    "def real_func(x):\n",
    "    return np.sin(2*np.pi*x)\n",
    "\n",
    "# 多项式\n",
    "def fit_func(p, x):\n",
    "    f = np.poly1d(p)\n",
    "    return f(x)\n",
    "\n",
    "# 残差\n",
    "def residuals_func(p, x, y):\n",
    "    ret = fit_func(p, x) - y\n",
    "    return ret"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 十个点\n",
    "x = np.linspace(0, 1, 10)\n",
    "x_points = np.linspace(0, 1, 1000)\n",
    "# 加上正态分布噪音的目标函数的值\n",
    "y_ = real_func(x)\n",
    "y = [np.random.normal(0, 0.1) + y1 for y1 in y_]\n",
    "\n",
    "\n",
    "def fitting(M=0):\n",
    "    \"\"\"\n",
    "    M    为 多项式的次数\n",
    "    \"\"\"\n",
    "    # 随机初始化多项式参数\n",
    "    p_init = np.random.rand(M + 1)\n",
    "    # 最小二乘法\n",
    "    p_lsq = leastsq(residuals_func, p_init, args=(x, y))\n",
    "    print('Fitting Parameters:', p_lsq[0])\n",
    "\n",
    "    # 可视化\n",
    "    plt.plot(x_points, real_func(x_points), label='real')\n",
    "    plt.plot(x_points, fit_func(p_lsq[0], x_points), label='fitted curve')\n",
    "    plt.plot(x, y, 'bo', label='noise')\n",
    "    plt.legend()\n",
    "    return p_lsq"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### M=0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting Parameters: [0.02515259]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x295a3c0fef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# M=0\n",
    "p_lsq_0 = fitting(M=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### M=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting Parameters: [-1.50626624  0.77828571]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x295a5c54b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# M=1\n",
    "p_lsq_1 = fitting(M=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### M=3 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting Parameters: [ 2.21147559e+01 -3.34560175e+01  1.13639167e+01 -2.82318048e-02]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x295a5d02e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# M=3\n",
    "p_lsq_3 = fitting(M=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### M=9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting Parameters: [-1.70872086e+04  7.01364939e+04 -1.18382087e+05  1.06032494e+05\n",
      " -5.43222991e+04  1.60701108e+04 -2.65984526e+03  2.12318870e+02\n",
      " -7.15931412e-02  3.53804263e-02]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x295a5c7b5f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# M=9\n",
    "p_lsq_9 = fitting(M=9)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当M=9时,多项式曲线通过了每个数据点,但是造成了过拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结果显示过拟合, 引入正则化项(regularizer),降低过拟合\n",
    "\n",
    "$Q(x)=\\sum_{i=1}^n(h(x_i)-y_i)^2+\\lambda||w||^2$。\n",
    "\n",
    "回归问题中,损失函数是平方损失,正则化可以是参数向量的L2范数,也可以是L1范数。\n",
    "\n",
    "- L1: regularization\\*abs(p)\n",
    "\n",
    "- L2: 0.5 \\* regularization \\* np.square(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "regularization = 0.0001\n",
    "\n",
    "\n",
    "def residuals_func_regularization(p, x, y):\n",
    "    ret = fit_func(p, x) - y\n",
    "    ret = np.append(ret,\n",
    "                    np.sqrt(0.5 * regularization * np.square(p)))  # L2范数作为正则化项\n",
    "    return ret"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 最小二乘法,加正则化项\n",
    "p_init = np.random.rand(9 + 1)\n",
    "p_lsq_regularization = leastsq(\n",
    "    residuals_func_regularization, p_init, args=(x, y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x295a5c757b8>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x295a5d5f5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_points, real_func(x_points), label='real')\n",
    "plt.plot(x_points, fit_func(p_lsq_9[0], x_points), label='fitted curve')\n",
    "plt.plot(\n",
    "    x_points,\n",
    "    fit_func(p_lsq_regularization[0], x_points),\n",
    "    label='regularization')\n",
    "plt.plot(x, y, 'bo', label='noise')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第1章统计学习方法概论-习题\n",
    "**撰写人:**胡锐锋-天国之影-Relph\n",
    "\n",
    "**github地址:**https://github.com/datawhalechina/statistical-learning-method-solutions-manual\n",
    "\n",
    "### 习题1.1\n",
    "&emsp;&emsp;说明伯努利模型的极大似然估计以及贝叶斯估计中的统计学习方法三要素。伯努利模型是定义在取值为0与1的随机变量上的概率分布。假设观测到伯努利模型$n$次独立的数据生成结果,其中$k$次的结果为1,这时可以用极大似然估计或贝叶斯估计来估计结果为1的概率。\n",
    "\n",
    "**解答:**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "伯努利模型的极大似然估计以及贝叶斯估计中的**统计学习方法三要素**如下:  \n",
    "1. **极大似然估计**  \n",
    "**模型:** $\\mathcal{F}=\\{f|f_p(x)=p^x(1-p)^{(1-x)}\\}$  \n",
    "**策略:** 最大化似然函数  \n",
    "**算法:** $\\displaystyle \\mathop{\\arg\\min}_{p} L(p)= \\mathop{\\arg\\min}_{p} \\binom{n}{k}p^k(1-p)^{(n-k)}$\n",
    "2. **贝叶斯估计**  \n",
    "**模型:** $\\mathcal{F}=\\{f|f_p(x)=p^x(1-p)^{(1-x)}\\}$  \n",
    "**策略:** 求参数期望  \n",
    "**算法:**\n",
    "$$\\begin{aligned}  E_\\pi\\big[p \\big| y_1,\\cdots,y_n\\big]\n",
    "& = {\\int_0^1}p\\pi (p|y_1,\\cdots,y_n) dp \\\\\n",
    "& = {\\int_0^1} p\\frac{f_D(y_1,\\cdots,y_n|p)\\pi(p)}{\\int_{\\Omega}f_D(y_1,\\cdots,y_n|p)\\pi(p)dp}dp \\\\\n",
    "& = {\\int_0^1}\\frac{p^{k+1}(1-p)^{(n-k)}}{\\int_0^1 p^k(1-p)^{(n-k)}dp}dp\n",
    "\\end{aligned}$$\n",
    "\n",
    "**伯努利模型的极大似然估计:**  \n",
    "定义$P(Y=1)$概率为$p$,可得似然函数为:$$L(p)=f_D(y_1,y_2,\\cdots,y_n|\\theta)=\\binom{n}{k}p^k(1-p)^{(n-k)}$$方程两边同时对$p$求导,则:$$\\begin{aligned}\n",
    "0 & = \\binom{n}{k}[kp^{k-1}(1-p)^{(n-k)}-(n-k)p^k(1-p)^{(n-k-1)}]\\\\\n",
    "& = \\binom{n}{k}[p^{(k-1)}(1-p)^{(n-k-1)}(m-kp)]\n",
    "\\end{aligned}$$可解出$p$的值为$p=0,p=1,p=k/n$,显然$\\displaystyle P(Y=1)=p=\\frac{k}{n}$  \n",
    "\n",
    "**伯努利模型的贝叶斯估计:**  \n",
    "定义$P(Y=1)$概率为$p$,$p$在$[0,1]$之间的取值是等概率的,因此先验概率密度函数$\\pi(p) = 1$,可得似然函数为: $$L(p)=f_D(y_1,y_2,\\cdots,y_n|\\theta)=\\binom{n}{k}p^k(1-p)^{(n-k)}$$  \n",
    "根据似然函数和先验概率密度函数,可以求解$p$的条件概率密度函数:$$\\begin{aligned}\\pi(p|y_1,\\cdots,y_n)&=\\frac{f_D(y_1,\\cdots,y_n|p)\\pi(p)}{\\int_{\\Omega}f_D(y_1,\\cdots,y_n|p)\\pi(p)dp}\\\\\n",
    "&=\\frac{p^k(1-p)^{(n-k)}}{\\int_0^1p^k(1-p)^{(n-k)}dp}\\\\\n",
    "&=\\frac{p^k(1-p)^{(n-k)}}{B(k+1,n-k+1)}\n",
    "\\end{aligned}$$所以$p$的期望为:$$\\begin{aligned}\n",
    "E_\\pi[p|y_1,\\cdots,y_n]&={\\int}p\\pi(p|y_1,\\cdots,y_n)dp \\\\\n",
    "& = {\\int_0^1}\\frac{p^{(k+1)}(1-p)^{(n-k)}}{B(k+1,n-k+1)}dp \\\\\n",
    "& = \\frac{B(k+2,n-k+1)}{B(k+1,n-k+1)}\\\\\n",
    "& = \\frac{k+1}{n+2}\n",
    "\\end{aligned}$$\n",
    "$\\therefore \\displaystyle P(Y=1)=\\frac{k+1}{n+2}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 习题1.2\n",
    "&emsp;&emsp;通过经验风险最小化推导极大似然估计。证明模型是条件概率分布,当损失函数是对数损失函数时,经验风险最小化等价于极大似然估计。\n",
    "\n",
    "**解答:**\n",
    "\n",
    "假设模型的条件概率分布是$P_{\\theta}(Y|X)$,现推导当损失函数是对数损失函数时,极大似然估计等价于经验风险最小化。\n",
    "极大似然估计的似然函数为:$$L(\\theta)=\\prod_D P_{\\theta}(Y|X)$$两边取对数:$$\\ln L(\\theta) = \\sum_D \\ln P_{\\theta}(Y|X) \\\\ \n",
    "\\mathop{\\arg \\max}_{\\theta} \\sum_D \\ln P_{\\theta}(Y|X) = \\mathop{\\arg \\min}_{\\theta} \\sum_D (- \\ln P_{\\theta}(Y|X))$$ \n",
    "反之,经验风险最小化等价于极大似然估计,亦可通过经验风险最小化推导极大似然估计。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "参考代码:https://github.com/wzyonggege/statistical-learning-method\n",
    "\n",
    "本文代码更新地址:https://github.com/fengdu78/lihang-code\n",
    "\n",
    "习题解答:https://github.com/datawhalechina/statistical-learning-method-solutions-manual\n",
    "\n",
    "中文注释制作:机器学习初学者公众号:ID:ai-start-com\n",
    "\n",
    "配置环境:python 3.5+\n",
    "\n",
    "代码全部测试通过。\n",
    "![gongzhong](../gongzhong.jpg)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}


================================================
FILE: 第02章 感知机/2.Perceptron.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第2章 感知机"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.感知机是根据输入实例的特征向量$x$对其进行二类分类的线性分类模型:\n",
    "\n",
    "$$\n",
    "f(x)=\\operatorname{sign}(w \\cdot x+b)\n",
    "$$\n",
    "\n",
    "感知机模型对应于输入空间(特征空间)中的分离超平面$w \\cdot x+b=0$。\n",
    "\n",
    "2.感知机学习的策略是极小化损失函数:\n",
    "\n",
    "$$\n",
    "\\min _{w, b} L(w, b)=-\\sum_{x_{i} \\in M} y_{i}\\left(w \\cdot x_{i}+b\\right)\n",
    "$$\n",
    "\n",
    "损失函数对应于误分类点到分离超平面的总距离。\n",
    "\n",
    "3.感知机学习算法是基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。算法简单且易于实现。原始形式中,首先任意选取一个超平面,然后用梯度下降法不断极小化目标函数。在这个过程中一次随机选取一个误分类点使其梯度下降。\n",
    " \n",
    "4.当训练数据集线性可分时,感知机学习算法是收敛的。感知机算法在训练数据集上的误分类次数$k$满足不等式:\n",
    "\n",
    "$$\n",
    "k \\leqslant\\left(\\frac{R}{\\gamma}\\right)^{2}\n",
    "$$\n",
    "\n",
    "当训练数据集线性可分时,感知机学习算法存在无穷多个解,其解由于不同的初值或不同的迭代顺序而可能有所不同。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二分类模型\n",
    "$f(x) = sign(w\\cdot x + b)$\n",
    "\n",
    "$\\operatorname{sign}(x)=\\left\\{\\begin{array}{ll}{+1,} & {x \\geqslant 0} \\\\ {-1,} & {x<0}\\end{array}\\right.$\n",
    "\n",
    "给定训练集:\n",
    "\n",
    "$T=\\left\\{\\left(x_{1}, y_{1}\\right),\\left(x_{2}, y_{2}\\right), \\cdots,\\left(x_{N}, y_{N}\\right)\\right\\}$\n",
    "\n",
    "定义感知机的损失函数 \n",
    "\n",
    "$L(w, b)=-\\sum_{x_{i} \\in M} y_{i}\\left(w \\cdot x_{i}+b\\right)$\n",
    "\n",
    "---\n",
    "#### 算法\n",
    "\n",
    "随即梯度下降法 Stochastic Gradient Descent\n",
    "\n",
    "随机抽取一个误分类点使其梯度下降。\n",
    "\n",
    "$w = w + \\eta y_{i}x_{i}$\n",
    "\n",
    "$b = b + \\eta y_{i}$\n",
    "\n",
    "当实例点被误分类,即位于分离超平面的错误侧,则调整$w$, $b$的值,使分离超平面向该无分类点的一侧移动,直至误分类点被正确分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "拿出iris数据集中两个分类的数据和[sepal length,sepal width]作为特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.datasets import load_iris\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load data\n",
    "iris = load_iris()\n",
    "df = pd.DataFrame(iris.data, columns=iris.feature_names)\n",
    "df['label'] = iris.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2    50\n",
       "1    50\n",
       "0    50\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns = [\n",
    "    'sepal length', 'sepal width', 'petal length', 'petal width', 'label'\n",
    "]\n",
    "df.label.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1781578e588>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')\n",
    "plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.array(df.iloc[:100, [0, 1, -1]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, y = data[:,:-1], data[:,-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = np.array([1 if i == 1 else -1 for i in y])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据线性可分,二分类数据\n",
    "# 此处为一元一次线性方程\n",
    "class Model:\n",
    "    def __init__(self):\n",
    "        self.w = np.ones(len(data[0]) - 1, dtype=np.float32)\n",
    "        self.b = 0\n",
    "        self.l_rate = 0.1\n",
    "        # self.data = data\n",
    "\n",
    "    def sign(self, x, w, b):\n",
    "        y = np.dot(x, w) + b\n",
    "        return y\n",
    "\n",
    "    # 随机梯度下降法\n",
    "    def fit(self, X_train, y_train):\n",
    "        is_wrong = False\n",
    "        while not is_wrong:\n",
    "            wrong_count = 0\n",
    "            for d in range(len(X_train)):\n",
    "                X = X_train[d]\n",
    "                y = y_train[d]\n",
    "                if y * self.sign(X, self.w, self.b) <= 0:\n",
    "                    self.w = self.w + self.l_rate * np.dot(y, X)\n",
    "                    self.b = self.b + self.l_rate * y\n",
    "                    wrong_count += 1\n",
    "            if wrong_count == 0:\n",
    "                is_wrong = True\n",
    "        return 'Perceptron Model!'\n",
    "\n",
    "    def score(self):\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Perceptron Model!'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perceptron = Model()\n",
    "perceptron.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x178158adfc8>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_points = np.linspace(4, 7, 10)\n",
    "y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]\n",
    "plt.plot(x_points, y_)\n",
    "\n",
    "plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')\n",
    "plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')\n",
    "plt.xlabel('sepal length')\n",
    "plt.ylabel('sepal width')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### scikit-learn实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sklearn\n",
    "from sklearn.linear_model import Perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0.23.1'"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sklearn.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Perceptron()"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf = Perceptron(fit_intercept=True, \n",
    "                 max_iter=1000, \n",
    "                 shuffle=True)\n",
    "clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 23.2 -38.7]]\n"
     ]
    }
   ],
   "source": [
    "# Weights assigned to the features.\n",
    "print(clf.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-5.]\n"
     ]
    }
   ],
   "source": [
    "# 截距 Constants in decision function.\n",
    "print(clf.intercept_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x17815902248>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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
Download .txt
gitextract_a4phc2jx/

├── readme.md
├── 第01章 统计学习方法概论/
│   └── 1.Introduction_to_statistical_learning_methods.ipynb
├── 第02章 感知机/
│   └── 2.Perceptron.ipynb
├── 第03章 k近邻法/
│   └── 3.KNearestNeighbors.ipynb
├── 第04章 朴素贝叶斯/
│   └── 4.NaiveBayes.ipynb
├── 第05章 决策树/
│   └── 5.DecisonTree.ipynb
├── 第06章 逻辑斯谛回归/
│   └── 6.LogisticRegression.ipynb
├── 第07章 支持向量机/
│   └── 7.support-vector-machine.ipynb
├── 第08章 提升方法/
│   └── 8.Boost.ipynb
├── 第09章 EM算法及其推广/
│   └── 9.Expectation_Maximization.ipynb
├── 第10章 隐马尔可夫模型/
│   └── 10.HMM.ipynb
├── 第11章 条件随机场/
│   └── 11.CRF.ipynb
├── 第12章 监督学习方法总结/
│   └── 12.Summary_of_Supervised_Learning_Methods.ipynb
├── 第13章 无监督学习概论/
│   └── 13.Introduction_to_Unsupervised_Learning.ipynb
├── 第14章 聚类方法/
│   └── 14.Clustering.ipynb
├── 第15章 奇异值分解/
│   └── 15.SVD.ipynb
├── 第16章 主成分分析/
│   ├── 16.PCA.ipynb
│   └── data/
│       └── ex7data1.mat
├── 第17章 潜在语义分析/
│   └── 17.LSA.ipynb
├── 第18章 概率潜在语义分析/
│   └── 18.PLSA.ipynb
├── 第19章 马尔可夫链蒙特卡洛法/
│   └── 19.MCMC.ipynb
├── 第20章 潜在狄利克雷分配/
│   ├── 20.LDA.ipynb
│   └── data/
│       └── LDA_test.txt
├── 第21章 PageRank算法/
│   └── 21.PageRank.ipynb
└── 第22章 无监督学习方法总结/
    └── 22.Summary_of_UnSupervised_Learning_Methods.ipynb
Condensed preview — 25 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,392K chars).
[
  {
    "path": "readme.md",
    "chars": 994,
    "preview": "# 《统计学习方法》第二版的代码实现\n\n李航老师编写的《统计学习方法》全面系统地介绍了统计学习的主要方法,特别是监督学习方法,包括感知机、k近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与支持向量机、提升方法、em算法、隐马尔可夫模型和条件随机"
  },
  {
    "path": "第01章 统计学习方法概论/1.Introduction_to_statistical_learning_methods.ipynb",
    "chars": 128080,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第1章 统计学习方法概论\"\n   ]\n  },\n  {\n   \"c"
  },
  {
    "path": "第02章 感知机/2.Perceptron.ipynb",
    "chars": 110341,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第2章 感知机\"\n   ]\n  },\n  {\n   \"cell_t"
  },
  {
    "path": "第03章 k近邻法/3.KNearestNeighbors.ipynb",
    "chars": 87772,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#  第3章 k近邻法\"\n   ]\n  },\n  {\n   \"cell"
  },
  {
    "path": "第04章 朴素贝叶斯/4.NaiveBayes.ipynb",
    "chars": 13564,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第4章 朴素贝叶斯\"\n   ]\n  },\n  {\n   \"cell"
  },
  {
    "path": "第05章 决策树/5.DecisonTree.ipynb",
    "chars": 52550,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第5章 决策树\"\n   ]\n  },\n  {\n   \"cell_t"
  },
  {
    "path": "第06章 逻辑斯谛回归/6.LogisticRegression.ipynb",
    "chars": 387033,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第6章 逻辑斯谛回归\"\n   ]\n  },\n  {\n   \"cel"
  },
  {
    "path": "第07章 支持向量机/7.support-vector-machine.ipynb",
    "chars": 59588,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第7章 支持向量机\"\n   ]\n  },\n  {\n   \"cell"
  },
  {
    "path": "第08章 提升方法/8.Boost.ipynb",
    "chars": 32178,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第8章 提升方法\"\n   ]\n  },\n  {\n   \"cell_"
  },
  {
    "path": "第09章 EM算法及其推广/9.Expectation_Maximization.ipynb",
    "chars": 24784,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第9章 EM算法及其推广\"\n   ]\n  },\n  {\n   \"c"
  },
  {
    "path": "第10章 隐马尔可夫模型/10.HMM.ipynb",
    "chars": 21711,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第10章 隐马尔可夫模型\"\n   ]\n  },\n  {\n   \"c"
  },
  {
    "path": "第11章 条件随机场/11.CRF.ipynb",
    "chars": 12084,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第11章 条件随机场\\n\"\n   ]\n  },\n  {\n   \"c"
  },
  {
    "path": "第12章 监督学习方法总结/12.Summary_of_Supervised_Learning_Methods.ipynb",
    "chars": 78885,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第12章 监督学习方法总结\\n\"\n   ]\n  },\n  {\n  "
  },
  {
    "path": "第13章 无监督学习概论/13.Introduction_to_Unsupervised_Learning.ipynb",
    "chars": 1870,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第13章 无监督学习概论\"\n   ]\n  },\n  {\n   \"c"
  },
  {
    "path": "第14章 聚类方法/14.Clustering.ipynb",
    "chars": 103412,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"colab_type\": \"text\",\n    \"id\": \"_lhcu-eFro6f\"\n   },\n"
  },
  {
    "path": "第15章 奇异值分解/15.SVD.ipynb",
    "chars": 55814,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"colab_type\": \"text\",\n    \"id\": \"Ipoq5dkUZEI1\"\n   },\n"
  },
  {
    "path": "第16章 主成分分析/16.PCA.ipynb",
    "chars": 36121,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第16章 主成分分析\"\n   ]\n  },\n  {\n   \"cel"
  },
  {
    "path": "第17章 潜在语义分析/17.LSA.ipynb",
    "chars": 28900,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"colab_type\": \"text\",\n    \"id\": \"LOWANK49Pi27\"\n   },\n"
  },
  {
    "path": "第18章 概率潜在语义分析/18.PLSA.ipynb",
    "chars": 14057,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"colab_type\": \"text\",\n    \"id\": \"0I-Es-jovJzm\"\n   },\n"
  },
  {
    "path": "第19章 马尔可夫链蒙特卡洛法/19.MCMC.ipynb",
    "chars": 56356,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"colab_type\": \"text\",\n    \"id\": \"Q4qew2DscIPu\"\n   },\n"
  },
  {
    "path": "第20章 潜在狄利克雷分配/20.LDA.ipynb",
    "chars": 17750,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第20章 潜在狄利克雷分配\"\n   ]\n  },\n  {\n   \""
  },
  {
    "path": "第20章 潜在狄利克雷分配/data/LDA_test.txt",
    "chars": 436,
    "preview": "Human machine interface for lab abc computer applications\nA survey of user opinion of computer system response time\nThe "
  },
  {
    "path": "第21章 PageRank算法/21.PageRank.ipynb",
    "chars": 6280,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第21章 PageRank算法\"\n   ]\n  },\n  {\n  "
  },
  {
    "path": "第22章 无监督学习方法总结/22.Summary_of_UnSupervised_Learning_Methods.ipynb",
    "chars": 3852,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 第22章 无监督学习方法总结\\n\",\n    \"## 无监督学习方"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the fengdu78/lihang-code GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 25 files (1.3 MB), approximately 744.6k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!