"> "> Yufei Luo's Blog - But I was so much older then, I am younger than that now.

概述

在机器学习任务中,数据和特征决定了机器学习的上限(例如偏差-方差分解中的噪声部分,噪声决定了机器学习任务的难度),而模型和算法只是逼近这个上限而已。而这里的数据便指的是经过特征工程得到的数据。

特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的是获取更好的数据特征,使得机器学习模型可以更好地逼近学习的上限。如果使用的模型是诸如线性回归、支持向量机、决策树等统计学习模型,特征工程的作用比模型的训练更加重要,甚至当特征工程做得很好时,使用简单的模型也可以取得不错的效果。当然,对于深度学习而言,由于神经网络自身具有强大的学习能力,可以自己从数据中学到某些“特征”(当然,这些“特征”的可解释性较差),对于特征工程的要求就要相对低很多。但是,这并不意味着深度学习对特征工程没有要求,通常仍需要对数据做一些预处理。

阅读全文 »

本文总结了自己读过的一些技术书籍、看过的网课等内容,并给出了简单评价。当然每个人的阅读习惯不同,因此我的意见仅供参考:)。作为程序员,学无止境,本文内容也会慢慢补充。

编程语言

C/C++

C++ primer:一本大部头,对C++的语法介绍十分详细。适合先通读一遍并完成课后题,然后当参考书使用,遇到问题时翻看。

The C Programming Language:自己买来当参考书看的,因为自己学的第一门编程语言是C++,这本书用于对C语言编程的一些特定语法进行补充。

Python

廖雪峰的Python教程:网页版,对于Python语法的介绍比较详细,唯一的缺点是练习题有一些少。如果已有其他编程语言的基础学起来会很快。

计算机基础

数据结构与算法

算法导论:常见的算法基本都有介绍,而且算法的证明过程很详细,但是读下来确实也十分吃力。MIT有配套公开课,可以辅助阅读。注意课后题里面也有许多精华,这些题目在网上有答案。读完之后LeetCode中等及以下难度题目应该很少会因为算法基础知识欠缺而不会做。

阅读全文 »

OSI七层模型

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范。

OSI模型把网络从逻辑上分为七层,每一层都有相应的物理设备。它是一种框架式的设计方法,最主要的功能就是帮助不同类型的主机实现数据传输; 最大优点就是将服务、接口和协议三个概念明确的区分起来。但是这一模型复杂且不实用;在实际中,经常使用的是TCP/IP五层(或四层,将物理层与数据链路层看作同一层)模型。

阅读全文 »

概述

要构建一个完整的机器学习项目,一般可以按照如下步骤进行:

  1. 了解整个项目的概况,获取原始数据
  2. 对数据做特征工程
  3. 选择合适的机器学习方法,按所选择的策略对模型进行训练和优化
  4. 模型的部署、监控和维护

通常,第二步和第三步是重要且需要花费很多时间的步骤。同时这两步也相互依赖,需要根据数据固有的特点选择合适的机器学习模型,也需要根据所选择的机器学习模型来决定特征工程的具体操作。在下文中,将对机器学习的详细步骤进行说明,并使用Python的Scikit-learn函数库提供一些简单的示例。与此同时,在每个步骤中也会对Scikit-learn函数库的使用方法进行总结。

注意:在本文使用到的数据中,每一行的数据代表一个样本,每一列的数据代表一个特征。它是使用Python做机器学习相关任务时,所遵守的一个约定俗成的规则。Scikit-learn、PyTorch、TensorFlow等机器学习与深度学习相关的函数库都是按照这一规则进行开发的。

阅读全文 »

定义

逻辑回归虽然在名字里面带有“回归”二字,但是它实质上是一种分类模型。从广义上来讲,因为逻辑回归的表达式中使用到了线性方程,因此它也属于广义线性模型的一种。

逻辑分布

