机器学习-半监督学习
半监督学习 推荐 https://www.huaxiaozhuan.com/统计学习/chapters/12_semi_supervised.html ,太强了,太强了 啥是半监督学习(Semi-supervised Learning) 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习,现实生活中,我们很容易收集无标签数据,但有标签数据并不容易收集,所以我们需要一种模型,以少量标签数据作为参照,利用大量无标签数据进行训练,得到一个更高效的学习器。 也可以这样理解,半监督学习就是监督学习和无监督学习的折中版,而监督学习的核心就是回归,无监督学习的核心是分类,半监督学习一般的目标是找到一个函数迎合(也就是回归任务),然后用分类任务的信息去优化回归函数。 给定有标记样本集合 Dl={(x⃗1,y1),(x⃗2,y2),⋯ ,(x⃗l,yl)}\mathbb D_l=\{(\mathbf{\vec x}_1,y_1),(\mathbf{\vec x}_2,y_2),\cdots,(\mathbf{\vec x}_l,y_l)\}Dl={(x1,y1), ...
机器学习-聚类
聚类 在无监督学习(unsupervised learning)中,训练样本的标记信息是未知的,学习的目的是揭示数据的内在性质及规律,为进一步的数据分析提供基础。这类学习任务中研究最多,应用最广的是聚类(clustering)。 这一章的内容大致如下: 聚类任务:聚类过程是怎样的?聚类有什么用途?聚类的两个基本问题是什么? 性能度量:聚类的目标是什么?聚类性能度量的两大类指什么?各包含哪些度量指标? 距离计算:距离度量需要满足哪些基本性质?怎样度量有序属性?怎样度量无序属性?相似度度量和距离度量有什么区别? 原型聚类:什么是原型聚类?k均值算法是怎样的?学习向量量化算法是怎样的?高斯混合聚类是怎样的? 密度聚类:什么是密度聚类?DBSCAN算法是怎样的? 层次聚类:什么是层次聚类?AGNES算法是怎样的? 聚类任务 聚类(clustering) 定义 聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个簇(cluster)。通常来说每个簇可能对应一些特征,比方说音乐可以聚类成古典音乐、摇滚乐、流行乐等等。但聚类过程仅产生簇结构,簇对应的概 ...
机器学习-集成学习
集成学习 传统机器学习算法 (例如:决策树,人工神经网络,支持向量机,朴素贝叶斯等) 的目标都是寻找一个最优分类器尽可能的将训练数据分开。集成学习 (Ensemble Learning) 算法的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮。 Thomas G. Dietterich 指出了集成算法在统计,计算和表示上的有效原因: 统计上的原因 一个学习算法可以理解为在一个假设空间 H\mathcal HH 中选找到一个最好的假设。但是,当训练样本的数据量小到不够用来精确的学习到目标假设时,学习算法可以找到很多满足训练样本的分类器。所以,学习算法选择任何一个分类器都会面临一定错误分类的风险,因此将多个假设集成起来可以降低选择错误分类器的风险。 计算上的原因 很多学习算法在进行最优化搜索时很有可能陷入局部最优的错误中,因此对于学习算法而言很难得到一个全局最优的假设。事实上人工神经网络和决策树已经被证实为是一 个NP 问题。集成算法可以从多个起始点进行局部搜索,从而分散陷入局部最优的风险。 ...
机器学习-多标签学习
多标签学习 主要摘自http://palm.seu.edu.cn/zhangml/files/mla11-mll.pdf,部分参考https://link.springer.com/referenceworkentry/10.1007/978-1-4899-7687-1_910 推荐一篇知乎文章,也还不错,可惜我看到的时候笔记已经写完了。 Structure of Learning System 问题定义 X=Rd\mathcal{X} = \mathbb{R}^{d}X=Rd 表示 ddd 维的输入空间,Y={y1,y2,…,yq}\mathcal{Y} =\{ y_{1},y_{2},\ldots,y_{q}\}Y={y1,y2,…,yq} 表示带有 qqq 个可能标签的标签空间。 训练集 D={(xi,Yi)∣1≤i≤m}\mathcal{D} =\{ (\boldsymbol{x}_{i},Y _{i})\mid 1 \leq i \leq m\}D={(xi,Yi)∣1≤i≤m} ,mmm 表示训练集的大小,有时候会省略。 任务就是要学习一个多标签分类器 h:X↦ ...
机器学习-强化学习
强化学习 强化学习的主要任务就是通过在环境中不断地尝试,根据尝试获得的反馈信息调整策略,最终生成一个较好的策略π,机器根据这个策略便能知道在什么状态下应该执行什么动作。 我觉得比较重要的几个观点: RL is learning from trial and error interaction with the world. RL is training by rewards and punishments. 增强学习的研究建立在经典物理学的范畴上,也就是没有量子计算也没有相对论。这个世界的时间是可以分割成一个一个时间片的,并且有完全的先后顺序,因此可以形成这样的状态,动作和反馈系列。这些数据样本是进行增强学习的基础。 另一个很重要的假设就是 「上帝不掷筛子!」 在增强学习的世界,我们相信如果输入是确定的,那么输出也一定是确定的。试想一下,有一个机械臂在练习掷筛子,以掷出 6 点作为目标。但是如果无论机械臂如何调整其关节的角度及扭矩,掷出的点数永远是随机的,那么无论如何也不可能通过算法使机械臂达成目标。因此,增强学习算法要有用,就是相信在增强学习中每一次参数的调整都会对世界造成确定性的 ...
机器学习-神经网络
神经网络 在机器学习中,神经网络(neural networks)一般是指“神经网络学习”。所谓神经网络,目前用得最广泛的一个定义是“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的反应”。它是一种黑箱模型,解释性较差,但效果很好。目前已有一些工作尝试改善神经网络的可解释性。 这一章的内容大致如下: 神经元模型:什么是神经元模型?它的构造是怎样的?激活函数是什么?如何组建神经网络? 感知机与多层网络:感知机的构造是怎样的?感知机不能解决什么问题?多层网络是怎样的?多层前馈神经网络有什么特点? 误差逆传播算法:BP算法如何调整参数?有什么值得注意的地方?标准BP算法和累积BP算法有什么区别?如何设置隐层神经元的个数?如何处理BP神经网络的过拟合问题? 全局最小与局部极小:什么是全局最小?什么是局部极小?如何跳出局部极小? 其他常见神经网络:有哪些常见的神经网络?它们各自有什么特点?什么是竞争型学习?可塑性、稳定性、增量学习、在线学习各指什么?(没讲) 深度学习:深度学习是如何提升模型容量的?如何训练深度神经网络?怎么理解深度学 ...
机器学习-线性模型
线性模型 给定一个包含d个属性的实例 令梯度为零可以得到x=(x1;x2;...;xd)令梯度为零可以得到\mathbf{x} = (x_1;x_2;...;x_d)令梯度为零可以得到x=(x1;x2;...;xd),线性模型(linear model)的原理是学得一个可以通过属性的线性组合来进行预测的函数,也即: f(x)=w1x1+w2x2+...+wdxx+bf(x) = w_1x_1 + w_2x_2 + ... + w_dx_x + b f(x)=w1x1+w2x2+...+wdxx+b 一般写作向量形式:f(x)=wTx+bf(x) = w^Tx + bf(x)=wTx+b。其中权重向量 www和偏置项 bbb就是我们需要学习的参数。 线性模型有良好的可解释性,每个属性对应的权重可以理解为它对预测的重要性。并且建模较为简单,许多功能更为强大的非线性模型都是在线性模型的基础上引入层级结构或高维映射得到的。 线性回归 离散属性连续化 由于不同模型对数据的要求不一样,在建模之前,我们需要对数据做相应的处理。一般的线性回归模型要求属性的数据类型为连续值,故需要 ...
机器学习-KNN
KNN KNN简介 KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。 思路是:如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。 KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 该算法假定所有的实例对应于N维欧式空间 A^nÂ_nA^n 中的点。通过计算一个点与其他所有点之间的距离,取出与该点最近的K个点,然后统计这K个点里面所属分类比例最大的,则这个点属于该分类。 该算法涉及3个主要因素:实例集、距离或相似的衡量、k的大小。 一个实例的最近邻是根据标准欧氏距离定义的。更精确地讲,把任意的实例x表示为下面的特征向量: <a1(x),a2(x),...,an(x)><a_1(x),a_2(x),...,a_n(x)> <a1(x),a2(x),...,an(x)> 其中 ar(x)a_r(x)ar(x) 表示实例 xxx 的第 rrr 个属性值。那么两个实例 xix_i ...
机器学习-SVM
SVM 很多摘自 https://tangshusen.me/2018/10/27/SVM/ 后期整合其他博客与学校课程PPT SVM是什么 支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两日函数求导并令导数个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。 简单点讲,SVM就是一种二类分类模型,他的基本模型是的定义在特征空间上的间隔最大的线性分类器,SVM的学习策略就是间隔最大化。 直观理解 我们先来看看下面这个图 图中有分别属于两类的一些二维数据点和三条直线。如果三条直线分别代表三个分类器的话,请问哪一个分类器比较好? 我们凭直观感受应该觉得答案是H3。首先H1不能把类别分开,这个分类器肯定是不行的 ...
机器学习-决策树
决策树 这一章的内容大致如下: 基本流程:决策树是如何决策的?决策树学习的目的是什么?如何生成一颗决策树? 划分选择:怎样选择最优划分属性?有哪些判断指标?具体是怎样运作的? 剪枝处理:为什么要剪枝?如何判断剪枝后决策树模型的泛化性能是否提升?预剪枝和后剪枝是怎样工作的?有什么优缺点? 连续与缺失值:如何把连续属性离散化?如何基于离散化后的属性进行划分?和离散属性有何不同?如何在属性值缺失的情况下选择最优划分属性?给定划分属性,如何划分缺失该属性值的样本? 多变量决策树:决策树模型的分类边界的特点是怎样的?多变量决策数是如何定义的?又是如何工作的? 基本流程 决策树(decision tree)是一种模仿人类决策的学习方法。举个例子,比方说买电脑,我们首先看看外观帅不帅气,然后再看看性能怎么样,还得看看价格如何,最终经过一系列的判断做出是否购买电脑的决策。 一棵决策树可以分成三个部分:叶节点,非叶节点,分支。叶节点对应决策结果,也即分类任务中的类别标记;非叶节点(包括根节点)对应一个判定问题(某属性=?);分支对应父节点判定问题的不同答案(可能的属性值),可 ...
机器学习-贝叶斯分类器
贝叶斯分类器 基础知识:什么是贝叶斯定理 这现实生活中的问题,大部分都是“逆概率”问题。因为生活中绝大多数决策面临的信息都是不全的,我们手中只有有限的信息。既然无法得到全面的信息,我们就只能在信息有限的情况下,尽可能做出一个好的预测。 比如天气预报说,明天降雨的概率是30%,这是什么意思呢?我们无法像计算频率概率那样,重复地把明天过上100次,然后计算出大约有30次会下雨(下雨的天数/总天数),而是只能利用有限的信息(过去天气的测量数据),用贝叶斯定理来预测出明天下雨的概率是多少。 同样的,在现实世界中,我们每个人都需要预测。想要深入分析未来、思考是否买股票、政策给自己带来哪些机遇、提出新产品构想,或者只是计划一周的饭菜。 贝叶斯定理就是为了解决这些问题而诞生的,它可以根据过去的数据来预测出未来事情发生概率。贝叶斯定理的思考方式为我们提供了有效的方法来帮助我们做决策,以便更好地预测未来的商业、金融、以及日常生活。 贝叶斯定理: P(A∣B)=P(A)P(B∣A)P(B)P(A|B)=P(A)\dfrac{P(B|A)}{P(B)} P(A∣B)=P(A)P(B)P(B∣A) 比如我经 ...
机器学习-模型评估与选择
模型评估与选择 误差 在分类任务中,通常把错分的样本数占样本总数的比例称为错误率(error rate)。比如m个样本有a个预测错了,错误率就是a/m;与错误率相对的有精度(accuracy),或者说正确率,数值上等于 1−错误率1-错误率1−错误率。 更一般地,通常会把模型输出和真实值之间的差异称为误差(error)。在训练集上的误差称为训练误差(training error)或者经验误差(empirical error)。而在新样本上的误差则称为泛化误差(generalization error)。我们希望模型的泛化误差尽可能小,但现实是,我们无法知道新样本是怎样的,所以只能尽可能地利用训练数据来最小化经验误差。 但是否经验误差小,泛化误差就一定小呢?这不是一定的,如果模型相比训练数据来说过于复杂,那就很有可能把训练数据本身的一些特点当作整个样本空间的特点,从而使得在训练数据上有很小的经验误差,但一旦面对新样本就会有很大误差,这种情况叫做过拟合(overfitting)。相对的是欠拟合(underfitting)。 欠拟合很容易避免,只要适当地增加模型复杂度(比方说增加神经网络的层 ...
机器学习-绪论
绪论 机器学习的定义 人可以通过经验学习,比方说“朝霞不出门,晚霞行千里”,就是通过经验得来的知识。获得知识后,即使在不同的地点,不同的时间,看到不同的霞,我们也能作出正确的判断。那么,机器是否也能学习并利用经验,从而对一些未出现过的情况,在不通过显式编程(人作出判断并告诉机器)的情况下也能作出正确的预测呢?答案是可以的,这就是机器学习。 对于机器来说,经验是通过数据传达的。机器学习的主要研究内容就是从数据中产生模型的算法,也即学习算法。Mitchell给出一个更为形式化的定义,假设我们用P来表示程序处理任务T时的性能,如果程序通过利用经验E提高了在任务T上的性能,则称该程序对E进行了学习。 在本书中,模型泛指所有从数据中学得的结果,在别的文献中,也有对模型和模式作出区分的,模型指学得的全局性结果(比如一棵决策树),模式指学得的局部性结果(比如一条规则)。 另一本经典教材的作者Mitchell给出了一个形式化的定义,假设: P:计算机程序在某任务类T上的性能。 T:计算机程序希望实现的任务类。 E:表示经验,即历史的数据集。 若该计算机程序通过利用经验E在任务T上获得了性能P的改善 ...
How-To-Use-Hexo Hexo建站小教程
How To Use Hexo:Hexo建站小教程 使用Hexo 安装Git Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,帮助我们把本地网页上传到Github。 win版本点击此处进入Git官网下载相应版本,默认安装即可。 参考资料:《如何在windows下安装GIT》 (By 俊雨廷休) 检验是否安装成功:cmd中输入并回车 1git --version 出现git版本即为成功。 Github 如果没有,点击此处进入Github官网点击 Sign Up 注册账户。 创建git仓库 登录Github创建一个仓库 如下图所示,输入自己的项目名字,后面一定要加.github.io后缀,README初始化也要勾上。名称一定要和你的Github名字完全一样,比如你github名字叫A,那么仓库名字一定要是A.github.io。 连接Github与本地 右键单击鼠标,点击 Git Bash Here输入以下命令: 12git config --global user.name "Name"git config --gl ...
协变 (Covariant)、逆变 (Contravariant) 与抗变 (Invariant)
协变 (Covariant)、逆变 (Contravariant) 与抗变 (Invariant) 定义 我们会记起里氏替换原则,对于任意类型关系而言,子类型可以胜任父类型的任何场景。 数组情况 以数组为例,我们有Animal以及继承自Animal 的 Cat和Dag。 协变:一个List<Cat>也是一个List<Animal> 逆变:一个List<Animal>也是一个List<Cat> 以上二者均不是则为不变 如果要避免类型错误,且数组支持对其元素的读、写操作,那么只有第3个选择是安全的。List<Animal>并不是总能当作List<Cat>,因为当一个客户读取数组并期望得到一个Cat,但List<Animal>中包含的可能是个Dog。所以逆变规则是不安全的。 反之,一个List<Cat>也不能被当作一个List<Animal>。因为总是可以把一个Dog放到List<Animal>中,也就是说,我们可能尝试将Dog写入这个被当做List<Anim ...
OS课设
大水老师,老师人超级好,97 OS课设 环境配置 老师给了安装教程PPT,并不麻烦。 在apt install前,确认你的虚拟机网络可用。 关于虚拟机的网络配置,我参考了https://zhuanlan.zhihu.com/p/130984945,整个教程我也复制整理了一遍放在文末。 Linux下使用CLion进行Debug 首先打开项目:将以下两个Makefile进行Associte With File Type,定义为GNU MakeFile文件,记得定义第一行匹配模式。完成后: MakeFile.common中会报错,将如下冒号替换成空格: 然后打开具体的lab文件夹,会发现有报错,在Seetings中找到MakeFile,删掉Build target的all,选OK即可。 对于Configurations: 然后就可以打断点用debug模式运行了。 Lab1:Road Map Through Nachos 1234567891011121314151617181920212223242526272829303132333435363738394041424344 ...
Dart-Mixin是什么
Dart-Mixin是什么 Mixin 是一种在多个类层次结构中重用代码的方法。mixin是面向对象程序设计语言中的类,其他类可以访问mixin类的方法、变量而不必成为其子类。Mixin的作用就是在多个类层次结构中重用类的代码,在类中混入其他功能,来增强代码的复用能力。可以使用with关键字将多个mixins放入同一个类中,而且dart对这个数量没有作任何限制。 举例 123456789101112131415161718192021mixin TestMixin { void test() { print('test'); } int testInt = 1; void test2();}class Test with TestMixin { @override test2() { print('test2'); }}void main() { Test().test(); // test print(T ...
KalmanFilters-theory-and-demo
卡尔曼滤波:理论与实践 定义与应用场景 卡尔曼滤波(Kalman filter)是一种高效的自回归滤波器,它能在存在诸多不确定性情况的组合信息中估计动态系统的状态。对于这个滤波器,我们几乎可以下这么一个定论:只要是存在不确定信息的动态系统,卡尔曼滤波就可以对系统下一步要做什么做出有根据的推测。即便有噪声信息干扰,卡尔曼滤波通常也能很好的弄清楚究竟发生了什么,找出现象间不易察觉的相关性。因此卡尔曼滤波非常适合不断变化的系统,它的优点还有内存占用较小(只需保留前一个状态)、速度快,是实时问题和嵌入式系统的理想选择。 样例下的卡尔曼滤波推导 举个栗子:你造了一个可以在树林里四处溜达的小机器人,为了让它实现导航,机器人需要知道自己所处的位置。 也就是说,机器人有一个包含位置信息和速度信息的状态 x⃗k\vec x_kxk:x⃗k=(p⃗,v⃗)\vec x_k=(\vec p,\vec v)xk=(p,v) ,其中p代表位置,v代表速度,或者更通俗的,可以是任意描述系统状态的两个向量(当然也可以是多个) 我们的小机器人装有GPS传感器,定位精度10米。虽然一般来说这点精度够用了,但我们 ...