精华内容
下载资源
问答
  • 统计学习基础笔记与习题答案统计学习基础笔记与习题答案统计学习基础笔记与习题答案统计学习基础笔记与习题答案统计学习基础笔记与习题答案统计学习基础笔记与习题答案统计学习基础笔记与习题答案统计学习基础笔记与...
  • 统计学习理论的本质中文版,在网上找了很久才找到的资源,这里分享给大家~(虽然要积分....逃)
  • 统计学习方法》是计算机及其应用领域的一门重要的学科。《统计学习方法》全面系统地介绍了统计学习的主要方法,特别是监督学习方法,包括感知机、k近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持...
  • 统计学习理论 Vapnik 扫描版 统计学习理论是研究利用经验数据进行机器学习的一种一般理论,属于计算机科学、模式识别和应用统计学相交叉与结合的范畴,其主要创立者是本书的作者Vladimir N. Vapnik。统计学习理论的...
  • 统计学习方法第二版 李航

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

    前言

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

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

    这一章主要都是些概念,所以我可能更多的内容是会直接照搬原文的内容。

    统计学习或机器学习一般包括监督学习、无监督学习、强化学习。有时还包括半监督学习、主动学习。

    监督学习与无监督学习可以简单理解为训练时有无label,训练数据x对应有一个label那就是监督学习,无则是无监督学习。

    监督学习

    监督学习分为学习和预测两个过程,由学习系统与预测系统完成。在学习过程中,学习系统利用给定的训练数据集,通过学习(或训练)得到一个模型,表示为条件概率分布 P(YIX) 或决策函数 = f(X) 。条件概率分布 P(YIX) 或决策函数 f(X)描述输入与输出随机变量之间的映射关系。在预测过程中,预测系统对于给定的测试样本集中的输入XN+l’ 由模型 YN+l = arg xF(YIXN +l) YN+l = !(XN +l)
    给出相应的输出 YN+l。

    学习系统(也就是学习算法)试图通过训练数据集中的样本 (Xi Yi) 带来的信息学习模型。具体地说,对输入叭,一个具体的模型 f(x) 可以产生 个输出 f(Xi)'而训练数据集中对应的输出是仇。如果这个模型有很好的预测能力,训练样本输出 Yi和模型输出 f(Xi) 之间的差就应该足够小。学习系统通过不断地尝试,选取最好的模型,以便对训练数据集有足够好的预测,同时对未知的测试数据集的预测也有尽可能好的推广。

    无监督学习

    无监督学习可以用于对己有数据的分析,也可以用于对未来数据的预测。分析时使用学习得到的模型,即函数 = g(x) 条件概率分布户(z x) 或者条件概率分布 P(xlz) 。预测时,和监督学习有类似的流程 由学习系统与预测系统完成,如图1. 3所示。在学习过程中,学习系统从训练数据集学习,得到→个最优模型,表示为函数 Z=g(x) 条件概率分布户(zlx) 或者条件概率分布户(xlz) 。在预测过程中,预测系统对于给定的输入 XN+l由模型 ZN+l = g(XN+l) ZN+l = arg 且严户(ZIXN +1)
    给出相应的输出 ZN+l’进行聚类或降维,或者由模型户(xlz) 给出输入的概率P(xN+1 | ZN+1) 进行概率估计。
    在这里插入图片描述
    强化学习

    智能系统与环境的互动如图1. 所示。在每 智能系统从环境中观测到状态 (state) St 个奖励 (reward) ru 采取 1个动作 (action) 句。环境根据智能系统选择的动作,决定下 t+l 的状态 t+1 与奖励 rt+l 要学习的策略表示为给定的状态下采取的动作。智能系统的目标不是短期奖励的最大化,而是长期累积奖励的最大化 强化学习过程中,系统不断地试错 (trial and error) ,以达到学习最优策略的目的。
    在这里插入图片描述
    感觉自己强化学习这一块估计会很少接触,所以看得时候也只是看个大概。

    按模型分类

    上面是统计学习的基本分类,按模型分类的话,可以分成概率模型和非概率模型,线性模型和非线性模型,以及参数模型和非参数模型。

    按算法分类

    按算法分类的话,可以分为在线学习 (online learning) 与批量学习 (batch learning) 。

    在线学习是指每次接受 个样本,进行预测,之后学习模型,并不断重复该操作的机器学习。与之对应,批量学习 次接受所有数据,学习模型,之后进行预测。

    在线学习通常比批量学习更难,很难学到预测准确率更高的模型,因为每次模型更新中,可利用的数据有限。

    按技巧分类

    1.贝叶斯学习

    贝叶斯学习 CBayesian learning) ,又称为贝叶斯推理 CBayesian inference) ,是统计学、机器学习中重要的方法。其主要想法是,在概率模型的学习和推理中,利用贝叶斯定理,计算在给定数据条件下模型的条件概率,即后验概率,并应用这个原理进行模型的估计,以及对数据的预测。将模型、未观测要素及其参数用变量表示,使用模型的先验分布是贝叶斯学习的特点。贝叶斯学习中也使用基本概率公式(图1.4)。朴素贝叶斯、潜在狄利克雷分配的学习属于贝叶斯学习。
    在这里插入图片描述
    贝叶斯估计与极大似然估计在思想上有很大的不同,代表着统计学中频率学派和贝叶斯学派对统计的不同认识。其实,可以简单地把两者联系起来,假设先验分布是均匀分布,取后验概率最大,就能从贝叶斯估计得到极大似然估计。

    2. 核方法

    核方法 (kernel method) 是使用核函数表示和学习非线性模型的一种机器学习方法,可以用于监督学习和无监督学习。有一些线性模型的学习方法基于相似度计算,更具体地,向量内积计算。核方法可以把它们扩展到非线性模型的学习,使其应用范围更广泛。

    核函数支持向量机,以及核 PCA 、核 均值属于核方法。

    把线性模型扩展到非线性模型,直接的做法是显式地定义从输入空间(低维空间)到特征空间(高维空间)的映射,在特征空间中进行内积计算。

    统计学习方法三要素

    统计学习方法都是由模型、策略和算法构成的,即统计学习方法由 要素构成,可以简单地表示为:

    方法=模型+策略+算法

    这里的话我就简单说明一下就好了。

    模型:选啥模型,简单理解就是选择什么样的函数,比方说感知机用的就是 f(x) = sign(ω*x + b),knn用的是求取欧式度量,进而建立树来回溯。

    策略:简单来说,就是建立模型的时候,怎么表示我预测的和真实的之间的误差大小。比方说0-1损失函数,你预测对了为1,错了为0,我损失了多少这个时候看的就是我有多少个0。(当然了,一般也不用这个损失函数,下文会讲)

    算法:存在的作用就是用来求出,什么时候(模型参数为多少时)给的策略给的损失最小。对应上面说的0-1损失函数,那就是求出啥时候0最少,1最多。

    模型评估与模型选择

    这一部分我想着重讲一下!

    1. 训练误差与测试误差

    统计学习的目的是使学到的模型不仅对己知数据而且对未知数据都能有很好的预测能力。不同的学习方法会给出不同的模型。当损失函数给定时,基于损失函数的模型的训练误差 Ctraining error) 和模型的测试误差 test error) 就自然成为学习方法评估的标准。注意,统计学习方法具体采用的损失函数未必是评估时使用的损失函数(不过一般都是)。
    在这里插入图片描述在这里插入图片描述
    训练误差的大小,对判断给定的问题是不是 个容易学习的问题是有意义的,但本质上不重要。测试误差反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念。显然,给定两种学习方法,测试误差小的方法具有更好的预测能力,是更有效的方法。通常将学习方法对未知数据的预测能力称为泛化能力 (generalization ability)

    2. 过拟合与模型选择

    过拟合简单来说就是此时的模型对于你自己的训练数据的预测结果极好,但是往往对于未知的数据效果不太行。

    当假设空间含有不同复杂度(例如,不同的参数个数)的模型时,就要面临模型选择(model selection) 的问题。我们希望选择或学习 个合适的模型。如果在假设空间中存在"真"模型,那么所选择的模型应该逼近真模型。具体地,所选择的模型要与真模型的参数个数相同,所选择的模型的参数向量与真模型的参数向量相近。

    如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高。这种现象称为过拟合 Cover-fitting) 。过拟合是指学习时选择的模型所包含的参数过多,以至出现这 模型对己知数据预测得很好,但对未知数据预测得很差的现象。可以说模型选择旨在避免过拟合并提高模型的预测能力。

    具体避免模型过拟合的方法可以参考:https://www.cnblogs.com/june0507/p/7600924.html

    正则化与交叉验证

    1. 正则化

    模型选择的典型方法是正则化 (regularization) 。正则化是结构风险最小化策略的实现,是在经验风险上加 个正则化项 (regularizer )或罚项 (penalty term) 。正则化项 般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数向量的范数。

    正则化的作用是选择经验风险与模型复杂度同时较小的模型。

    2. 交叉验证

    交叉验证,其实本质就是用来求取模型给的超参数,可用于降低模型的过拟合效果。

    如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集 (training set) 、验证集 (validation set) 和测试集 (testset) 。训练集用来训练模型,验证集用于模型的选择,而测试集用于最终对学习方法的评估。在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型进行选择也是有效的。

    但是,在许多实际应用中数据是不充足的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据; 把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。

    1.简单交叉验证
    简单交叉验证方法是:首先随机地将己给数据分为两部分, 部分作为训练集,另一部分作为测试集(例如, 70% 的数据为训练集, 30% 的数据为测试集) ;然后用训练集在各种条件下(例如,不同的参数个数)训练模型,从而得到不同的模型:在测试集上评价各个模型的测试误差,选出测试误差最小的模型。

    2 . S折交叉验证
    应用最多的是S折交叉验证,方法如下:首先随机地将已给数据切分为互不相交、大小相同的子集;然后利用 S-1个子集的数据训练模型,利用 余下的子集测试模型 ;将这一过程对可能的选择重复进行;最后选出S次评测中平均测试误差最小的模型。

    3.留一交叉验证
    S折交叉验证的特殊情形是S = N, 称为留一交叉验证 (leave-one-out cross validation) ,往往在数据缺乏的情况下使用。这里 N是给定数据集的容量。

    泛化能力

    学习方法的泛化能力 (generalization ability) 是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。现实中采用最多的办法是通过测试误差来评价学习方法的泛化能力。但这种评价是依赖于测试数据集的。因为测试数据集是有限的,很有可能由此得到的评价结果是不可靠的。统计学习理论试图从理论上对学习方法的泛化能力进行分析。

    泛化误差

    泛化误差反映了学习方法的泛化能力,如果 种方法学习的模型比另 种方法学习的模型具有更小的泛化误差,那么这种方法就更有效。事实上,泛化误差就是所学习到的模型的期望风险。

    泛化误差上界

    学习方法的泛化能力分析往往是通过研究泛化误差的概率上界进行的,简称为泛化误差上界(generalization error bound) 。具体来说,就是通过比较两种学习方法的泛化误差上界的大小来比较它们的优劣。泛化误差上界通常具有以下性质:它是样本容量的函数,当样本容量增加时,泛化上界趋于 0; 它是假设空间容量 (capacity)函数,假设空间容量越大,模型就越难学,泛化误差上界就越大。

    生成模型与判别模型

    监督学习方法又可以分为生成方法 Cgenerative approach) 和判别方法 discriminative approach) 所学到的模型分别称为生成模型 (generative model)和判别模型(discriminative model)

    在监督学习中,生成方法和判别方法各有优缺点,适合于不同条件下的学习问题。

    生成方法的特点:生成方法可以还原出联合概率分布 P(X Y) 而判别方法则不能:生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快地收敛于真实模型:当存在隐变量时,仍可以用生成方法学习,此时判别方法就不能用。

    判别方法的特点:判别方法直接学习的是条件概率 P(YIX) 或决策函数 f(X)直接面对预测,往往学习的准确率更高:由于直接学习 P(YIX) f(X) 可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。

    监督学习的应用

    监督学习的应用主要是三个方面:分类问题、回归问题和标注问题。

    具体可以参考:https://www.cnblogs.com/kklalala-kaly/p/12169652.html

    模型评估的各项指标

    模型好不好,就看它预测未知数据准不准咯。那就不多bb,直接介绍。

    以一个二分类问题为例,样本有正负两个类别。

    那么模型预测的结果和真实标签的组合就有4种:TP,FP,FN,TN。
    在这里插入图片描述
    TP实际为正样本,预测为正样本;
    FN实际为正样本,预测为负样本;
    FP实际为负样本,预测为正样本;
    TN实际为负样本,预测为负样本。
    (其实T就是true,F就是false,P就是positive,N就是negative)

    Accuracy(准确率)

    简单讲,就是预测对的样本数占样本总数的比例。正确的样本数是TP,TN;总体的样本数就是:TP+FN+FP+TN。
    所以根据定义,可以得到Acc的计算公式:

    Accuracy = TP+TN / (TP+TN+FP+FN)

    Precision(精确率)
    精确率又称查准率,简单讲就是预测为正的样本中有多少是真正的正样本。

    公式:
    Precision = TP / (TP+FP)

    召回率(Recall)
    召回率又叫查全率,简单讲就是样本中的正例有多少被预测正确了。

    公式:
    Recall = TP / (TP+FN)

    F1-score
    考虑了两种指标的值,用来权衡precision和recall的值。

    公式:
    F1score = 2∗Precision∗Recall / (Precision+Recall)

    第二章 感知机

    导论

    感知机 (perceptron) 是二类分类的线性分类模型,其输入为实例的特征向量,输 出为实例的类别,取 +1 和-1值.感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函 数进行极小化,求得感知机模型。感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式 。感知机预测是用学习得到的感知机模型对新的输入实例进行分类。感知机1957 年由 Rosenblatt 提出,是神经网络与支持向量机的基础。

    定义

    感知机是根据输入实例的特征向 对其进行 类分类的线性分类模型: f(x) = sign(ω*x + b)

    其中,ω和b为感知机模型参数, ωεR 叫作权值 (weight) 或权值向量( weight vector ), 叫作偏值( bias ), ω*x表示ω和x的内积,sign 是符号函数,当x>=0,sign(x) = 1,当x<0,sign(x) = -1。

    感知机模型对应于输入空间(特征空间)中的分离超平面 w*x+b=0

    感知机有如下几何解释:线性方程 ω*x + b = 0
    对应于特征空间Rn 中的一个超平面, 其中ω是超平面的法向量,b是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被分为正、负两类。因此,超平面S被称为分离超平面 (separating hyperplane) ,如图 2.1 所示。
    在这里插入图片描述

    学习策略

    感知机学习的策略是极小化损失函数:minL(w, b) = -\Sigma{y_{i}(ω*x_{i} + b)}

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

    学习算法

    感知机学习算法是基于随机梯度下降法的对损失函数的最优化算法,有原始形式和对偶形式。算法简单且易于实现 。原始形式中,首先任意选取一个超平面,然后用梯度下降法不断极小化目标函数。在这个过程中一次随机选取一个误分类点使其梯度下降。

    收敛性

    当训练数据集线性可分时,感知机学习算法是收敛的。感知机算法在训练数据集上的误分类次数 满足不等式:
    在这里插入图片描述

    当训练数据集线性可分时,感知机学习算法存在无穷多个解,其解由于不同的初值或不同的迭代顺序而可能有所不同。

    实现代码

    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代码的实现。

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

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

    展开全文
  • 以李航《统计学习方法》为参考,包含自己的理解和部分相关代码~有所不对请大家指出,新手上路,请多指教。
  • 统计学习导论-基于R应用》

    千次阅读 2019-06-12 15:24:32
    机器学习更底层的东西在《统计学习理论的本质》里, 《统计学习理论的本质》更现代化、更通俗的理解在这里 《统计学习导论-基于R应用》 Gareth James Daniela Witten Trevor Hastie Robert Tibshirani 2018.4(1.6) ...

    机器学习更底层的东西在《统计学习理论的本质》里,

    《统计学习理论的本质》更现代化、更通俗的理解在这里


    《统计学习导论-基于R应用》

    Gareth James

    Daniela Witten

    Trevor Hastie

    Robert Tibshirani

    2018.4(1.6)

    机械工业出版社

    展开全文
  • 一些统计学习的代表性问题包括: 找出前列腺癌的高危因素 根据对数周期图对一个音位进行分类 根据人口统计学资料、饮食和临床测量数据预测某人是否会得心脏病 自定义一个垃圾邮件检测系统 识别手写的邮政编码数字 ...

      

    来源:THU数据派(ID:datapi)

    无论你在数据科学中是何种立场,你都无法忽视数据的重要性,数据科学家的职责就是分析、组织和应用这些数据。

    著名求职网站 Glassdoor 根据庞大的就业数据和员工反馈信息,将数据科学家排名为美国最佳的 25 个工作之首。虽然名头不小,但毫无疑问,数据科学家所做的具体工作是不断发展变化的。随着机器学习等技术越来越普及,像深度学习这样的新兴领域在研究人员、工程师以及聘用他们的公司中成为新宠,数据科学家们将继续在创新浪潮和技术进步中崭露头角。

    尽管具有强大的编程能力很重要,但数据科学家不需要都是软件工程师(实际上会用 Python 你就可以上路了)。数据科学家处于编程、统计学和批判性思维的交叉区域。正如 Josh Wills 所说:“数据科学家是这样一种人,他比任何程序员都更懂统计,并且他比任何统计学家都更懂编程”。

    我认识很多想转行数据科学家的软件工程师,他们盲目地使用 TensorFlow 或者 Apache Spark 等机器学习框架去处理数据,却没有深入理解背后的统计理论。因此本文要谈一谈统计学习( statistical learning ),它是源于统计学和泛函分析的一个机器学习理论框架。

    为什么要学习统计学习?

    首先,为了知道如何以及何时使用各种分析方法,理解各种分析方法背后的思想很重要。

    要想掌握更精巧复杂的方法,你必须先理解较简单的方法;其次,当你想准确地评估一种分析方法的效果时,你得知道其运行的多好或者多么不好;第三,这是一个令人兴奋的研究领域,在科学、业界和金融领域有重要的应用。最后,统计学习也是一名现代数据科学家的重要素养。一些统计学习的代表性问题包括:

    • 找出前列腺癌的高危因素

    • 根据对数周期图对一个音位进行分类

    • 根据人口统计学资料、饮食和临床测量数据预测某人是否会得心脏病

    • 自定义一个垃圾邮件检测系统

    • 识别手写的邮政编码数字

    • 确定一个组织样本属于哪一类癌症

    • 建立人口调查数据中工资和人口统计学变量之间的关系

    在大学的最后一个学期,我完成了一门数据挖掘的独立学习课程。该课程涵盖了来自3本书的大量材料:《Intro to Statistical Learning》(Hastie, Tibshirani, Witten, James), 《Doing Bayesian Data Analysis》 (Kruschke),和《Time Series Analysis and Applications》 (Shumway, Stoffer)。我们在贝叶斯分析、马尔科夫链、蒙特卡洛、层次建模、监督学习和非监督学习方面做了大量的练习。

    这些经历加深了我对数据挖掘的兴趣,并使我确信要在此领域进一步专注。最近我完成了 Stanford Lagunita 的统计学习在线课程,它涵盖了我在独立学习课程中读过的《Intro to Statistical Learning》的全部内容。在接触了这本书两次之后,我想分享这本书中的 10 个统计分析方法,我相信任何数据科学家,若想更有效的处理大数据集,都应该学习这些方法。

    在介绍这 10 个分析方法之前,我想先对统计学习和机器学习做一个区分。我曾经写过一篇关于机器学习的很受欢迎的文章,所以我相信我有专业能力来区分二者:

    • 机器学习是人工智能的一个子领域,统计学习是统计学的一个子领域;

    • 机器学习强调大规模应用和预测准确性,统计学习强调模型及其可解释性(interpretability),精度(precision)和不确定性(uncertainty)。

    但是这种区别已经越来越模糊,并且存在大量交叉。此外,机器学习的市场营销做的更好。

    1、线性回归

    在统计学中,线性回归是一种通过拟合因变量(dependent)和自变量(independent variable)之间最佳线性关系来预测目标变量的方法。最佳拟合是通过确保每个实际观察点到拟合形状的距离之和尽可能小而完成的。最佳拟合指的是没有其他形状可以产生更小的误差了。

    线性回归的两种主要类型是:

    • 简单线性回归(Simple Linear Regression):简单线性回归使用单一的自变量,通过拟合出最佳的线性关系来预测因变量。

    • 多元线性回归(Multiple Linear Regression):多元线性回归使用多个自变量,拟合出最佳的线性关系来预测因变量。

     

    选择任意两个你日常生活中使用的相关的东西。比如,我有过去 3 年中自己每月开支、每月收入、每月旅行次数的数据,现在我想回答下列问题:

    • 明年我每月的开支会是多少?

    • 哪个因素(每月收入还是每月旅行次数)在决定我的每月开支时更重要?

    • 每月收入、每月旅行次数是如何与每月支出相关的?

    2、分类

    分类是一种数据挖掘技术,通过确定一组数据所属的类别以实现更准确的预测和分析。分类有时候也称为决策树,是对大型数据集进行分析的利器之一。常用的分类方法有两种:逻辑回归和判别分析(Discriminant Analysis)。

    逻辑回归适合于因变量为二元变量时。像所有的回归分析一样,逻辑回归是一种预测性分析。逻辑回归用于描述数据并解释一个二元因变量与一个或多个名义、序列、时间间隔或比率独立变量之间的关系。逻辑回归可以回答的问题有:

    • 每增加一磅体重和每天吸烟的包数如何影响患肺癌的概率?

    • 卡路里摄入、脂肪摄入和年龄是否对心脏病发作有影响?

    在判别分析中,先验知道两个或多个分组或类别(clusters),然后基于已测量的特征将 1 个或多个新观测对象分类到一个已知类别中去。判别分析在每个类别下分别对预测变量X的分布进行建模,然后使用贝叶斯定理将这些变量转换为给定X值的对应类别的概率估计。这些模型可以是线性的或者二次方的:

    线性判别分析(Linear Discriminant Analysis)为每个观测值计算「判别分数」来判断它应该属于哪个类别。判别分数是通过寻找自变量的线性组合得到的。它假设每个类别中的观测值都来自于多元高斯分布,并且预测变量的协方差在响应变量 Y 的所有 k 个水平上都相同。

    二次判别分析(Quadratic Discriminant Analysis)提供了一个替代方法。与线性判别分析一样,二次判别分析假设每个 Y 类别的观察值都来自于高斯分布。然后,与线性判别分析不同的是,二次判别分析假设每个类都有自己的协方差矩阵。换句话说,预测变量并未假设在 Y 中的所有 k 个水平上都具有共同的方差。

    3、重采样方法(Resampling Methods)

    重采样是从原始数据中重复采集样本的方法。这是一种非参数统计推断方法。换句话说,重采样方法不涉及使用通用分布表来计算近似的 p 概率值。

    重采样根据实际数据生成一个唯一的采样分布。它使用实验方法而不是分析方法来生成唯一的样本分布。它产生的是无偏估计,因为它是基于研究人员研究的数据的所有可能结果生成的无偏样本。为了理解重采样的概念,你需要理解术语 Bootstrapping 和交叉验证(Cross-Validation)。

    Bootstrapping 在很多情况下是一种有用的方法,比如评估模型性能、模型集成(ensemble methods)、估计模型的偏差和方差等。它的工作机制是对原始数据进行有放回的采样,并将「没被选上」的数据点作为测试用例。我们可以这样操作多次,并计算平均得分作为模型性能的估计。

    交叉验证是评估模型性能的一种方法,它通过将训练数据分成 k 份,使用 k-1 份作为训练集,使用保留的那份作为测试集。以不同的方式重复整个过程 k 次。最终取 k 个得分的平均值作为模型性能的估计。

    对于线性模型而言,普通最小二乘法是拟合数据的主要标准。不过,接下来的 3 种方法可以为线性模型提供更好的预测准确性和模型可解释性。

    4、子集选择(Subset Selection)

    这种方法先确定与因变量相关的 p 个自变量的一个子集,然后使用子集特征的最小二乘拟合模型。

    • 最优子集法(Best-Subset Selection)对 p 个自变量的所有可能组合分别做最小二乘法回归,查看最终的模型拟合效果。该算法分为 2 个阶段:

      • 拟合所有包含 k 个自变量的模型,其中 k 是模型的最大长度;

      • 使用交叉验证误差来选出最佳模型。

    使用测试误差或者验证误差而不是训练误差来评估模型很重要,因为 RSS 和 R2 会随着变量的增加而单调增加。最好的方式是交叉验证并选择测试误差上 R2 最高而 RSS 最低的模型。

    • 向前逐步选择(Forward Stepwise Selection)使用一个更小的自变量子集。它从一个不包含任何自变量的模型开始,将自变量逐个加入模型中,一次一个,直到所有自变量都进入模型。每次只将能够最大限度提升模型性能的变量加入模型中,直到交叉验证误差找不到更多的变量可以改进模型为止。

    • 向后逐步选择(Backward Stepwise Selection)在开始时包含全部 p 个自变量,然后逐个移除最没用的自变量。

    • 混合方法(Hybrid Methods)遵循向前逐步选择原则,但是在每次添加新变量之后,该方法也可能移除对模型拟合没有贡献的变量。

    5、特征缩减(Shrinkage)

    这种方法使用所有 p 个自变量拟合模型,但相对于最小二乘估计,该方法会让一些自变量的估计系数向着0衰减。这种衰减又称正则化(Regularization),具有减少方差的作用。根据所使用的缩减方法,一些系数可能被估计为 0。因此这个方法也用于变量选择。最常用的两种缩减系数方法是岭回归(Ridge regression)和 L1 正则化(Lasso)。

    岭回归(Ridge regression)与最小二乘类似,但在原有项的基础上增加了一个正则项。和最小二乘法一样,岭回归也寻求使 RSS 最小化的参数估计,但当待估参数接近于 0 时,它会有一个收缩惩罚。这个惩罚会促使缩减待估参数接近于 0。您无需深入数学海洋,仅需要知道岭回归通过减小模型方差来缩减特征就可以了。就像主成分分析一样,岭回归将数据投影到 d 维空间,然后对比低方差(最小主成分)和高方差(最大主成分)的系数进行剔除和筛选。

    岭回归至少有一个缺点:它的最终模型中包含全部 p 个自变量。惩罚项会让许多系数接近于 0 但永远不为 0。这一点通常对预测准确性而言并不是问题,但它可能会使模型更难解释。正则化克服了这个缺点,只要 s 足够小,它能强迫某些系数为 0。S=1 就是常规的最小二乘法回归,当 s 接近于 0 时,系数朝着 0 缩减。因此正则化也相当于进行了变量选择。

    6、降维(Dimension Reduction)

    降维将估计 p+1 个系数减少为 M+1 个系数,其中 M<p。这是通过计算变量的 M 个不同的线性组合或投影来实现的。然后,这 M 个投影被用作预测变量,使用最小二乘来拟合线性回归模型。常用的两种降维方法分别是主成分回归(Principal component regression)和偏最小二乘法(Partial least squares)。

    可以将主成分回归描述为从大量变量中导出低维特征集的方法。数据的第一主成分方向是观测值变化最大的方向。换句话说,第一主成分是一条尽可能拟合数据的直线。可以拟合 p 个不同的主成分。第二主成分是与第一主成分不相关的变量的线性组合,且方差最大。主成分分析的思想是使用正交方向的数据的线性组合来捕获数据中的最大方差。通过这种方式可以组合相关变量的影响,从可用数据中提取更多信息,而在常规最小二乘中我们必须丢弃其中一个相关变量。

    主成分分析法识别最能代表预测变量 X 的线性组合。这些组合(方向)以无监督的方式被识别,响应变量Y并未用于帮助确定主成分方向,因此不能保证最能解释预测变量的方向在预测上也是最好的(尽管通常都这样假定)。偏最小二乘法是主成分分析法的一种监督学习替代方式。它也是一种降维方法,首先识别一个新的较小的特征集,这些特征是原始特征的线性组合,然后通过对新的 M 个特征最小二乘拟合成线性模型。与主成分分析法不同的是,偏最小二乘法会利用响应变量来识别新特征。

    7、非线性模型(Nonlinear Models)

    在统计学中,非线性回归是回归分析的一种形式,观测数据是通过一个或多个自变量的非线性组合函数来建模。数据用逐次逼近的方法进行拟合,下面是一些处理非线性模型的重要方法。

    如果一个实数域上的函数可以用半开区间上的指示函数的有限次线性组合来表示,则它被称为阶跃函数(step function)。换一种不太正式的说法就是,阶跃函数是有限段分段常数函数的组合。

    分段函数是由多个子函数定义的函数,每个子函数应用于主函数域的某一个区间上。分段实际上是表达函数的一种方式,而不是函数本身的特性,但是加上额外的限定条件,它也可以描述函数的性质。例如,分段多项式函数是这样一个函数,它是每个子域上的多项式,但每个子域上可能是不同的函数。

    样条曲线(spline)是由多项式分段定义的特殊函数。在计算机图形学中,样条是指分段多项式参数曲线。因为它们的结构简单,拟合简易而准确,可以近似曲线拟合和交互式曲线设计中的复杂形状,样条曲线是很流行的曲线。

    广义可加模型(Generalized additive model)是一种广义线性模型,其中线性预测变量依赖于某些预测变量的未知光滑函数,侧重于这些光滑函数的推理。

    8、树形方法(Tree-Based Methods)

    树形方法可以用于回归和分类问题。这涉及到将预测空间分层或分割成若干简单区域。由于用于分割预测空间的分裂规则集可以概括成树形,因此这类方法被称为决策树方法。下面的方法都是先生成多棵树,然后将这些树组合在一起以产生单个共识预测。


    Bagging 是一种通过从原始数据生成额外的训练数据从而减少预测方差的方法,它通过使用重复的组合来生成与原始数据相同的多样性。通过增加训练集的大小,虽然不能提高模型的预测力,但可以减小方差,将预测调整到预期结果。

    Boosting 是一种使用多个不同模型计算输出的方法,然后使用加权平均法对结果进行平均。通过改变加权公式,结合这些模型的优点和缺陷,使用不同的微调模型,可以为更广泛的输入数据提供良好的预测力。

    随机森林算法非常类似于 Bagging。先采集训练集的随机 bootstrap 样本,然后采集特征的随机子集来训练单棵树;而在 bagging 时是给每一棵树全部特征。由于随机特征选择,与常规 bagging 相比,树彼此之间更加独立,这通常会导致更好的预测性能(因为更好的方差偏差权衡),而且训练速度更快,因为每棵树只从特征的一个子集学习。

    9、支持向量机

    支持向量机是一种分类技术,属于机器学习中的监督学习模型。通俗地说,它通过寻找超平面(二维中的线,三维中的平面和更高维中的超平面,更正式地,超平面是 n 维空间的 n-1 维子空间)以及最大边界(margin)来划分两类点。从本质上讲,它是一个约束优化问题,因为其边界最大化受到数据点分布的约束(硬边界)。

     

    「支持」这个超平面的数据点被称为「支持向量」。在上图中,填充的蓝色圆圈和两个实心方块是支持向量。对于两类数据不能线性分离的情况,这些点将被投影到一个更高维的的空间中,在这个空间里可能会线性可分。多分类问题可以分解为多个一对一或者一对其余类的二分类问题。

    10、无监督学习

    到目前为止,我们只讨论了监督学习,即数据类别是已知的,算法的目标是找出实际数据与它们所属的类别之间的关系。当类别未知时,我们使用另一种方法,叫做无监督学习,因为它让学习算法自己去找出数据中的模式。聚类是无监督学习的一个例子,其中不同的数据被聚类为密切相关的分组。下面是最广泛使用的无监督学习算法的列表。


    • 主成分分析:通过识别一组具有最大方差和相互不相关的特征的线性组合来生成低维表示的数据集。这种方法有助于理解变量在无监督环境下的潜在的相互作用。

    • k-Means 聚类:根据聚类中心点的距离将数据分为 k 个不同的聚蔟。

    • 层次聚类:通过创建一棵聚类树来构建多级分层结构。

    以上是一些基本的统计技术概要,可以帮助数据科学项目经理/执行人员更好地理解他们的数据科学团队运作的内容背后隐藏着什么。事实上,一些数据科学团队纯粹通过 python 和 R 库运行算法。他们中的大多数甚至不必考虑背后的数学原理。但是,理解统计分析的基础知识可以为你的团队提供更好的方法。深入了解一小部分就可以更轻松地进行操作和抽象。我希望这篇基础的数据科学统计指南能给你一个不错的理解!

    原文链接:

    https://www.codementor.io/james_aka_yale/the-10-statistical-techniques-data-scientists-need-to-master-fvj4dx78a

    欢迎三连 在看留言分享至朋友圈 ↓↓↓

    展开全文
  • 统计学习

    千次阅读 2018-08-01 15:29:48
    基本概念 统计学习 统计学习(statistical learning) 是基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 也称为统计机器学习(statistical machine learning) ...

    基本概念

    统计学习

    统计学习是基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 也称为统计机器学习。

    统计学习的主要特点
    1. 统计学习以计算机及网络为平台, 是建立在计算机及网络之上的;
    2. 统计学习以数据为研究对象, 是数据驱动的学科;
    3. 统计学习的目的是对数据进行预测与分析;
    4. 统计学习以方法为中心, 统计学习方法构建模型并应用模型进行预测与分析;
    5. 统计学习是概率论、 统计学、 信息论、计算理论、 最优化理论及计算机科学等多个领域的交叉学科, 并且在发展中逐步形成独自的理论体系与方法论
    统计学习的对象

    统计学习的对象是数据(data)。 它从数据出发, 提取数据的特征, 抽象出数据的模型, 发现数据中的知识, 又回到对数据的分析与预测中去。

    统计学习关于数据的基本假设

    统计学习关于数据的基本假设是同类数据具有一定的统计规律性, 这是统计学习的前提。这里的同类数据是指具有某种共同性质的数据, 例如英文文章、 互联网网页、 数据库中的数据等。由于它们具有统计规律性, 所以可以用概率统计方法来加以处理。 比如, 可以用随机变量描述数据中的特征, 用概率分布描述数据的统计规律。

    数据的类型

    数据分为连续型变量和离散型变量。

    统计学习的目的

    统计学习用于对数据进行预测与分析, 特别是对未知新数据进行预测与分析。

    1. 对数据的预测可以使计算机更加智能化, 或者说使计算机的某些性能得到提高;
    2. 对数据的分析可以让人们获取新的知识, 给人们带来新的发现。
    3. 对数据的预测与分析是通过构建概率统计模型实现的。

    统计学习总的目标就是考虑学习什么样的模型和如何学习模型, 以使模型能对
    数据进行准确的预测与分析, 同时也要考虑尽可能地提高学习效率。

    统计学习的方法

    统计学习的方法是基于数据构建统计模型从而对数据进行预测与分析。 分为:

    1. 监督学习(supervised learning)
    2. 非监督学习(unsupervised learning)
    3. 半监督学习(semi-supervised learning)
    4. 强化学习(reinforcement learning)

    对于监督学习,统计学习的方法可以概括如下:
    1. 从给定的、 有限的、 用于学习的训练数据(training data) 集合出发;
    2. 假设数据是独立同分布产生的;
    3. 并且假设要学习的模型属于某个函数的集合, 称为假设空间(hypothesis space);
    4. 应用某个评价准则 , 从假设空间中选取一个最优的模型, 使它对已知训练数据及未知测试数据(test data) 在给定的评价准则下有最优的预测;

    这样, 统计学习方法包括模型的假设空间、 模型选择的准则以及模型学习的算法, 称其为统计学习方法的三要素。简称为模型(model) 、 策略(strategy) 和算法(algorithm) 。

    实现统计学习方法的步骤
    1. 得到一个有限的训练数据集合;
    2. 确定包含所有可能的模型的假设空间, 即学习模型的集合;
    3. 确定模型选择的准则, 即学习的策略;
    4. 实现求解最优模型的算法, 即学习的算法;
    5. 通过学习方法选择最优模型;
    6. 利用学习的最优模型对新数据进行预测或分析。
    统计学习的研究

    统计学习研究一般包括统计学习方法、 统计学习理论及统计学习应用三个方面:

    1. 统计学习方法的研究旨在开发新的学习方法;
    2. 统计学习理论的研究在于探求统计学习方法的有效性与效率, 以及统计学习的基本理论问题;
    3. 统计学习应用的研究主要考虑将统计学习方法应用到实际问题中去, 解决实际问题。
    统计学习的重要性
    1. 统计学习是处理海量数据的有效方法
    2. 统计学习是计算机智能化的有效手段
    3. 统计学习是计算机科学发展的一个重要组成部分。 可以认为计算机科学由三维组成: 系统、 计算、 信息。 统计学习主要属于信息这一维, 并在其中起着核心作用。
    展开全文
  • 统计学习是基于数据构建概率统计模型并运用模型对数据进行预测与分析,统计学习方法包括模型的假设空间、模型选择的准则以及模型学习的算法,称为统计学习方法的三要素。 一般实现统计学习的步骤如下: 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...
  • 统计学习方法概述

    千次阅读 2020-07-23 16:52:44
    统计学习方法概论学习统计学习统计学习的特点统计学习的目的统计学习的方法监督学习基本概念输入空间、特征空间与输出空间联合概率分布假设空间统计学习三要素模型策略损失函数和风险函数损失函数风险函数经验风险...
  • 统计学习方法学习笔记一

    千次阅读 2017-03-16 09:23:04
    第一章 统计学习方法概论 统计学习的主要特点是 统计学习的对象 统计学习方法的分类 统计学方法的三个要素 统计学方法的步骤 统计学习的研究 监督学习supervised leaning 三要素 模型 策略 算法 训练误差与测试误差 ...
  • 统计学习基础

    热门讨论 2013-12-12 12:13:57
    数据挖掘,推理于预测 中文版 trevor hastie robert tibshirani jerme friedman
  • 统计学习方法》学习笔记目录

    千次阅读 多人点赞 2019-12-10 21:54:27
    此篇为 李航老师著的《统计学习方法》的学习笔记汇总,准备学习并敲一敲代码,还请大家不吝赐教!
  • 统计学习(statistical learning)是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测和分析的一门学科。统计学习也称为统计机器学习(statistial machine learning)。统计学习分为监督学习,非监督...
  •   从头开始学习李航老师的《统计学习方法》,这本书写的很好,非常适合机器学习入门。   如果部分显示格式有问题请移步Quanfita的博客查看 目录 感知机模型 感知机学习策略 感知机学习算法 原始形式 ...
  • 1. 统计学习概述 2. 统计学习三要素 3. 模型的评估与选择 4. 分类问题、标注问题与回归问题   1. 统计学习概述 (1)概念:统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测分析的...
  •   提升方法是一种常用的统计学习方法,是集成学习实现的一种方式,《统计学习方法》只介绍了提升方法的相关知识,本文从集成学习方法开始回顾,形成这部分内容的一个学习框架。   集成学习通过构建并结合多个...
  • ##《统计学习方法》各章节代码实现与课后习题参考解答 章节 代码 课后习题 第1章 统计学习方法概论(LeastSquaresMethod) 传送门 传送门 第2章 感知机(Perceptron) 传送门 传送门 ...
  • 李航《统计学习方法》课件

    千次阅读 2019-07-23 20:11:31
    百度网盘: ...errmsg=Auth Login Sucess&&bduss=&ssnerror=0&traceid= 提取码:ffxy 作者袁春:清华大学深圳研究生院,提供了第一版全书 12 章的 PPT 课件。 ...
  • 李航《统计学习方法》课后习题答案(第2版)

    千次阅读 多人点赞 2021-02-19 17:57:17
    李航《统计学习方法》课后习题答案(第2版) 章节 链接 第1章 统计学习及监督学习概论 点击进入 第2章 感知机 点击进入 第3章 k近邻法 点击进入 第4章 朴素贝叶斯法 点击进入 第5章 决策树 点击进入...
  • 第一章:https://blog.csdn.net/weixin_43646592/article/details/109551026 第二章: https://blog.csdn.net/weixin_43646592/article/details/109572240 ...
  • 统计学习理论

    千次阅读 2016-07-29 08:25:18
    万普尼克(Vapnik)建立的一套机器学习理论,使用统计的方法,因此有别于归纳学习等其它机器学习方法。由这套理论所引出的支持向量机对机器学习的理论界以及各个应用领域都有极大的贡献,一般情况下弗拉基米尔-万普...
  • 李航《统计学习方法》的代码实现

    千次阅读 2019-07-23 20:02:27
    githun地址: https://github.com/fengdu78/lihang-code 黄海广博士对原有代码进行内容的更新,修改了部分错误,增加每章概述。 目前有前13章,后续会继续更新
  • 应用数理统计学习笔记

    千次阅读 多人点赞 2018-11-12 21:09:47
    本篇为研究生用应用数理统计学习笔记,参考教材有: 《应用数理统计》施雨 著 《概率论与数理统计》吴翊 著 《程序员的数学2 概率统计》 平冈和幸 著 链接:假设检验专题可以看:假设检验专题 复习 概率论...
  • (1)统计学习三要素概述 (2)策略(目标函数、代价函数、损失函数) ------------------------------------------------------------------------------------------------------------------------- 一、统计...
  • 第一章 https://blog.csdn.net/familyshizhouna/article/details/70160782 第二章  2.1-2.2 https://blog.csdn.net/cracker180/article...
  • 习题7.1 习题7.2 习题7.3 习题7.4
  • 李航统计学习方法总结与整理

    万次阅读 2019-03-26 22:22:18
    支持向量机的学习策略就是间隔最大化,可形式化为求解一个凸二次规划问题,也等价于正则化的合页损失函数最小化问题。 线性可分支持向量机 :硬间隔最大化 则: 线性支持向量机 :软间隔最大化 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 561,550
精华内容 224,620
关键字:

统计学习