\(X\)为连续随机变量,如果\(X\)服从逻辑分布那么它具有下列的分布函数\(F(x)\)和密度函数\(f(x)\)\[ F(x)=P(x\le x)=\frac{1}{1+\exp(-(x-\mu)/\gamma)} \\ f(x)=F'(x)=\frac{\exp(-(x-\mu)/\gamma)}{\gamma(1+\exp(-(x-\mu)/\gamma))^2} \] 式中,\(\mu\)为位置参数,\(\gamma>0\)为形状参数。

逻辑分布函数的图形是一条S形曲线,曲线以点\((\mu,\frac{1}{2})\)中心对称。曲线在中心附近增长速度最快,而在两端增长速度较慢。

阅读全文 »

概述

EM算法是一种迭代算法,它用于含有隐变量的概率模型参数的极大似然估计(或极大后验概率估计)。EM算法的每次迭代由两步组成:E(Expectation)步求期望,M(Maximization)步求极大值,所以这一算法也被称为期望极大算法。

对于EM算法的定性理解可以用这样的一个例子。假设现在有两个硬币A和B,我们要估计掷硬币时它们正面朝上的概率。如果我们知道每次扔出的硬币是A还是B,那么就可以直接用最大似然方法去估计;但是如果我们不知道每次扔出的是哪一枚硬币呢(即隐变量为每次实验扔出的是哪一个硬币)?此时便可以用EM算法去估计它们正面朝上的概率。如下图所示:

EM_example
阅读全文 »

概述

聚类(Clustering)算法是一种无监督学习算法,它试图将数据集中的样本划分为若干个不相交的子集,每一个子集被称为一个“簇(Cluster,或被称为类)”。通过这样的划分,每个簇可能对应于一些潜在的概念,但是这些概念对于聚类算法而言事先是未知的,聚类过程仅仅能够自动形成簇结构,这些簇所对应的概念需要通过人工来把握。

使用数学语言,聚类算法可以描述为如下的形式:假设样本集\(D=\{\boldsymbol{x}_1,\boldsymbol{x}_2,\dots,\boldsymbol{x}_m\}\)包含\(m\)个无标记样本,每个样本\(\boldsymbol{x}_i=\{x_{i1},x_{i2},\dots,x_{in}\}\)是一个\(n\)维的特征向量。聚类算法将样本集\(D\)划分为\(k\)个(\(k\)的值为手动设定)不相交的簇\(\{C_l|l=1,2,\dots,k\}\),其中\(C_{l'}\cap_{l'\ne l}C_l=\empty\)\(D=\cup_{l=1}^{k}C_l\)。如果我们用\(\lambda_j\in \{1,2,\dots,k\}\)表示样本\(\boldsymbol{x}_j\)的“簇标记”(即\(\boldsymbol{x}_j \in C_{\lambda_j}\)),则聚类结果可以使用包含\(m\)个元素的簇标记向量\(\boldsymbol{\lambda}=(\lambda_1,\lambda_2,\dots,\lambda_m)\)表示。聚类算法具有多种不同类型,它们的区别在于将样本划分到不同的簇时所使用的策略不同。

阅读全文 »

概述

定义

决策树模型是一种基本的分类与回归模型,它呈树形结构,可以认为是一系列if-then规则的集合。一棵决策树由结点和有向边组成,结点分成两种:内部结点和叶结点,内部结点表示一个特征或者属性,在分类问题中叶结点表示一个类,而在回归问题中叶结点是一系列数值的集合。用决策树进行分类或者回归时,从根结点开始,对实例的某个特征进行测试,根据测试结果,将实例分配到某个子结点,递归地重复上述过程直至到达叶结点,这个实例的预测值便由叶结点决定。

在分类问题中,决策树还可以表示给定特征条件下类的条件概率分布,这一条件概率分布定义在特征空间的一个划分上。决策树将特征空间划分为互不相交的单元或者区域,并在每个单元定义一个类的概率分布。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。

阅读全文 »

概述

集成学习(Ensemble Learning)指的是通过构建并结合多个学习器来完成学习任务,它的一般方法是先产生一组个体学习器,然后再使用某种策略将它们结合起来。而个体学习器通常是由一个现有的学习算法(如神经网络、决策树、线性回归等等)从训练数据中产生。通过将多个学习器按照某种方式进行结合,往往可以获得比单一学习器更加优越的泛化性能,这一特点对于弱学习器(指的是泛化性能略优于随机猜测的学习器)尤其明显。

根据个体学习器的生成方式不同,可以将集成学习方法大致分为两大类:

  1. 序列化方法:个体学习器之间存在强依赖关系,必须按照序列串行生成,其代表为Boosting;
  2. 并行化方法:个体学习器之间不存在依赖关系,可以同时生成,其代表为Bagging

下面我们分别对Boosting和Bagging这两种方法进行介绍。

阅读全文 »

简介

网络层服务

分组

网络层的首要责任就是分组。源主机从上层协议接收分组,加入一个头部,头部包含了源和目的地址以及其他网络层协议所需要的信息,并将其传给数据链路层。源端不可改变负载内容,除非负载过大不能传递才需要分段。

目的主机从数据链路层接收网络层分组,解封分组并将负载传递到相应的上层协议。如果分组在源端或在沿途的路由器被分段,那么网络层负责等待,直到所有的分组都到达,它同时负责重组分组并将其传到上层协议。

在传递路径上的路由器不可以解封它们接收到的分组,除非它们接收到的分组需要分段。同时,路由器仅仅可以检查地址,不允许改变源端和目的端地址。

阅读全文 »