精华内容
下载资源
问答
  • 统计学习方法第二版 李航【学习笔记&Python代码】

    千次阅读 多人点赞 2020-08-02 19:33:27
    以后我会在博客记录自己学习《统计学习方法第二版这本书的笔记,其实也就是我自己认为比较重要或者有用的内容,以及部分python代码的实现。 第一章 统计学习及监督学习概论 这一章主要都是些概念,所以我可能更多...

    前言

    《统计学习方法》和《机器学习》这两本书,大概是做科研的小伙伴都避不开的必读书吧。笔者在很久前就已经学过该书了,但是因为先前学完没有做一个详细的整理总结。然后最近实验室招新,需要带一带小朋友学习这本书,故重温该书且在此整理记录,望对大家有所帮助!

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

    这一章主要都是些概念,大家感兴趣的话可以去看我的另一篇博客,讲得更加简洁明了:
    开始学习机器学习之前你必须要了解的知识有哪些?机器学习系列入门篇

    第二章 感知机

    这里先附上复现代码。

    class Model:
        def __init__(self):
            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
    

    下载训练数据:

    import pandas as pd
    import numpy as np
    from sklearn.datasets import load_iris
    import matplotlib.pyplot as plt
    
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['label'] = iris.target
    
    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
    df.label.value_counts()
    
    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()
    plt.show()
    
    data = np.array(df.iloc[:100, [0, 1, -1]])
    
    X, y = data[:,:-1], data[:,-1]
    
    y = np.array([1 if i == 1 else -1 for i in y])
    
    perceptron = Model()
    perceptron.fit(X, y)
    

    在这里插入图片描述
    测试:

    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()
    plt.show()
    

    在这里插入图片描述

    第三章 k近邻法

    定义

    近邻法 (k-nearest neighbor,k -NN) 种基本分类与回归方法。本书只讨论分类问题中的 k近邻法。 近邻法的输入为实例的特征向量,对应于特征空间的点:输出为实例的类别,可以取多类。 近邻法假设给定 个训练数据集, 其中的实例类别己定。分类时,对新的实例,根据其 个最近邻的训练实例的类别,通过多数表决等方式进行预测 因此 近邻法不具有显式的学习过程。

    多数表决简单理解即为哪种类别数量多对应的分类结果就是哪种。

    而不显式学习简单理解即为,不像感知机等方法需要预先训练好一个模型,k近邻是每次分类就利用一遍训练集里的数据,

    k近邻算法

    大致理解的话,先是输入训练集:
    在这里插入图片描述
    输出即为实例x所属的类别。

    算法流程大致如下:
    (1)先是计算x与训练集中给定数据的距离度量最小的k个数据(这里的距离度量通常是求lp距离,一般为l2,即欧式距离)
    (2)根据决策方法即多数表决方法来求出实例x所属类别:
    在这里插入图片描述

    k值的选择

    大家肯定都能想到k值的选择必然会对结果产生极大影响,那么k值取大取小对应的会有什么影响呢?
    选小了:学习的近似误差会减小,但是估计误差会增大。什么意思呢?就是我对于距离实例x的近似点会非常敏感,那如果刚好我的近似点就是误差点的话,那么我的结果就会出错。这样的话便容易出现过拟合。

    选大了:对应的可以减小我的估计误差,但是相对的那些原本不那么近似的点也会被我纳入考量,使得发生错误。同时相对的模型也会变得简单。往极端了想,k值等于我训练集的大小,那岂不是巨简单,直接给出我训练集里面类别占比最大的最可以了,但这样肯定是有很大问题的。

    在应用中 一般取 比较小的数值,且通常采用交叉验证法来选取最优的k值。

    kd树

    书本里面最开始讲得非常生硬,这里我打算结合具体题目来讲。

    先附一下题目:

    在这里插入图片描述
    上图其实还没有画完整,我先给它补全。
    在这里插入图片描述

    下面介绍解题步骤:
    (1)先建立一个kd树,注意这里的kd树是二叉树。
    最开始选哪一个作为根节点呢?聪明的小朋友可以发现A是上述的根节点,选它作为根节点的原因是因为它的y坐标大小是所有y坐标大小的中位数。所以我们每次分割的时候都是选其中位数的点(如果中位数的点有两个的话就任一都可)。同样的道理,为啥第二条线不是经过的G或者E,而是经过C(即选C点为子结点),因为C的横坐标大小是在gce点中的中位数。以此类推。
    提醒一下啊,我们可以先往x轴方向分割,也可以往y轴方向切割,然后x和y轴方向交替切割。
    (2)选择一个叶节点作为“当前最近点”,叶节点上图一共有四个,分别是g、e、f和d点。那为啥选d呢?
    是这样子的,实例s点是不是比根节点a的纵坐标要小(之所以比纵坐标是因为这里是从纵坐标开始切割的),既然小的话那我们就选A下面这块区域,这块区域显然是由点B总管的,那这个时候同理再与点B比较一下横坐标,是不是要比点B大,那大的话就选右边这块区域,这个时候显然就只剩下点D了,所以确定点D为当前最近点。
    (3)确定完某一个叶节点为当前最近点后,开始递归向上回退,退到父节点B,看看父节点B会不会更近,好的不会,那再看看父节点B它的另一个子区域有没有点比当前最近点还近。具体怎么检查呢,我们以实例点S与当前最近点D的距离为半径画个圆,看看这个区域会不会跟这个圆相交,不会的话就直接放弃,会的话移动到该结点检查是否需要更新当前最近点。
    好的,经过上述我们发现点B管的区域也没有用了,那我们再回退到点B的父节点,重复上述工作:即看点A会不会更近,不会,那就看点A的另一个子结点C有没有跟我相交,有,那移动到点C,看看与其相交的右区域有无点包含在圆里面,即距离更近,有,ok,完事。

    实现代码

    附下实现kd树实现代码:

    import numpy as np
    from math import sqrt
    import pandas as pd
    from sklearn.datasets import load_iris
    import matplotlib.pyplot as plt
    from sklearn.model_selection import train_test_split
    
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['label'] = iris.target
    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
    
    data = np.array(df.iloc[:100, [0, 1, -1]])
    train, test = train_test_split(data, test_size=0.1)
    x0 = np.array([x0 for i, x0 in enumerate(train) if train[i][-1] == 0])
    x1 = np.array([x1 for i, x1 in enumerate(train) if train[i][-1] == 1])
    
    
    def show_train():
        plt.scatter(x0[:, 0], x0[:, 1], c='pink', label='[0]')
        plt.scatter(x1[:, 0], x1[:, 1], c='orange', label='[1]')
        plt.xlabel('sepal length')
        plt.ylabel('sepal width')
    
    
    class Node:
        def __init__(self, data, depth=0, lchild=None, rchild=None):
            self.data = data
            self.depth = depth
            self.lchild = lchild
            self.rchild = rchild
    
    
    class KdTree:
        def __init__(self):
            self.KdTree = None
            self.n = 0
            self.nearest = None
    
        def create(self, dataSet, depth=0):
            if len(dataSet) > 0:
                m, n = np.shape(dataSet)
                self.n = n - 1
                axis = depth % self.n
                mid = int(m / 2)
                dataSetcopy = sorted(dataSet, key=lambda x: x[axis])
                node = Node(dataSetcopy[mid], depth)
                if depth == 0:
                    self.KdTree = node
                node.lchild = self.create(dataSetcopy[:mid], depth+1)
                node.rchild = self.create(dataSetcopy[mid+1:], depth+1)
                return node
            return None
    
        def preOrder(self, node):
            if node is not None:
                print(node.depth, node.data)
                self.preOrder(node.lchild)
                self.preOrder(node.rchild)
    
        def search(self, x, count=1):
            nearest = []
            for i in range(count):
                nearest.append([-1, None])
            self.nearest = np.array(nearest)
    
            def recurve(node):
                if node is not None:
                    axis = node.depth % self.n
                    daxis = x[axis] - node.data[axis]
                    if daxis < 0:
                        recurve(node.lchild)
                    else:
                        recurve(node.rchild)
    
                    dist = sqrt(sum((p1 - p2) ** 2 for p1, p2 in zip(x, node.data)))
                    for i, d in enumerate(self.nearest):
                        if d[0] < 0 or dist < d[0]:
                            self.nearest = np.insert(self.nearest, i, [dist, node], axis=0)
                            self.nearest = self.nearest[:-1]
                            break
    
                    n = list(self.nearest[:, 0]).count(-1)
                    if self.nearest[-n-1, 0] > abs(daxis):
                        if daxis < 0:
                            recurve(node.rchild)
                        else:
                            recurve(node.lchild)
    
            recurve(self.KdTree)
    
            knn = self.nearest[:, 1]
            belong = []
            for i in knn:
                belong.append(i.data[-1])
            b = max(set(belong), key=belong.count)
    
            return self.nearest, b
    
    
    kdt = KdTree()
    kdt.create(train)
    kdt.preOrder(kdt.KdTree)
    
    score = 0
    for x in test:
        input('press Enter to show next:')
        show_train()
        plt.scatter(x[0], x[1], c='red', marker='x')  # 测试点
        near, belong = kdt.search(x[:-1], 5)  # 设置临近点的个数
        if belong == x[-1]:
            score += 1
        print("test:")
        print(x, "predict:", belong)
        print("nearest:")
        for n in near:
            print(n[1].data, "dist:", n[0])
            plt.scatter(n[1].data[0], n[1].data[1], c='green', marker='+')  # k个最近邻点
        plt.legend()
        plt.show()
    
    score /= len(test)
    print("score:", score)
    
    

    结束语

    正在不断更新中。。。

    以后我会在博客记录自己学习《统计学习方法》第二版这本书的笔记,其实也就是我自己认为比较重要或者有用的内容,以及部分python代码的实现。

    由于博主能力有限,博文中提及的信息,也难免会有疏漏之处。希望发现疏漏的朋友能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的方法也请不吝赐教。

    如果有什么相关的问题,也可以关注评论留下自己的问题,我会尽量及时发送!

    展开全文
  • 第二章: https://blog.csdn.net/weixin_43646592/article/details/109572240 https://blog.csdn.net/sanmaopep/article/details/78542361?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendF
    展开全文
  • 李航老师的《统计学习方法》可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。2019年5月1日,《统计学习方法第二版》出版了!本文对新书做下简...

    李航老师的《统计学习方法》可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。2019年5月1日,《统计学习方法第二版》出版了!本文对新书做下简单介绍。

    《统计学习方法》第一版于 2012年出版,讲述了统计机器学习方法,主要是一些常用的监督学习方法。第二版增加了一些常用的无监督学习方法,由此本书涵盖了传统统计机器学习方法的主要内容。

    我们对《统计学习方法》两个版本进行了比较:

    第一版课程目录:

    第1章 统计学习方法概论

    第2章 感知机

    第3章 k近邻法

    第4章 朴素贝叶斯

    第5章 决策树

    第6章 逻辑斯谛回归

    第7章 支持向量机

    第8章 提升方法

    第9章 EM算法及其推广

    第10章 隐马尔可夫模型

    第11章 条件随机场

    第12章 统计学习方法总结


    第二版课程目录:

    第1篇 监督掌习

    第1章统计学习及监督学习概论
    第2章感知机
    第3章k近邻法
    第4章朴素贝叶斯法
    第5章决策树
    第6章逻辑斯谛回归与优选熵模型
    第7章支持向量机
    第8章提升方法
    第9章EM算法及其推广
    第10章隐马尔可夫模型
    第11章条件随机场
    第12章监督学习方法总结
    第2篇无监督学习
    第13章无监督学习概论
    第14章聚类方法
    第15章奇异值分解
    第16章主成分分析
    第17章潜在语义分析
    第18章概率潜在语义分析
    第19章马尔可夫链蒙特卡罗法

    第20章  潜在狄利克雷分配

    第21章  PageRank算法

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

        附录A  梯度下降法

        附录B  牛顿法和拟牛顿法

        附录C  拉格朗日对偶性

        附录D  矩阵的基本子空间

        附录E  KL散度的定义和狄利克雷分布的性质

    我们可以看到:《统计学习方法(第2版)》分为监督学习和无监督学习两篇,全面系统地介绍了统计学习的主要方法。包括感知机、k近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与大熵模型、支持向量机、提升方法、EM算法、隐马尔可夫模型和条件随机场,以及聚类方法、奇异值分解、主成分分析、潜在语义分析、概率潜在语义分析、马尔可夫链蒙特卡罗法、潜在狄利克雷分配和PageRank算法等。
      《统计学习方法(第2版)》比第一版更全面,而且价格也不高(原价98元,京东8.8折)。这本书是统计机器学习及相关课程的教学参考书,适用于高等院校文本数据挖掘、信息检索及自然语言处理等专业的大学生、研究生,也可供计算机应用等专业的研发人员参考。

    我以前花了大量时间翻译吴恩达机器学习视频和写笔记,有一个重要原因是因为我觉得那个教程会成为经典,事实证明如此。

    而这次,我极力推荐注定成为经典的《统计学习方法(第2版)》

    购买链接

    可以到京东购买(点击下面的小程序购买)

    请关注和分享↓↓↓ 

    本站的知识星球(黄博的机器学习圈子)ID:92416895

    目前在机器学习方向的知识星球排名第一

    往期精彩回顾

    展开全文
  • 目录[一章 统计学习及监督学习概论](https://blog.csdn.net/promisejia/article/details/78701736) 一章 统计学习及监督学习概论

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

    理论部分

    第2章 感知机

    理论部分

    技术部分

    第3章 k近邻法

    理论部分

    技术部分

    第4章 朴素贝叶斯法

    (待更新…)

    第5章 决策树

    (待更新…)

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

    (待更新…)

    第7章 支持向量机

    (待更新…)

    第8章 提升方法

    (待更新…)

    第9章 EM算法及其推广

    (待更新…)

    第10章 隐马尔可夫模型

    (待更新…)

    第11章 条件随机场

    (待更新…)

    经过学习挑选了比较优秀的博客进行汇总,希望可以帮到大家,该系列将持续更新,同道学习者可以关注收藏......

    展开全文
  • 统计学习方法 (李航 2)

    千次阅读 2020-02-06 18:10:27
    文章目录第1篇 监督学习第 1 章: 统计学习及监督学习概论第 2 章:感知机第 3 章:k近邻法第 4 章:朴素贝叶斯法第 5 章:决策树第 6 章:逻辑斯谛回归与最大熵模型第 7 章:支持向量机第 8 章:提升方法第 9 章:...
  • 李航《统计学习方法》课后习题答案(2

    千次阅读 多人点赞 2021-02-19 17:57:17
    李航《统计学习方法》课后习题答案(2) 章节 链接 1章 统计学习及监督学习概论 点击进入 2章 感知机 点击进入 3章 k近邻法 点击进入 4章 朴素贝叶斯法 点击进入 5章 决策树 点击进入...
  • 李航老师的《统计学习方法第二版的代码实现更新完毕,本文提供下载。(黄海广)李航老师编写的《统计学习方法》全面系统地介绍了统计学习的主要方法,特别是监督学习方法,包括感知机、k近邻法、朴...
  • 习题7.1 习题7.2 习题7.3 习题7.4
  • 李航博士的《统计学习方法》可以说是机器学习的入门宝典。现如今,统计学习方法2)于今年5月份出版,在监督学习的基础上,增加了无监督学习内容,更加丰富,是非常值得学习材料。最近清...
  • 李航《统计学习方法第二章课后答案链接 李航 统计学习方法 第二章 课后 习题 答案 http://blog.csdn.net/cracker180/article/details/78778305
  • 部分复习题: 遇到有意思的复习题,我会拿出来,并且进行分析 上机实践: 全部上机实践题的解题思路 文章目录 第一章 Python概述 几个例题 第二章 Python语言基础 选择题:1、3、7、8 思考题:9 上机实践:2~6 案例...
  • 李航—统计学习方法第四章课后答案

    万次阅读 多人点赞 2017-01-05 20:49:42
    4.1 用极大似然估计法推导朴素贝叶斯法中的先验概率估计公式和条件概率估计公式
  • 题目:参照图3.1,在维空间中给出实例点,画出k为1和2时的k近邻法构成的空间划分,并对其进行比较,体会k值选择与模型复杂度及预测准确率的关系。 习题3.2 题目:利用例题3.2构造的kd树求点 x = ( 3 , 4.5 ) T 的...
  • 统计学习方法》勘误表

    千次阅读 2018-01-29 10:37:16
    李航老师的统计学习方法堪称是机器学习、数据挖掘等方向必读之书,然而书中难免有部分错误。 于是李航老师更新了新的勘误表,转载作为收藏 详情参见:...
  • 李航 统计学习方法 五章 决策树 课后 习题 答案

    万次阅读 多人点赞 2017-07-24 11:30:01
    决策树是一种基本的分类和回归方法。决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间和类空间上的条件概率分布。学习时,利用训练...
  • 第一章 https://blog.csdn.net/familyshizhouna/article/details/70160782 第二章  2.1-2.2 https://blog.csdn.net/cracker180/article...
  • 发布文章 先感叹一下,C++水平真的差啊~~~~人生苦短,我用...优点: 可读性强,分类速度快(学习模型构建树的时候比较慢,但是一般模型都是离线的,所以问题不大) 1 模型 由结点和有向边组成,结点有两种类型,...
  • A = matrix(seq(1,16),4,4) A 1 5 913 2 6 1014 3 7 1115 4 8 1216 A[1,] 1 5 9 13 A[-c(1,3),] 2 6 1014 4 8 1216 ...‘E:/机器学习与量化交易研究课题/统计学习导论-基于R应用/I...
  • 参考链接: 李航《统计学习方法2 5章 编程生成决策树(ID3算法、C4.5算法)、调用sklearn模块实现(CART算法)(课本77页例题5.3 李航《统计学习方法2 5章 Python编程决策树(ID3未剪枝) 实现mnist...
  • 机器学习新-统计机器学习第二版

    千次阅读 2021-06-14 22:25:57
    本书介绍 统计领域不断受到科学和工业带来的问题的挑战。在早期,这些问题往往来自农业和工业试验,范围相对较小。随着计算机和信息时代的到来,统计问题...文末付本书最新pdf免费下载地址。 从数据中学习的挑...
  • 强烈推荐徐亦达老师关于EM算法的讲解视频,本文根据徐老师和李航老师统计学习方法整理,由于公式推导太多,笔记为手写。其中包含混合高斯模型的理解,形象化解释,以及习题链接。 习题 习题9.1和9.3 习题9.4 ...
  • 李航 《统计学习方法》习题8.1

    千次阅读 热门讨论 2018-04-24 21:19:32
    解题:因为题中假设弱分类器为决策树,可采用CART二叉分类树。1、初始化数据权值分布:D = (w11, w12, ..., w110) = (0.1,0.1, ..., 0.1)w1i =0.1 ,i = 1,2,....,102、计算各...所以一个选潜力等于2 和非2 为划...
  • 1、李航老师《统计学习方法第二版第二十一章课后题答案 21.1 假设方阵A是随机矩阵,即其每个元素的非负,每列元素的和为1,证明AkA^{k}Ak仍然是随机矩阵,其中k是自然数。 证明: 为了方便的使用矩阵乘法,我们令A...
  • 统计学习方法》课后习题答案汇总

    千次阅读 多人点赞 2020-06-04 10:32:29
    第一章 统计学习方法概论 Blog 第二章 感知机 Blog 第三章 K近邻法 Blog 第四章 朴素贝叶斯法 Blog 第五章 决策树 Blog 第六章 逻辑斯蒂回归与最大熵模型 第七章 支持向量机 Blog 第八章 提升方法 ...
  •   本课程主要是对李航老师的《统计学习方法第二版进行深入的讲解。工欲善其事,必先利其器。所以为了帮助初学者提高学习效率,先简单讲解一下学习的误区和要点。 1.1 常见误区   误区一:在学习过程中总想达到...
  • 统计学习基础(第二版)——引言

    千次阅读 2015-03-02 16:27:03
    第二版 引言 统计学习在诸多科学、金融、工业领域起到了关键性的作用,下面列举了一些学习的案例。 针对一位因心脏病住院的病人,预测其心脏病再次发作的概率。基于这位病人的人口信息、饮食和临床诊断信息来...
  • 李航 统计学习方法 课后习题答案

    万次阅读 多人点赞 2018-07-09 16:56:06
    第一章 https://blog.csdn.net/familyshizhouna/article/details/70160782 第二章 2.1-2.2 https://blog.csdn.net/cracker180/article/details/78778305 2.3 https://blog.csdn.net/xiaoxiao_wen/arti...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,581
精华内容 54,632
关键字:

统计学习方法第二版资料