机器学习实验
机器学习实验 贝叶斯分类器在鸢尾花数据集的实现 最简单的,我们选用朴素贝叶斯分类来实现。这部分原理与公式我在课程笔记中有提到。 笔记地址 知识回顾 基本知识:贝叶斯定理 首先,贝叶斯定理: P(c ∣ x)=P(x ∣ c)P(c)P(x)P(c\ |\ \mathbf{x}) = \frac{P(\mathbf{x}\ |\ c) P(c)}{P(\mathbf{x})} P(c ∣ x)=P(x)P(x ∣ c)P(c) 在贝叶斯定理中,每个概率都有约定俗成的名称: P(c ∣ x)P(c\ |\ \mathbf{x})P(c ∣ x) 是类标记 ccc 相对于样本 x\mathbf{x}x 的条件概率,也由于得自 x\mathbf{x}x 的取值而被称作 ccc 的后验概率。 P(x ∣ c)P(\mathbf{x}\ |\ c)P(x ∣ c) 是样本 x\mathbf{x}x 相对于类标记 ccc 的类条件概率(class-conditional probability),或称为似然(likelihood),也由于得自 ccc 的取值而被称作 x\mathbf{x}x 的 ...
机器学习-代价敏感学习
代价敏感学习 Background 传统学习中,我们的目标通常是错误率最低,这默认了不同错误分类的代价是一样的,但实际上很多情况下把positive判断为negative跟把把negative判断为positive的代价是不一样的。也就是说: 如果在学习时考虑错误分类的代价,那么我们就可以称之为是代价敏感学习。我们最终的目标也变成最小化总代价。 对于 K分类问题,我们有类似于如下的 K×KK\times KK×K 代价矩阵,C(i,j)C(i,j)C(i,j) 指的是将一个实际上属于 jjj 的样本分类为 iii 所带来的代价。 [C(1,1)C(1,2)...C(1,K)C(2,1)C(2,2)...C(2,K)⋮⋮⋱⋮C(K,1)C(K,2)...C(K,K)]\left[ \begin{matrix} C(1, 1) & C(1, 2) & ...&C(1, K) \\ C(2, 1) & C(2, 2) & ...&C(2, K) \\ \vdots & \vdots & \ddots & \vdots ...
机器学习-特征选择和特征抽取
特征选择和特征抽取 特征选择和降维(特征提取)有着些许的相似点,这两者达到的效果是一样的,就是试图去减少特征数据集中的属性 (或者称为特征) 的数目;但是两者所采用的方式方法却不同:降维的方法主要是通过属性间的关系,如组合不同的属性得到新的属性,这样就改变了原来的特征空间;而特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。 特征抽取(Feature Extraction):Creatting a subset of new features by combinations of the exsiting features. 也就是说,特征抽取后的新特征是原来特征的一个映射。 特征选择(Feature Selection):choosing a subset of all the features(the ones more informative)。也就是说,特征选择后的特征是原来特征的一个子集。 特征选择 我们希望获取尽可能小的特征子集,不显著降低分类精度、不影响分类分布以及特征子集应具有稳定、适应性强等特点。 为什么要做特征选择 在机 ...
机器学习-半监督学习
半监督学习 推荐 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 ...