自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 Shark源码分析(十二):线性SVM

Shark源码分析(十二):线性SVM关于svm算法,这个在我关于机器学习的博客中已经描述的比较详实了,这里就不再赘述。svm主要有三种类型,这里我所介绍的是线性svm算法的代码。相较于使用核函数的svm算法,代码的整体框架应该是一样的,只是在对偶问题的求解上所使用的方法可能是不一样的。LinearClassifier类这个类所表示的是算法的决策平面,是一个多分类的线性分类模型。定义在<includ

2017-01-26 11:55:08 1381

原创 Shark源码分析(十一):随机森林算法

Shark源码分析(十一):随机森林算法关于这个算法的介绍,可以参看我之前关于集成算法的博客。因为Shark中关于决策树算法只实现了CART算法,所以随机森林算法中也只包含了CART算法。如果你已经看过了我之前写的关于CART算法源码分析的博客,看到后面就会发现它与随机森林算法的代码其实差不多。只是在选择最优划分属性时多了一个随机选取候选集的过程。这也是随机森林算法的一大特点。因为CART算法既可以

2017-01-26 11:54:07 2167 3

原创 Shark源码分析(十):KNN算法

Shark源码分析(十):KNN算法关于这个算法,我之前已经有博客详细介绍过。虽然说这个算法看上去非常的简单,但是在搜索k个最近邻居数据点时,还是非常具有技巧性的。这里还是有必要再次强调一下。如果输入数据的维度不高,可以使用树形结构(kd树)来加快查找的速度。如果输入的维度较高,则利用树型结构的速度与计算两两数据间距离的速度并不会有太大的差别。之后我们要介绍的代码也是利用kd树来组织的。在计算距离时

2017-01-26 11:53:01 1193

原创 Shark源码分析(九):朴素贝叶斯算法

Shark源码分析(九):朴素贝叶斯算法关于这个算法,我之前也有写过博客来介绍过。但是Shark在实现时,它只考虑到了输入为连续属性值的情况,而没有考虑到离散属性值的情况。至于连续属性值的情况该如何计算,可以参考下我的博客。AbstractDistribution类既然我们需要计算分布情况,那我们需要有一个类来表示分布。AbstractDistribution类就是表示所有分布的基类,该类定义在文件

2017-01-26 11:52:19 978

原创 Shark源码分析(八):CART算法

Shark源码分析(八):CART算法决策树算法是机器学习中非常常用的一种算法。在我关于机器学习的博客中有对决策树算法进行详细的介绍。在Shark中,只实现了CART这一种类型的决策树,它可以用于分类任务或是回归任务中。在这里我们只对其中有关分类任务的部分代码进行分析。CARTClassifier类这个类用于定义决策树,该类定义在文件<include/shark/Models/Trees/CARTC

2017-01-26 11:51:27 980 1

原创 Shark源码分析(七):神经网络

Shark源码分析(七):神经网络对于神经网络这里应该就不用叙述了吧,之后可能会写一些关于深度学习方面的博客。这里要介绍的神经网络,名字应该叫做前馈神经网络(Feed-Forward Networks)。至于这个神经网络为什么要叫前馈,是因为这个网络在拓扑结构上不含有反向边,也就是没有环。而不是指的信号不能反向地传递。对于单个神经元,Shark提供了几种激活函数以供选择:Logistic函数,输出

2017-01-26 11:50:05 1012

原创 Shark源码分析(六):k-means算法

Shark源码分析(六):k-means算法k-means算法是原型聚类算法中一个非常典型的算法。关于聚类算法,我之后应该会在博客中进行详细说明。对于整个聚类算法来说,可以分为两类:硬聚类与软聚类。对于硬聚类,每一个数据点只能属于某一个簇。对于软聚类来说,则没有这一限制。首先还是来看一下整个聚类算法基类。ClusteringModel类ClusteringModel类定义在<include/shar

2017-01-26 11:48:13 1074

原创 Shark源码分析(五):线性回归算法与Lasso回归

Shark源码分析(五):线性回归算法与Lasso回归为什么上一篇还是三,这一篇就跳到五了呢?其实我们原来提到过:方法=模型+策略+算法方法 = 模型+策略+算法这里的模型与算法我们之前都已经提到过了,虽然只是介绍了一个基类,并没有涉及到其具体的实现。在这里我们就会揭开其真正面目了。『策略』我们还没有介绍过,其实就是目标函数,在前面一些较为简单的算法中并没有涉及到这块。为了整个逻辑的完整性,我还是打

2017-01-26 11:41:27 1377

原创 Shark源码分析(四):目标函数及其优化

Shark源码分析(四):目标函数及其优化我们之前反反复复地强调过,Shark的设计策略是:方法 = 模型 + 策略 + 算法。这里的策略指的就是目标函数。我们的目标是从假设空间中选取最优的模型,需要考虑的是按照什么样的准则学习或选择最优的模型。选择一个好的目标函数形式,也是算法最终取得好的效果的一个重要组成部分。在确定了目标函数之后,我们还需要考虑的就是如何对其进行优化。在Shark中,将定义目标

2017-01-26 11:40:14 1025

原创 Shark源码分析(三):数据预处理之正则化

