精华内容
下载资源
问答
  • 统计学习方法第二版 李航 《统计学习方法第二版PPT 袁春 这次学习笔记主要记录《统计学习方法》的一些重要知识点及其拓展、相关代码实现和一些思考,起因是我们可爱美丽的V同学发动的组队学习打卡活动。...

    第1章 统计学习及监督学习概率论

    前言

    • 本文主要参考资料:
      • 《统计学习方法》第二版 李航
      • 《统计学习方法》第二版PPT 袁春

    这次学习笔记主要记录《统计学习方法》的一些重要知识点及其拓展、相关代码实现和一些思考,起因是我们可爱美丽的V同学发动的组队学习打卡活动。这次学习的主要目的,主要是要弄清楚知识点的脉络,同时要弄懂知识的具体应用场景。本人并非计算机相关专业,学识尚浅,如有疏忽错误,敬请指正。


    1 理论部分

    【导读】本章简述了统计学习及监督学习的一些基本概念。1.1 ~ 1.3节是统计学习的相关概念,1.4 ~ 1.8节是监督学习的相关概念。由于内容比较多,我挑了一些认为需要注意的内容,主要是以提问的方式来引起思考发散,大多数内容可以在书中找到答案,其中有些内容并没有固定的答案,需要大家查资料或结合实际思考。本章主要内容我整理成了一份思维导图,下面附上链接。

    链接:https://pan.baidu.com/s/1wtdjnMku0G8fKyfUpJZfCQ
    提取码:wxed

    1.1 统计学习

    1. 【思考】统计学习与机器学习的关系
      书中统计学习和机器学习有很多的交叉,看起来概念也很相似,也给出了统计学习的概念。那我们来看下机器学习的概念,再分析下它们的区别。

      • 维基百科
        机器学习是人工智能的一个分支。人工智能的研究历史有着一条从以“推理”为重点,到以“知识”为重点,再到以“学习”为重点的自然、清晰的脉络。显然,机器学习是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题。机器学习在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。
      • 统计学习和机器学习的区别:
        • 研究方法差异
          统计学研究形式化和推导
          机器学习更容忍一些新方法
        • 维度差异
          统计学强调低维空间问题的统计推导(confidence intervals, hypothesis tests, optimal estimators)
          机器学习强调高维预测问题
        • 统计学和机器学习各自更关心的领域:
          统计学: survival analysis, spatial analysis, multiple testing, minimax theory, deconvolution, semiparametric inference, bootstrapping, time series.
          机器学习: online learning, semisupervised learning, manifold learning, active learning, boosting.
    2. 【思考】统计学习的重要性
      统计学习已经成功地应用到了人工智能、模式识别、数据挖掘、自然语言处理、语音处理、计算视觉、信息检索、生物信息等许多计算机应用领域中,并且成为这些领域的核心技术。随着人们对数据的重视、计算机算力的提升以及未来更高级的人工智能的发展趋势,我们可以预测,统计学习以后能渗透进更多的行业。关键我们要掌握统计学习的处理思想,能够把自己面对的问题转化成数学描述,用统计学习的相关方法去解决它们。

    1.2 统计学习的分类

    1. 【思考】统计学习的基本分类有几种?每种分类有什么特点?你能举出每种分类的一些经典应用吗?
      基本分类可分为监督学习、无监督学习、强化学习,还可以包括半监督学习和主动学习。

      • 监督学习:
        监督学习是从给定的训练数据集中“学习”出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入和输出,即特征和目标。训练集中的目标是由人类事先进行标注的。
        主要用途:分类、回归和标注
        常见算法:k-近邻算法、决策树与随机森林、逻辑回归、神经网络、朴素贝叶斯、Logistic回归、支持向量机、AdaBoost算法、线性回归、局部加权线性回归、收缩和树回归等
        经典应用:后面结合具体算法举例说明。
      1. 非监督学习:
        在学习的过程中,只提供事物的具体特征(特征值),但不提供事物的名称(目标值),让学习者自己总结归纳。所以非监督学习又称为归纳性学习(Clustering),是指将数据集合分成由类似的对象组成的多个簇(或组)的过程。
        主要用途:聚类、降维、概率估计等
        常见算法:k-means、Apriori、FP-Growth、主成分分析(PCA)、潜在语义分析(LSA)、概率潜在语义分析(PLSA)、潜在狄利克雷分配(LDA)、PageRank等
        经典应用:后面结合具体算法举例说明。
      2. 强化学习:
        强化学习是指智能体在与环境的连续互动中学习最优行为策略的机器学习问题。
        主要特点
        无监督,仅有奖励信号;
        反馈有延迟,不是瞬时的;
        时间是重要的(由于是时序数据,不是独立同分布的);
        智能体的动作会影响后续得到的数据;
        常见算法:Q-learning、Sarsa、DQN(Deep Q Network)、Policy Gradients、Actor-critic等
        经典应用:自动驾驶、机器人、推荐系统、Alpha Go
      3. 半监督学习与主动学习
        半监督学习是指利用标注数据和未标注数据学习预测模型的机器学习问题。旨在利用未标注数据中的信息,辅助标注数据,进行监督学习,以较低的成本达到较好的学习效果
        主动学习是指机器不断主动给出实例让教师进行标注,然后利用标注数据学习预测模型的机器学习问题。旨在找出对学习最优帮助的实例让教师标注,以较小的标注代价,达到较好的学习效果
        半监督学习和主动学习更接近监督学习。

      【参考】强化学习入门总结

    2. 【思考】除了基本分类,统计学习还能怎样分类?分类的依据是什么?

      • 按模型分类:
        概率模型和非概率模型(确定性模型)
        线性模型和非线性模型
        参数化模型和非参数化模型
      • 按算法分类:
        在线学习和批量学习
      • 按技巧分类:
        贝叶斯学习和核方法

    1.3 统计学习方法三要素

    1. 【思考】统计学习方法三要素是什么?它们有什么关系吗?

    2. 【思考】什么是模型?

    3. 【思考】什么是策略?怎么选择最优的策略?有没有什么量化指标?

    4. 【思考】什么是损失函数和风险函数?它们之间有什么关系?常用的损失函数有哪几种?每种损失函数适合处理什么问题?

    5. 【思考】什么是经验风险?经验风险和期望风险(风险函数)的区别?现实中怎么利用经验风险来使得期望风险最小化?

    6. 【思考】什么是经验风险最小化和结构风险最小化?这两个策略分别适合怎样的场景?

    7. 【思考】什么是算法?

    1.4 模型评估与模型选择

    1. 【思考】怎么进行模型评估?有没有什么量化指标?

    2. 【思考】什么是训练误差与测试误差?在模型评估中,哪个指标更重要?为什么?

    3. 【思考】什么是过拟合?什么情况容易出现过拟合?什么是模型选择?如何进行模型选择?常用的模型选择方法有哪些?

    1.5 正则化与交叉验证

    1. 【思考】什么是正则化?它和结构风险最小化有什么关系吗?常见的正则化项(罚项)有哪些?它们适合哪些场景?

    2. 【思考】什么是交叉验证?交叉验证适合什么场景?交叉验证的分类?

    1.6 泛化能力

    1. 【思考】什么是泛化能力?怎么评价泛化能力?

    2. 【思考】什么是泛化误差?有什么意义?和期望风险有什么关系吗?

    3. 【思考】什么是泛化误差上界?有什么意义?有什么性质?

    1.7 生成模型与判别模型

    1. 【思考】什么是生成方法和生成模型?有什么特点?常见的生成模型有哪些?

    2. 【思考】什么是判别方法和判别模型?有什么特点?常见的生成模型有哪些?

    1.8 监督学习应用

    1. 【思考】监督学习主要应用在哪些方面?

    2. 【思考】什么是分类问题?分类问题的过程?评价分类模型的指标?常用的统计学习方法?常见应用场景?

    1. 【思考】什么是标注问题?标注问题的过程?评价标注模型的指标?常用的统计学习方法?常见应用场景?

    1. 【思考】什么是回归问题?回归问题的过程?回归问题的分类?评价回归学习的指标?常用的统计学习方法?常见应用场景?

    2 代码部分

    2.1 最小二乘法拟合曲线

    书本例1.1

    import numpy as np
    import scipy as sp
    from scipy.optimize import leastsq #scipy 的最小二乘法优化算法  
    import matplotlib.pyplot as plt
    %matplotlib inline
    

    ps: numpy.poly1d([1,2,3]) 生成 1x2+2x1+3x01x^2+2x^1+3x^0

    # 目标函数
    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) - y
        return ret
    

    【参考】numpy-poly1d、polyfit、polyval多项式使用

    # 十个点
    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=0
        """
        M    为 多项式的次数
        """
        # 随机初始化多项式参数
        p_init = np.random.rand(M + 1)
        # 最小二乘法
        p_lsq = leastsq(residuals_func, p_init, args=(x, y)) # scipy.optimize.leastsq(func, x0, args=())
        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
    

    【参考】https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.leastsq.html

    M=0

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

    M=1

    # M=1
    p_lsq_1 = fitting(M=1)
    
    Fitting Parameters: [-1.35514849  0.71931253]
    

    M=3

    # M=3
    p_lsq_3 = fitting(M=3)
    
    Fitting Parameters: [ 20.68087645 -30.68929792  10.08306196   0.05360571]
    

    M=9

    # M=9
    p_lsq_9 = fitting(M=9)
    
    Fitting Parameters: [-1.04275441e+04  4.90685640e+04 -9.80059132e+04  1.08002526e+05
     -7.13792547e+04  2.87542681e+04 -6.81847676e+03  8.41399124e+02
     -3.56195236e+01  1.61783872e-01]
    

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

    2.2 正则化

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

    Q(x)=i=1n(h(xi)yi)2+λw2Q(x)=\sum_{i=1}^n(h(x_i)-y_i)^2+\lambda||w||^2

    回归问题中,损失函数是平方损失,正则化可以是参数向量的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) - y
        ret = np.append(ret,
                        np.sqrt(0.5 * regularization * np.square(p)))  # L2范数作为正则化项,注意这个p,参数向量的L2范数,np.append()的用法
        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()
    
    <matplotlib.legend.Legend at 0x1d6d9a8ef88>
    

    def residuals_func_regularization(p, x, y):
        ret = fit_func(p, x) - y
        ret = np.append(ret,
                        np.sqrt( regularization * abs(p)))  # L1正则项
        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()
    
    <matplotlib.legend.Legend at 0x1d6d9d44c48>
    


    参考代码:https://github.com/wzyonggege/statistical-learning-method

    展开全文
  • 统计学习方法第二版 李航 《统计学习方法第二版PPT 袁春 1 理论部分 【导读】本章的结构按着统计学习方法三要素——模型、策略、算法来进行安排。感知机是我们正式学习的第一个模型,算是一个比较简单基础...

    第2章 感知机

    前言

    • 本文主要参考资料:
      • 《统计学习方法》第二版 李航
      • 《统计学习方法》第二版PPT 袁春

    【导读】本章的结构按着统计学习方法三要素——模型、策略、算法来进行安排。感知机是我们正式学习的第一个模型,算是一个比较简单基础的的二分类的线性分类模型,但是感知机是神经网络和支持向量机的基础,我们一定要把握好。主要内容依然是用思维导图展示,强调知识体系结构。此外,由于我们后面学习的模型很多,我们要重点弄清每个模型的具体应用场景和优缺点。

    1 理论部分

    链接:https://pan.baidu.com/s/1XhWfHDiedlSDWUucgfsPHA
    提取码:z0rr

    1.1 感知机模型

    应用 简单的线性分类

    优点

    • 自然是简单易于实现咯

    缺点

    • 无法很好处理线性不可分数据
    • 最终迭代代数受结果超平面及训练集的数据影响大
    • 损失函数的目标只是减小所有误分类点与超平面,最终很有可能会导致部分样本点距离超平面很近

    定义 感知机,就是二类分类的线性分类模型,其输入为样本的特征向量,输出为样本的类别,取+1和-1二值,即通过某样本的特征,就可以准确判断该样本属于哪一类。顾名思义,感知机能够解决的问题首先要求特征空间是线性可分的,再者是二类分类,即将样本分为{+1, -1}两类。从比较学术的层面来说,由输入空间到输出空间的函数:

    f(x)=sign(wx+b)f(x)=\operatorname{sign}(w \cdot x+b)

    称为感知机,w和b为感知机参数,w为权值(weight),b为偏置(bias)。sign为符号函数:

    sign(x)={+1,x01,x<0 \operatorname{sign}(x)=\left\{\begin{array}{ll}+1, & x \geqslant 0 \\ -1, & x<0\end{array}\right.

    感知机模型的假设空间是定义在特征空间中的线性分类模型,即函数集合:{ff(x)=wx+b}\{f \mid f(x)=w \cdot x+b\}

    1.2 感知机学习策略

    感知机学习的策略是极小化损失函数:

    minw,bL(w,b)=xiMyi(wxi+b) \min _{w, b} L(w, b)=-\sum_{x_{i} \in M} y_{i}\left(w \cdot x_{i}+b\right)

    损失函数对应于误分类点到分离超平面的总距离。

    【思考】样本到超平面距离为什么是1wwx0+b\frac{1}{\|w\|}\left|w \cdot x_{0}+b\right|

    【回答】我们知道点(x0,y0)\left(x_{0}, y_{0}\right)到直线Ax+By+C=0的距离是:

    d=Ax0+By0+CA2+B2d=\frac{A x_{0}+B y_{0}+C}{\sqrt{A^{2}+B^{2}}}

    将公式推广,把样本点带入公式即可求得。

    【思考】为什么可以不考虑1w\frac{1}{\|w\|}

    【回答】

    1. 感知机处理线性可分数据集,二分类,yi{1,+1}y_i∈\{−1,+1\},所以涉及到的乘以 yiy_i 的操作实际贡献的是符号;

    2. 损失函数 L(w,b)=xiMyi(wxi+b)L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b),其中 MM 是错分的点集合,线性可分的数据集肯定能找到超平面 SS, 所以这个损失函数最值是0。

    3. 如果正确分类, yi(wxi+b)=wxi+by_i(w\cdot x_i+b)=|w\cdot x_i+b| ,错误分类的话,为了保证正数就加个负号,这就是损失函数里面那个负号,这个就是函数间隔;

    4. 1w\frac{1}{||w||} 用来归一化超平面法向量,得到几何间隔,也就是点到超平面的距离, 函数间隔和几何间隔的差异在于同一个超平面 (w,b)(w,b) 参数等比例放大成 (kw,kb)(kw,kb) 之后,虽然表示的同一个超平面,但是点到超平面的函数间隔也放大了,但是几何间隔是不变的;

    5. 具体算法实现的时候, ww要初始化,然后每次迭代针对错分点进行调整,既然要初始化,那如果初始化个 w=1||w||=1 的情况也就不用纠结了,和不考虑 1w\frac{1}{||w||} 是一样的了;

    6. 针对错分点是这么调整的

      ww+ηyixibb+ηyi\begin{aligned} w&\leftarrow w+\eta y_ix_i\\ b&\leftarrow b+\eta y_i \end{aligned}

      前面说了 yiy_i 就是个符号,那么感知机就可以解释为针对误分类点,通过调整 w,bw,b 使得超平面向该误分类点一侧移动,迭代这个过程最后全分类正确;

    7. 感知机的解不唯一,和初值有关系,和误分类点调整顺序也有关系;

    8. 这么调整就能找到感知机的解?能,Novikoff还证明了,通过有限次搜索能找到将训练数据完全正确分开的分离超平面。

    所以,

    如果只考虑损失函数的最值,那没啥影响,线性可分数据集,最后这个损失就是0; 那个分母用来归一化法向量,不归一化也一样用,感知机的解不唯一;说正数不影响的应该考虑的是不影响超平面调整方向吧

    1.3 感知机算法

    感知机学习算法是对上述损失函数进行极小化,求得w和b。但是用普通的基于所有样本的梯度和的均值的批量梯度下降法(BGD)是行不通的,原因在于我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化。所以我们不能用最普通的批量梯度下降,只能采用随机梯度下降(SGD)
    随机抽取一个误分类点使其梯度下降。

    w=w+ηyixiw = w + \eta y_{i}x_{i}

    b=b+ηyib = b + \eta y_{i}

    当实例点被误分类,即位于分离超平面的错误侧,则调整ww, bb的值,使分离超平面向该无分类点的一侧移动,直至误分类点被正确分类

    目标函数如下:

    L(w,b)=argminw,b(xiMyi(wxi+b))L(w, b)=\arg \min _{w, b}\left(-\sum_{x_{i} \in M} y_{i}\left(w \cdot x_{i}+b\right)\right)

    【墙裂推荐阅读】为什么说随机最速下降法 (SGD) 是一个很好的方法?

    1.3.1 原始形式算法

    输入:训练数据集T={(x1,y1),(x2,y2),,(xN,yN)}T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\}yi{1,+1}y_i∈\{−1,+1\},学习率η(0<η<1)

    输出:w,bw, b;感知机模型f(x)=sign(wx+b)f(x)=\operatorname{sign}(w \cdot x+b)

    1. 赋初值 w0,b0w_{0}, b_{0}
    2. 选取数据点(xi,yi)\left(x_{i}, y_{i}\right)
    3. 判断该数据点是否为当前模型的误分类点,即判断若yi(wxi+b)0y_{i}\left(w \cdot x_{i}+b\right) \leqslant 0则更新

    w=w+ηyixiw=w+\eta y_{i} x_{i}
    b=b+ηyib=b+\eta y_{i}

    1. 转到2,直到训练集中没有误分类点

    1.3.2 对偶形式算法

    由于w,bw, b的梯度更新公式:

    w=w+ηyixiw=w+\eta y_{i} x_{i}
    b=b+ηyib=b+\eta y_{i}

    我们的w,bw, b经过了n次修改后的,参数可以变化为下公式,其中αi=niη\alpha_{i}=n_{i} \eta

    w=xiMηyixi=i=1nαiyixiw=\sum_{x_{i} \in M} \eta y_{i} x_{i}=\sum_{i=1}^{n} \alpha_{i} y_{i} x_{i}
    b=xiMηyi=i=1nαiyib=\sum_{x_{i} \in M} \eta y_{i}=\sum_{i=1}^{n} \alpha_{i} y_{i}
    这样我们就得出了感知机的对偶算法。

    输入:训练数据集T={(x1,y1),(x2,y2),,(xN,yN)}T=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\}yi{1,+1}y_i∈\{−1,+1\},学习率η(0<η<1)

    输出:α,b\alpha, b;感知机模型f(x)=sign(j=1nαjyjxjx+b)f(x)=\operatorname{sign}\left(\sum_{j=1}^{n} \alpha_{j} y_{j} x_{j} \cdot x+b\right)

    其中α=(α1,α2,,αn)T\alpha=\left(\alpha_{1}, \alpha_{2}, \ldots, \alpha_{n}\right)^{T}

    赋初值 α0,b0\alpha_{0}, b_{0}
    选取数据点(xi,yi)\left(x_{i}, y_{i}\right)
    判断该数据点是否为当前模型的误分类点,即判断若yi(j=1Nαjyjxjxi+b)0y_{i}\left(\sum_{j=1}^{N} \alpha_{j} y_{j} x_{j} \cdot x_{i}+b\right) \leqslant 0则更新

    αi=αi+η\alpha_{i}=\alpha_{i}+\eta
    b=b+ηyib=b+\eta y_{i}

    转到2,直到训练集中没有误分类点
    为了减少计算量,我们可以预先计算式中的内积,得到Gram矩阵

    G=[xi,xj]N×NG=\left[x_{i}, x_{j}\right] N \times N

    【思考】原始形式和对偶形式的如何选择?

    【回答】

    • 在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速。
    • 在向量个数(样本数)过多时,每次计算累计和就没有必要,应选择原始算法

    【墙裂推荐阅读】如何理解感知机学习算法的对偶形式?

    2 代码部分

    import pandas as pd
    import numpy as np
    from sklearn.datasets import load_iris #sklearn库里面自带的鸢尾花数据集
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    # load data
    iris = load_iris() #iris包括2个数组data和target,里面还有不少属性,感兴趣可以输出看看,加深对代码的直观理解
    df = pd.DataFrame(iris.data, columns=iris.feature_names) #将数组data转成DataFrame
    df['label'] = iris.target
    
    df.columns = [
        'sepal length', 'sepal width', 'petal length', 'petal width', 'label'
    ] #对列名重命名
    df.label.value_counts()
    
    2    50
    1    50
    0    50
    Name: label, dtype: int64
    

    iris数据集前50个标签为0,51-100标签为1,101-150标签为2

    #考虑两个属性sepal length和sepal width的影响
    plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')
    plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
    plt.xlabel('sepal length')
    plt.ylabel('sepal width')
    plt.legend()
    
    <matplotlib.legend.Legend at 0x249ec7ab388>
    

    data = np.array(df.iloc[:100, [0, 1, -1]]) #将df中前100行的第一第二列和最后一列(label)抽出来转成数组
    
    X, y = data[:,:-1], data[:,-1] #元组赋值,前两列赋值给X,最后一列赋值给y
    
    y = np.array([1 if i == 1 else -1 for i in y]) #把label为0的换成1
    
    y
    
    array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
           -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
           -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1,
            1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
            1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
            1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1])
    

    2.1 Perceptron

    # 数据线性可分,二分类数据
    # 此处为一元一次线性方程
    class Model: #定义一个类Model
        def __init__(self): #初始化w、b、l_rate(学习率),理论部分用η表示
            self.w = np.ones(len(data[0]) - 1, dtype=np.float32)
            self.b = 0
            self.l_rate = 0.1
            # self.data = data
    
        def sign(self, x, w, b):
            y = np.dot(x, w) + b
            return y
    
        # 随机梯度下降法
        def fit(self, X_train, y_train):
            is_wrong = False
            while not is_wrong: #找茬,看有没有误分类
                wrong_count = 0
                for d in range(len(X_train)):
                    X = X_train[d]
                    y = y_train[d]
                    if y * self.sign(X, self.w, self.b) <= 0: #存在误分类点
                        self.w = self.w + self.l_rate * np.dot(y, X)
                        self.b = self.b + self.l_rate * y
                        wrong_count += 1
                if wrong_count == 0:
                    is_wrong = True
            return 'Perceptron Model!'
    
        def score(self):
            pass
    
    perceptron = Model()
    perceptron.fit(X, y)
    
    'Perceptron Model!'
    
    x_points = np.linspace(4, 7, 10)
    y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]
    plt.plot(x_points, y_) #画蓝色那条直线
    
    plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
    plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
    plt.xlabel('sepal length')
    plt.ylabel('sepal width')
    plt.legend()
    
    <matplotlib.legend.Legend at 0x249ed1d97c8>
    

    2.2 scikit-learn实例

    【参考】https://scikit-learn.org/0.19/modules/generated/sklearn.linear_model.Perceptron.html

    import sklearn
    from sklearn.linear_model import Perceptron 
    
    sklearn.__version__
    
    '0.21.3'
    
    clf = Perceptron(fit_intercept=True, 
                     max_iter=1000, 
                     shuffle=True)
    clf.fit(X, y)
    
    Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,
               fit_intercept=True, max_iter=1000, n_iter_no_change=5, n_jobs=None,
               penalty=None, random_state=0, shuffle=True, tol=0.001,
               validation_fraction=0.1, verbose=0, warm_start=False)
    
    # Weights w assigned to the features. w
    print(clf.coef_)
    
    [[ 23.2 -38.7]]
    
    # 截距 Constants b in decision function. 
    print(clf.intercept_)
    
    [-5.]
    
    # 画布大小
    plt.figure(figsize=(10,10))
    
    # 中文标题
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.title('鸢尾花线性数据示例')
    
    plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)
    plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')
    
    # 画感知机的线
    x_ponits = np.arange(4, 8)
    y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
    plt.plot(x_ponits, y_)
    
    # 其他部分
    plt.legend()  # 显示图例
    plt.grid(False)  # 不显示网格
    plt.xlabel('sepal length')
    plt.ylabel('sepal width')
    plt.legend()
    
    <matplotlib.legend.Legend at 0x249ecd14d08>
    

    注意 !

    在上图中,有一个位于左下角的蓝点没有被正确分类,这是因为 SKlearn 的 Perceptron 实例中有一个tol参数。

    tol 参数规定了如果本次迭代的损失和上次迭代的损失之差小于一个特定值时,停止迭代。所以我们需要设置 tol=None 使之可以继续迭代:

    clf = Perceptron(fit_intercept=True, 
                     max_iter=1000,
                     tol=None,
                     shuffle=True)
    clf.fit(X, y)
    
    # 画布大小
    plt.figure(figsize=(10,10))
    
    # 中文标题
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.title('鸢尾花线性数据示例')
    
    plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)
    plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')
    
    # 画感知机的线
    x_ponits = np.arange(4, 8)
    y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
    plt.plot(x_ponits, y_)
    
    # 其他部分
    plt.legend()  # 显示图例
    plt.grid(False)  # 不显示网格
    plt.xlabel('sepal length')
    plt.ylabel('sepal width')
    plt.legend()
    
    <matplotlib.legend.Legend at 0x249ecda4a88>
    

    现在可以看到,所有的两种鸢尾花都被正确分类了。


    参考代码:https://github.com/wzyonggege/statistical-learning-method

    展开全文
  • 参考资料:李航的《统计学习方法第二版 文章内容以图片的形式呈现 文章目录参考资料:李航的《统计学习方法第二版文章内容以图片的形式呈现第一章 统计学习及监督学习概论第二章 感知器第三章 K近邻第四章 朴素...

    参考资料:李航的《统计学习方法》第二版

    文章内容以图片的形式呈现

    第一章 统计学习及监督学习概论

    在这里插入图片描述

    第二章 感知器

    在这里插入图片描述

    第三章 K近邻

    在这里插入图片描述

    第四章 朴素贝叶斯

    在这里插入图片描述

    第五章 决策树

    在这里插入图片描述

    第六章 逻辑斯蒂回归与最大熵模型

    在这里插入图片描述

    第七章 支持向量机

    在这里插入图片描述

    第八章 提升算法

    在这里插入图片描述

    第九章 EM算法及其推广

    在这里插入图片描述

    第十章 隐马尔可夫模型

    在这里插入图片描述

    第十一章 条件随机场

    在这里插入图片描述

    第十二章 监督学习方法总结

    在这里插入图片描述

    第十三章 无监督学习概论

    在这里插入图片描述

    第十四章 聚类方法

    在这里插入图片描述

    第十五章 奇异值分解

    在这里插入图片描述

    第十六章 主成分分析

    在这里插入图片描述

    第十七章 潜在语义分析

    在这里插入图片描述

    第十八章 概率潜在语义分析

    在这里插入图片描述

    第十九章 马尔可夫链蒙特卡罗法

    在这里插入图片描述

    第二十章 潜在狄利克雷分配

    在这里插入图片描述

    第二十一章 PageRank算法

    在这里插入图片描述

    第二十二章 无监督学习方法总结

    在这里插入图片描述

    展开全文
  • 学习资料

    2019-09-27 06:07:20
    PCA和LDA - 百面机器学习,统计学习方法第二版),李政轩Linear Discriminant Analysis SVM - 林轩田机器学习技法,统计学习方法第二版) Kernel Trick - 李政轩 Adaboost - 林轩田机器学习技法,统计学习方法...
    1. PCA和LDA - 百面机器学习,统计学习方法(第二版),李政轩Linear Discriminant Analysis
    2. SVM - 林轩田机器学习技法,统计学习方法(第二版)
    3. Kernel Trick - 李政轩
    4. Adaboost - 林轩田机器学习技法,统计学习方法(第二版)
    5. 决策树 - 统计学习方法(第二版)

    转载于:https://www.cnblogs.com/shayue/p/xue-xi-zi-liao.html

    展开全文
  • 汇编语言程序设计 第二版

    热门讨论 2012-08-12 14:23:02
    第二章 CPU资源和存储器 2.1 寄存器组 2.1.1 寄存器组 2.1.2 通用寄存器 2.1.3 段寄存器 2.1.4 专用寄存器 2.2 存储器的管理模式 2.2.1 16位微机的内存管理模式 2.2.2 32位微机的内存管理模式 习题 第三章 操作数的...
  • 1.1李航老师的《统计学习方法》 数学原理讲的多 1.2周志华老师的《机器学习》 1.3斯坦福大学公开课 http://open.163.com/movie/2008/1/M/C/M6SGF6VB4_M6SGHFBMC.html ng的视频 1.4 矩阵理论 《矩阵分析与应用》 ...
  • 第二部分 深入Python语言 第3章 基本数据类型 第4章 程序的控制结构 第5章 函数和代码复用 第6章 组合数据类型 第7章 文件和数据格式化 第三部分 运用Python语言 第8章 程序设计方法论 第9章 科学计算和可视化 第10...
  • 机器学习入门笔记总目录

    千次阅读 多人点赞 2020-06-28 16:51:44
    机器学习入门笔记是我参考周志华老师的《机器学习》西瓜书、李杭老师的《统计学习方法第二版以及课程教材等资料写的。 该目录主要记录关于机器学习和算法基本概念的博客链接。 ————————————————...
  • 恰逢最近在学习提升树(boosting tree)算法,参考了李航统计学习方法第二版),但仍觉有一些疑惑,遂上网看了很多资料但仍感觉有些细节不清楚,主要原因是网上的公式符号使用自成一体,且一些结论缺少具体推理,...
  •   本文内容主体是基于李航老师的《统计学习方法第二版中EM算法章节的内容,有兴趣的同学可以自行参考书籍资料。其中个人觉得不是很直观的部分进行了适当的解释,解释仅属于个人理解,若觉得解释更加难以理解的...
  • 品质管理资料大全.chm

    2020-04-05 20:45:18
    ISO9000:2000教程第二部分.ppt ISO9000:2000教程第四部分.ppt 品质管理资料大全/ISO9000体系/iso9000内审培训 内审培训1.doc 内审培训2.doc 内审培训3.doc 内审培训4.doc 内审培训5.doc 内审培训6.doc 内...
  • 第二部分 管理工具和用户操作界面 55 第4章 mysql、mysqladmin和mysqldump 56 4.1 mysql 56 4.1.1 启动mysql 57 4.1.2 mysql的命令行选项 58 4.1.3 交互式使用mysql 59 4.1.4 UNIX/Linux环境中mysql的使用技巧...
  • 第二部分讲述面向数据库的概念、语言、设计及对象-关系和扩展-关系系统;第三部分主要描述了数据库安全和客户-服务器体系结构;第四部分简要介绍了xml、数据挖掘和数据仓库等几种新兴技术。  本书是高等院校计算机...
  • 第二阶段是:将文档 通过学习变成自己的知识, 通过10000小时的持续积累变成自己的智慧。 大多数的所谓的个人知识管理软件,实际上还停留在第一阶段, 而针式PKM,则更注重文档的归类、统计分析、辅助学习等, ...
  • 影楼管理软件 免费

    2011-06-11 17:00:22
     由于实现了总部信息与终端(部门)基本信息的同步,所以只要在总部的管理系统中,对产品信息(名称、使用方法、价格、折扣)或服务项目进行增加或修改过后,终端(部门)的相应基本资料就增加或修改好了。...
  • 第二阶段是:将文档 通过学习变成自己的知识, 通过10000小时的持续积累变成自己的智慧。 大多数的所谓的个人知识管理软件,实际上还停留在第一阶段, 而针式PKM,则更注重文档的归类、统计分析、辅助学习等, ...
  • 三、教材与参考资料 教材: 程佩青 著、《数字信号处理教程》(第二版)、清华大学出版社出版、2001年版。 参考资料: 1. 吴湘淇编著,《信号、系统与信号处理》,电子工业出版社,1998年; 2. 邹理和编著,...
  • MATLAB GUI设计学习手记(第二版)【罗华飞编著2011】电子书, 以及原书配套的源程序。 ============================================= 编辑推荐 一本广受好评的界面设计工具书!论坛答疑,包教包会,一书在手,...
  • 深入学习shell脚本艺术

    热门讨论 2011-02-22 04:01:01
    第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash变量是不分类型的 4.4. 特殊的变量类型 5. 引用(翻译的可能有问题,特指引号) 5.1. 引用变量 5.2. 转义(\) 6....
  • 第二部分 Oracle Database 11g的体系结构、模式和事务管理 127 第5章 Oracle Database 11g体系结构 128 5.1 Oracle数据库的结构 128 5.1.1 逻辑数据库结构 128 5.1.2 物理数据库结构 134 5.1.3 其他文件 ...
  • python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+ F1”键,就可以回到第一个虚拟控制台。一个新安装的Linux系统允许用户使用...
  •  对于第二个问题,像是比第一个具体一些,因为帖子作者已经提供了一个性能数据报告,但我仍然觉得通过这些数据没有办法准确地判断数据库是否有性能问题。比如你是一个医生,我让一个人站在你的面前测心率,结果是50...
  • 第二部分 中级篇 175 第5章 SQL优化原理 176 5.1 PGA 176 5.1.1 Session Area 177 5.1.2 Private SQL Area 177 5.2 SQL语句的执行过程 179 5.2.1 Parent Cursor和Child Cursor 180 5.2.2 V$SQL和V$...
  • Cool-NLPCV (持续更新中…) Some Cool NLP and CV Repositories and Solutions Cool-NLP | Cool-CV 旨在收集NLP中常见任务的开源解决方案、数据集、工具、学习资料等,方便学习或快速...《统计学习方法第二版的代
  • 实例106 BinaryWrite方法输出进制图像 167 4.2 Request对象:程序请求对象 169 实例107 获取客户端IP地址 169 实例108 获取客户端浏览器信息 170 实例109 简单的站内搜索引擎 170 4.3 Application对象:全局变量...
  • 实例106 BinaryWrite方法输出进制图像 167 4.2 Request对象:程序请求对象 169 实例107 获取客户端IP地址 169 实例108 获取客户端浏览器信息 170 实例109 简单的站内搜索引擎 170 4.3 Application对象:全局变量...
  • 实例106 BinaryWrite方法输出进制图像 167 4.2 Request对象:程序请求对象 169 实例107 获取客户端IP地址 169 实例108 获取客户端浏览器信息 170 实例109 简单的站内搜索引擎 170 4.3 Application对象:全局变量...
  • 【今日福利】资料中包含书单包括清华李航的《统计学习方法第二版课件、《Tensorflow2.0 深度学习》、《Deep Learning with Pytorch》、Pytroch中文教程、OPenCV中文官方文档、《神经网络与深度学习书籍》、《简明...
  •  熊军(网名老熊),ITPUB论坛Oracle专题深入讨论版主,现从事Oracle三方技术支持工作,擅长Oracle数据库故障诊断处理和性能优化。个人网站:http://www.laoxiong.net.  杨廷琨(网名Yangtingkun),现任海虹...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

统计学习方法第二版资料