- 博客(46)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 Shark源码分析(十二):线性SVM
Shark源码分析(十二):线性SVM关于svm算法,这个在我关于机器学习的博客中已经描述的比较详实了,这里就不再赘述。svm主要有三种类型,这里我所介绍的是线性svm算法的代码。相较于使用核函数的svm算法,代码的整体框架应该是一样的,只是在对偶问题的求解上所使用的方法可能是不一样的。LinearClassifier类这个类所表示的是算法的决策平面,是一个多分类的线性分类模型。定义在<includ
2017-01-26 11:55:08
1372
原创 Shark源码分析(十一):随机森林算法
Shark源码分析(十一):随机森林算法关于这个算法的介绍,可以参看我之前关于集成算法的博客。因为Shark中关于决策树算法只实现了CART算法,所以随机森林算法中也只包含了CART算法。如果你已经看过了我之前写的关于CART算法源码分析的博客,看到后面就会发现它与随机森林算法的代码其实差不多。只是在选择最优划分属性时多了一个随机选取候选集的过程。这也是随机森林算法的一大特点。因为CART算法既可以
2017-01-26 11:54:07
2143
3
原创 Shark源码分析(十):KNN算法
Shark源码分析(十):KNN算法关于这个算法,我之前已经有博客详细介绍过。虽然说这个算法看上去非常的简单,但是在搜索k个最近邻居数据点时,还是非常具有技巧性的。这里还是有必要再次强调一下。如果输入数据的维度不高,可以使用树形结构(kd树)来加快查找的速度。如果输入的维度较高,则利用树型结构的速度与计算两两数据间距离的速度并不会有太大的差别。之后我们要介绍的代码也是利用kd树来组织的。在计算距离时
2017-01-26 11:53:01
1186
原创 Shark源码分析(九):朴素贝叶斯算法
Shark源码分析(九):朴素贝叶斯算法关于这个算法,我之前也有写过博客来介绍过。但是Shark在实现时,它只考虑到了输入为连续属性值的情况,而没有考虑到离散属性值的情况。至于连续属性值的情况该如何计算,可以参考下我的博客。AbstractDistribution类既然我们需要计算分布情况,那我们需要有一个类来表示分布。AbstractDistribution类就是表示所有分布的基类,该类定义在文件
2017-01-26 11:52:19
973
原创 Shark源码分析(八):CART算法
Shark源码分析(八):CART算法决策树算法是机器学习中非常常用的一种算法。在我关于机器学习的博客中有对决策树算法进行详细的介绍。在Shark中,只实现了CART这一种类型的决策树,它可以用于分类任务或是回归任务中。在这里我们只对其中有关分类任务的部分代码进行分析。CARTClassifier类这个类用于定义决策树,该类定义在文件<include/shark/Models/Trees/CARTC
2017-01-26 11:51:27
974
1
原创 Shark源码分析(七):神经网络
Shark源码分析(七):神经网络对于神经网络这里应该就不用叙述了吧,之后可能会写一些关于深度学习方面的博客。这里要介绍的神经网络,名字应该叫做前馈神经网络(Feed-Forward Networks)。至于这个神经网络为什么要叫前馈,是因为这个网络在拓扑结构上不含有反向边,也就是没有环。而不是指的信号不能反向地传递。对于单个神经元,Shark提供了几种激活函数以供选择:Logistic函数,输出
2017-01-26 11:50:05
1010
原创 Shark源码分析(六):k-means算法
Shark源码分析(六):k-means算法k-means算法是原型聚类算法中一个非常典型的算法。关于聚类算法,我之后应该会在博客中进行详细说明。对于整个聚类算法来说,可以分为两类:硬聚类与软聚类。对于硬聚类,每一个数据点只能属于某一个簇。对于软聚类来说,则没有这一限制。首先还是来看一下整个聚类算法基类。ClusteringModel类ClusteringModel类定义在<include/shar
2017-01-26 11:48:13
1068
原创 Shark源码分析(五):线性回归算法与Lasso回归
Shark源码分析(五):线性回归算法与Lasso回归为什么上一篇还是三,这一篇就跳到五了呢?其实我们原来提到过:方法=模型+策略+算法方法 = 模型+策略+算法这里的模型与算法我们之前都已经提到过了,虽然只是介绍了一个基类,并没有涉及到其具体的实现。在这里我们就会揭开其真正面目了。『策略』我们还没有介绍过,其实就是目标函数,在前面一些较为简单的算法中并没有涉及到这块。为了整个逻辑的完整性,我还是打
2017-01-26 11:41:27
1374
原创 Shark源码分析(四):目标函数及其优化
Shark源码分析(四):目标函数及其优化我们之前反反复复地强调过,Shark的设计策略是:方法 = 模型 + 策略 + 算法。这里的策略指的就是目标函数。我们的目标是从假设空间中选取最优的模型,需要考虑的是按照什么样的准则学习或选择最优的模型。选择一个好的目标函数形式,也是算法最终取得好的效果的一个重要组成部分。在确定了目标函数之后,我们还需要考虑的就是如何对其进行优化。在Shark中,将定义目标
2017-01-26 11:40:14
1018
原创 Shark源码分析(三):数据预处理之正则化
Shark源码分析(三):数据预处理之正则化在机器学习算法中,获取训练数据后首先要做的不是将输入投入训练方法中进行学习,而是应该对数据进行预处理。预处理过程输出数据的质量能够对之后算法的结果起着至关重要的作用。预处理过程含有非常多的操作,在我目前阅读代码的过程中只碰到了正则化这一过程。那我们就先来讨论正则化,如果之后再碰到了其他的方法再补充。Shark将对输入数据进行正则化的模型也看作是一个线性模型
2017-01-26 11:37:47
802
原创 Shark源码分析(一):数据的存储(2)
Shark源码分析(一):数据的存储(2)上一篇博客中说到了实际存储数据的SharedContainer类,但是联系到实际中输入的数据可能会有不同的形式,比如说无标签数据和有标签数据,无法都使用SharedContainer类来存储,否则就无法方便地获取数据对应的标签。所以Shark将SharedContainer类封装在了一个名为Data的类中。之后又有两个类,UnlabeledData和Labe
2017-01-26 11:36:57
819
原创 Shark源码分析(二):模型与训练方法
Shark源码分析(二):模型与训练方法之前两篇博客都说的是整个架构底层的东西,如何来存放输入的数据,以便于在计算时进行加速。而这一篇呢,会向上走一点,来看一看如何将模型进行抽象。在『统计机器学习』中有提到这样一句话,『统计学习方法是由模型、策略和算法构成的』。Shark正是按照这种划分来构建整个库的架构。在监督学习过程中,模型就是所要学习的条件概率分布或是决策函数。Shark是将几个比较类似的算法
2017-01-26 11:33:08
1089
原创 Shark源码分析(一):数据的存储(1)
Shark源码分析(一):数据的存储(1)Shark是一个使用C++开发的机器学习库,里面还有一些深度学习的算法例如:自编码器、限制玻尔兹曼机、循环神经网络等。对于熟悉机器学习、深度学习算法的流程还是很有帮助的,同时能够增强你对于C++的理解能力,特别是对于模板的应用能力。源码的可读性我觉得也比较不错,就是在有一些注释写的不是非常清楚。该项目的主页是http://image.diku.dk/shar
2017-01-26 11:32:17
1612
1
原创 隐式语义分析
隐式语意分析隐式语义分析(Latent Semantic Analysis,LSA),也被称为隐式语义索引(Latent Semantic Indexing,LSI),是一种不同于关键词检索的搜索引擎解决方案,其检索结果的实际效果更接近于人的自然语言,在一定程度上能够提高搜索结果的相关性。原始方法的缺点从自然语言的角度,大部分词具有一词多义的特点,机器无法确定在何环境下使用何种词义,这就导致了搜索结
2017-01-26 10:45:54
4872
1
原创 非负矩阵分解
非负矩阵分解(Non-Negative Matrix Factorization)这个问题是我在进行文本的主题提取时遇到的。处理的矩阵是文本数据的tf-idf矩阵。如果你使用的词向量,也可以是词向量经过组合之后得到的矩阵。我们的目标是要对这个矩阵进行因式分解,即找到两个更小的矩阵,使得二者相乘以得到原来的矩阵。该矩阵分解的特殊之处就在于,它要求两个小矩阵中的元素都是非负的。这个要求在特定的问题中是有
2017-01-26 10:44:22
1275
原创 关键词抽取与自动文摘
关键词抽取与自动文摘在自然语言处理中对于关键词抽取与自动文摘这两个主题,有着多种多样的方式去解决它们,这里将介绍一种叫做TextRank的方法,就可以解决这两个问题。我将结合具体的代码,试图将算法解释地更加清楚些。论文『TextRank: Bringing Order into Texts』中首次提出了TextRank方法,如果想全面了解下这个方法,还是仔细看下这篇论文。当你一看到TextRank这
2017-01-26 10:42:59
4403
原创 jieba中的分词方法
jieba中的分词方法最近刚好在看一些自然语言处理方面的东西,写的一些代码中也用到了jieba这个库,感觉从效果上来说还是可以的。就顺便把分词这一块的代码也给看了(关键词抽取部分的代码已经在之前的博客中提过了),接下来跟大家分享下其中的一些方法。首先是入口函数:re_han_default = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._]+)", re.U)
2017-01-26 10:39:10
1639
原创 机器学习算法(五):支持向量机(SVM)
支持向量机(Support Vector Machine,SVM)支持向量机是一种二分类模型。它的学习策略是间隔最大化,可以形式化为一个求解凸二次规划的问题,支持向量机的学习算法是求解凸二次规划的最优化问题。支持向量机的模型包括三种类型:线性可分支持向量机、线性支持向量机、非线性支持向量机。当训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,也即线性可分支持向量机;当训练数据近似可分时,通过
2017-01-26 10:35:02
2125
原创 机器学习算法(九):Apriori算法
机器学习算法(九):Apriori算法Apriori算法是一种关联分析方法,用于发现隐藏在大型数据集中有意义的联系。所发现的联系可以使用关联规则和频繁项集来表示。一些基本概念项集令I={i1,i2,…,id}I = \{i_1, i_2, \dots , i_d\}是购物篮数据所有项的集合,而T={t1,t2,…,tN}T = \{t_1, t_2, \dots , t_N\}是所有事务的集合。每个
2017-01-25 17:21:09
3575
原创 评估方法、性能度量和比较检验
机器学习中模型的评估方法、性能度量和结果的检验方法在对算法进行训练时,我们必须要有相应的数据。我们并不能在所有数据上进行训练,否则就没有数据来对算法的性能进行验证了。这就涉及到训练集与测试集划分的问题,即评估方法。算法在训练好了之后,需要将其在数据集上进行测试,如何来衡量测试的结果,这就是性能的度量。有了实验评估方法和性能度量,看起来就能对学习算法的性能进行评估比较了:先使用某种实验评估方法测得学习
2017-01-25 17:18:19
11003
1
原创 机器学习解决问题的步骤
机器学习解决问题的步骤针对任何一个打算由机器学习算法来解决的问题,都有一种『套路』存在,只要按照这个模板『按部就班』就能够得到一个结果。就跟一个产品的生产流水线是一个道理。但是得到结果的好坏跟你是否是一个『熟练工』有很大的关系。因为在解决具体的问题中有许多的tricks对于结果的提升有所帮助。整个『套路』能分为以下5个步骤:定义问题对数据进行预处理算法的抽查对结果进行优化结果展示这里非常
2017-01-25 17:14:19
12675
原创 机器学习算法(八):EM算法
EM(Expectation Maximization)算法概率模型有时既含有观测变量,又含有隐变量或潜在变量。如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法估计模型参数。但是,当模型含有隐变量时,就不能简单地使用这些估计方法。EM算法就是含有隐变量的概率模型参数的极大似然估计法,或极大后验概率估计法。一般地,用Y表示观测随机变量的数据,Z表示隐随机变量的数据
2015-08-15 16:52:37
1942
原创 visual_studio插件开发中的一些问题
Visual Studio插件开发中的一些问题写在最前这篇文章与上一篇文章之间还是有一些关系的,我们需要在之前工作的基础之上,开发VS插件,使其能够使用Clang的静态检查的功能。不知道是不是因为VS上的插件不是很多的原因,网上关于VS插件开发的内容也并不是很多,当然我这是与Eclipse相比较。所以写这篇文章的目的是与大家分享一下我在开发VS插件中碰到的一些问题。当然,这个VS插件主要的功能并不是
2015-07-25 16:50:34
895
原创 windows平台下clang_checker的使用
Windows平台下Clang Checker的使用写在最前为什么要写这篇博客呢,因为最近的一个项目涉及到了Clang编译器在Windows平台下的使用,我们原来都是在Linux平台下来对Clang编译器来做工作的,一旦涉及到了平台迁移的问题,可能就会出现很多意想不到的问题。果不其然,我们用了两个星期的时间才不算特别完美的解决了这个问题。就是希望将我们的做法都写出来,让以后想要使用的人少走一些弯路。
2015-07-18 10:57:17
3001
原创 机器学习算法(七):朴素贝叶斯方法
机器学习算法(七):朴素贝叶斯方法朴素贝叶斯方法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯方法实际上学习到生成数据的机制,所以属于生成模型。条件独立假设是用于分类的特征在类确定的条件下都是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时
2015-07-18 10:37:22
1498
原创 机器学习几个重要概念
几个重要概念监督学习与非监督学习统计学习的算法可以分为以下几个类别:监督学习、非监督学习、半监督学习以及强化学习。监督学习的输入数据都有对应的类标签或是一个输出值,其任务是学习一个模型,使模型能够对任意给定的输入,对其相应的输出做出一个好的预测。非监督学习就是没有对应的类标签或是输出值。学习中并没有任何标准来告诉你,某个概念是否正确,需要学习器自身形成和评价概念。就是自动地从数据中挖掘出结构信息或是
2015-07-17 20:07:38
5004
原创 机器学习算法(六):随机森林
随机森林算法在之前的博客中我们已经介绍过了集成方法中的一大类Boosting方法,这里我们就来介绍另一类的Bagging方法,以及其的一个著名实例随机森领算法。Bagging算法Boosting算法使得不同的基学习器具有较大差异的做法是改变训练数据的权重。另一种做法是对训练数据进行采样,产生出若干不同的子集,再从每一个训练子集中训练出一个基学习器。这样,由于训练数据的不同,获得的基学习器可望具有较大
2015-06-10 22:26:32
4216
1
原创 机器学习算法(四):KNN算法
KNN算法K近邻算法(k-nearest neighbor,k-NN)是一种分类与回归的方法。K近邻法的输入为实例,输出为实例的类别,这里的类别可以取多类。分类时,对于新的实例,根据k个最近邻的训练数据的类别,通过多数表决的方法进行预测。K近邻算法实际上是利用训练数据对输入空间进行划分,并作为其分类的模型。前面我们也有提到,k邻近是一种分类与回归的方法,但是接下来我们要讨论的是分类的这一方面。而对于
2015-05-27 16:54:45
1870
原创 机器学习算法(三):Adaboost算法
Boosting算法集成学习集成学习的一般结构:先产生一组个体学习器,再使用某种策略将它们结合起来。个体学习器通常由一个现有的算法从训练数据中产生。集成学习既可以包含相同类型的个体学习器,也可以包含不同类型的个体学习器。集成学习通过将多个学习器进行结合,常可以获得比一般学习器显著优越的泛化性能。这对弱分类器(指泛化性能略优于随机猜测的学习器)尤为明显,因此集成学习的很多理论研究都是针对弱分类器进行的
2015-05-24 22:04:53
1894
原创 机器学习算法(二):决策树算法
决策树算法首先我们来看一个例子,这个例子能很好地反映出整个算法的具体流程。一个例子某位母亲给自己闺女物色了个男朋友,于有了下面这段对话:女儿:多大年纪了?母亲:26。女儿:长得帅不帅?母亲:挺帅的。女儿:收入高不?母亲:不算特别高,中等情况吧。女儿:是不是公务员?母亲:是,在税务局上班女儿:那好,见个面吧。这个女孩的决策过程就是典型的分类决策过程。相当于通过年龄,长相,收入和是否是公
2015-05-22 10:03:25
1775
原创 机器学习算法(一):聚类算法
聚类算法聚类算法是属于无监督学习算法中非常常用的一种。算法使用的训练数据中的标签信息是未知的,目标是通过对无标记的训练样本的学习来揭示内在的性质和规律。聚类过程能够自动地形成簇结构,但是簇对应的概念语意需要由使用者来决定。聚类既能作为一个单独的过程,用于寻找数据的内在分布结构,也可以作为分类等其他学习任务的前驱过程。性能度量对于任何一个算法,我们都需要有一个性能指标来衡量算法结果的优劣。之前已经有一
2015-05-21 16:17:28
6561
原创 Deep Learning 读书笔记(十五):Deep Learning from Temporal Coherence in Video
原来不是说好的不做视频与图像改做NLP方向了吗,怎么这篇又是关于原来方面的。因为突然想起了原来的一个点子,是关于卷积神经网络学习算法的,希望通过这个算法使得CNN能够对视频数据进行学习。我是希望先琢磨下这个想法的可行性,然后把它交给师弟师妹们来做,也算是尽了当师兄的责任,以及对原来组员的一个交代吧。所以之后的几篇博客可能还是关于这个方向的。 本篇文章的主要工作是将时序性数据中的时
2015-03-07 09:33:55
1537
原创 Deep Learning 读书笔记(十四):Natural Language Processing (almost) from Scratch
本篇文章针对多种自然语言处理的任务:part-of-speech tagging, chunking, named entity recognition, semantic role labeling 建立了一个统一的模型以及相应的学习算法。模型抛弃了原来那种 man-made 的输入特征以及忽略掉了很多的先验知识,而是从大量的无标签的训练数据中学习到更加本质的特征。 试想,如果
2015-02-20 19:50:43
4475
原创 Deep Learning 读书笔记(十三):Improving Word Representations via Global Context and Multiple Word Prototype
词向量的表示不仅是作为算法的输入还是作为单词的一种特征表示在自然语言处理的相关问题中都被证明是有效的。然而传统的词向量模型是建立在局部的文本之上的,全部的文本往往能够提供更加丰富的信息。而且每一个单词,只有唯一的一种表示,这对于处理多义词来说存在着问题。这篇文章就是针对这两个问题提出了一种新的模型,希望结合局部和全局的语义信息来学习到更好的词向量的表示,同时针对同音多义词和一词多义的情况,为每个单
2015-02-15 19:23:00
1421
原创 Deep Learning 读书笔记(十二):A Neural Probabilistic Language Model
寒假在家又捡起好久不写的博客。这几天断断续续的在改自己写的第一篇论文,做的是有关图像处理方面的东西。打算在这篇文章完了之后,这方面就告一段落了吧,对这方面不是很能够提起兴趣。打算之后去做自然语言处理吧,这不是最近很多大牛都开始往这个方向转型嘛,就当是随大流了。今年也是捡起来原来看的几篇文章,把深度学习在自然语言处理方面的方法,从基础开始再回顾一遍。今天看的这篇文章呢,也算是拉开了深度学习在NLP方
2015-02-13 20:06:38
3795
1
原创 Deep Learning读书笔记(十一):Unsupervised learning of visual invariance with temporal coherence
在视频流中,natural scene包含有非常丰富的visual transformation。本篇文章的主要工作就是利用非监督型学习算法和时间相干性(temporal coherence)来从视频中学习到视觉不变性。然后利用学习好的模型来进行图片分类任务。 文章是建立了一个两层的模型,网络的第二层通过一组超完备的神经元将第一层的特征组合起来。根据对视觉系统的研究发现,动作模型
2014-12-26 16:56:45
1479
原创 Deep Learning 读书笔记(十)
这次读的这篇文章的题目是:“Learning hierarchical invariant spatio-temporal features for action recognition with independent subspace analysis”。 原来在动作识别领域所使用的方法一般都是人工选取的特征。本篇文章的工作就是使用了一种无监督的学习方法自动地从视频中学习特征
2014-12-21 14:20:24
2085
原创 Deep Learning 读书笔记(九)
这次看的这篇文章的题目是:“Object Bank: A High-Level Image Representation for Scene Classification & Semantic Feature Sparsification” 这是10年NIPS上的一篇文章,我个人的观点觉得它指出了对于场景分类的一种新的方向,感觉还是有很多可以改进的工作可以做的。 文章在Abstr
2014-12-16 21:37:12
1178
原创 Deep Learning 读书笔记(八)
这篇文章的题目太长了,标题写不下,我就些这里吧:Unsupervised and Transfer Learning under Uncertainty: from Object Detections to Scene Categorization. 前段时间因为要准备考试,所以博客一直落下都没有写,考完了也是想放松下自己。也是堕落的不行。从今天起开始好好学习吧。
2014-12-08 11:29:30
1236
2
算法竞赛入门经典各章习题答案
2011-10-09
vrptw问题,没有pickup所对应的delivery
2013-09-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人