Shark源码分析(三):数据预处理之正则化在机器学习算法中,获取训练数据后首先要做的不是将输入投入训练方法中进行学习,而是应该对数据进行预处理。预处理过程输出数据的质量能够对之后算法的结果起着至关重要的作用。预处理过程含有非常多的操作,在我目前阅读代码的过程中只碰到了正则化这一过程。那我们就先来讨论正则化,如果之后再碰到了其他的方法再补充。Shark将对输入数据进行正则化的模型也看作是一个线性模型

2017-01-26 11:37:47 805

原创 Shark源码分析(一):数据的存储(2)

Shark源码分析(一):数据的存储(2)上一篇博客中说到了实际存储数据的SharedContainer类,但是联系到实际中输入的数据可能会有不同的形式,比如说无标签数据和有标签数据,无法都使用SharedContainer类来存储,否则就无法方便地获取数据对应的标签。所以Shark将SharedContainer类封装在了一个名为Data的类中。之后又有两个类,UnlabeledData和Labe

2017-01-26 11:36:57 825

原创 Shark源码分析(二):模型与训练方法

Shark源码分析(二):模型与训练方法之前两篇博客都说的是整个架构底层的东西,如何来存放输入的数据,以便于在计算时进行加速。而这一篇呢,会向上走一点,来看一看如何将模型进行抽象。在『统计机器学习』中有提到这样一句话,『统计学习方法是由模型、策略和算法构成的』。Shark正是按照这种划分来构建整个库的架构。在监督学习过程中,模型就是所要学习的条件概率分布或是决策函数。Shark是将几个比较类似的算法

2017-01-26 11:33:08 1092

原创 Shark源码分析(一):数据的存储(1)

Shark源码分析(一):数据的存储(1)Shark是一个使用C++开发的机器学习库,里面还有一些深度学习的算法例如:自编码器、限制玻尔兹曼机、循环神经网络等。对于熟悉机器学习、深度学习算法的流程还是很有帮助的,同时能够增强你对于C++的理解能力,特别是对于模板的应用能力。源码的可读性我觉得也比较不错,就是在有一些注释写的不是非常清楚。该项目的主页是http://image.diku.dk/shar

2017-01-26 11:32:17 1617 1

原创 隐式语义分析

隐式语意分析隐式语义分析(Latent Semantic Analysis,LSA),也被称为隐式语义索引(Latent Semantic Indexing,LSI),是一种不同于关键词检索的搜索引擎解决方案,其检索结果的实际效果更接近于人的自然语言,在一定程度上能够提高搜索结果的相关性。原始方法的缺点从自然语言的角度,大部分词具有一词多义的特点,机器无法确定在何环境下使用何种词义,这就导致了搜索结

2017-01-26 10:45:54 4886 1

原创 非负矩阵分解

非负矩阵分解(Non-Negative Matrix Factorization)这个问题是我在进行文本的主题提取时遇到的。处理的矩阵是文本数据的tf-idf矩阵。如果你使用的词向量,也可以是词向量经过组合之后得到的矩阵。我们的目标是要对这个矩阵进行因式分解,即找到两个更小的矩阵,使得二者相乘以得到原来的矩阵。该矩阵分解的特殊之处就在于,它要求两个小矩阵中的元素都是非负的。这个要求在特定的问题中是有

2017-01-26 10:44:22 1278

原创 关键词抽取与自动文摘

关键词抽取与自动文摘在自然语言处理中对于关键词抽取与自动文摘这两个主题,有着多种多样的方式去解决它们,这里将介绍一种叫做TextRank的方法,就可以解决这两个问题。我将结合具体的代码,试图将算法解释地更加清楚些。论文『TextRank: Bringing Order into Texts』中首次提出了TextRank方法,如果想全面了解下这个方法,还是仔细看下这篇论文。当你一看到TextRank这

2017-01-26 10:42:59 4416

原创 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 2150

原创 机器学习算法(九):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 3581

原创 评估方法、性能度量和比较检验

机器学习中模型的评估方法、性能度量和结果的检验方法在对算法进行训练时,我们必须要有相应的数据。我们并不能在所有数据上进行训练,否则就没有数据来对算法的性能进行验证了。这就涉及到训练集与测试集划分的问题,即评估方法。算法在训练好了之后,需要将其在数据集上进行测试,如何来衡量测试的结果,这就是性能的度量。有了实验评估方法和性能度量,看起来就能对学习算法的性能进行评估比较了:先使用某种实验评估方法测得学习

2017-01-25 17:18:19 11026 1

原创 机器学习解决问题的步骤

机器学习解决问题的步骤针对任何一个打算由机器学习算法来解决的问题,都有一种『套路』存在,只要按照这个模板『按部就班』就能够得到一个结果。就跟一个产品的生产流水线是一个道理。但是得到结果的好坏跟你是否是一个『熟练工』有很大的关系。因为在解决具体的问题中有许多的tricks对于结果的提升有所帮助。整个『套路』能分为以下5个步骤:定义问题对数据进行预处理算法的抽查对结果进行优化结果展示这里非常

2017-01-25 17:14:19 12713

算法竞赛入门经典各章习题答案

本书是一本算法竞赛的入门教材,把C/C++语言、算法和解题有机的结合在一起,淡化理论,注重学习方法和实践技巧。本书中的代码规范、简洁、易懂,不仅能帮助读者理解算法原理,还能教会读者许多编程技巧。

2011-10-09

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除