读《厚黑学》

新年在家闲来无事,在老爸书架的一个叽里旮旯角落里翻出一本旧书,李宗吾的《厚黑学》。书是1989年出版的,年限比我的年龄还久远,《厚黑学》一直是如雷贯耳的,但未曾去寻它来看,那日有幸目睹,真真是一本奇书,李宗吾的思想更是让人拍案叫绝。

Read More

关于阅读

最近闲来无事,毕设也告一段落了,可是情绪一直很低迷。掐指一算,我即将25岁,或许是到了四分之一人生危机的时候了。回想自己四分之一的人生,发现自己一天天过的越来越不像个生活,懒散更是从四面八方腐蚀了我的内心,很多事情总是以“没有意义”为借口而懒得去做。可是人生有的时候就是需要折腾呀,总是要自己折腾出个花才行呀。就像木心说的“生命好在无意义,才容得下各自赋予意义”。在这四分之一的节点上,我寻思着总该做点什么,即使身体没有动,但思想总该有个仪式感的。我是一个极容易胡思乱想的人,每天晚上思绪总要绕着校园游荡一圈再回来安稳地睡觉。在某个晚上惊觉自己已然将近半年没有读书了,于是从头到尾进行了一番回忆和反思,也于第二日写下这篇关于阅读的总结,以此来警醒自己。由于迄今为止我的学生身份一直都没有变过,那就以学历为阶段来讲讲我关于阅读的二三事吧,理科生的思维有时就是如此的单调和无聊。

Read More

MapReduce介绍

本文主要简要介绍MapReduce的思想和工作机制。参考的文献是Hadoop权威指南,本文偏向于个人看完书的笔记总结,若有不足或错误之处,还望指出。
MapReduce和关系型数据库的主要差别是:MapReduce适合一次写入、多次读取数据的应用,而关系型数据库更适合持续更新的数据集;MapReduce对于非结构化或半结构化数据非常有效。其有两个核心特性:数据本地化和无共享框架。数据本地化指的是在计算节点上存储数据,以实现数据的本地快速访问。无共享框架指的是各个任务之间彼此独立。
MapReduce作业(job)是客户端需要执行的一个工作单元,包括输入数据、MapReduce程序和配置信息。有两类节点控制作业执行过程:一个jobtracker及一系列tasktracker。jobtracker调度任务来协调所有运行在系统上的作业,tasktracker运行任务并将运行进度报告发送给jobtracker。
MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。Hadoop将作业分成若干个小任务(task),其中包括两类任务:map任务和reduce任务。Hadoop将MapReduce的输入数据划分成等长的小数据块,称为输入分片(input split)简称分片。Hadoop为每个分片构建一个map任务来运行用户自定义的map函数。Map任务的输出结果写入本地硬盘,而非HDFS。为了减少数据通信开销,中间结果数据进入reduce节点前需要进行合并(combine)处理,把具有同样主键的数据合并到一起避免重复传送; 一个reducer节点所处理的数据可能会来自多个map节点, 因此, map节点输出的中间结果需使用一定的策略进行适当的划分(partitioner)处理,保证相关数据发送到同一个reducer节点。

Read More

Hadoop源码分析之RPC一

Hadoop中各个实体间存在大量的交互,远程过程调用让用户可以像调用本地方法一样调用另外一个应用程序提供的服务,而不必设计和开发相关的消息发送、处理和接收等具体代码。是一种重要的分布式计算技术,它提高了程序的互操作性,在Hadoop的实现中得到了广泛地应用。

Read More

机器学习系列—8.神经网络

本文主要分为以下几个部分。首先对神经网络进行概述。由此引出由两层神经元组成的感知机,并介绍了感知机的学习规则。但感知机学习能力有限,要解决非线性可分问题需引入多层网络,多层网络增加了隐层。误差逆传播算法(BP算法)可用于训练多层前馈神经网络,第三部分重点介绍了使用BP算法训练网络的过程。神经网络的训练过程就是个参数寻优的过程,第四部分介绍了全局最小与局部极小,并介绍了四个策略用于跳出局部极小,分别是:1.以多组不同参数值初始化多个神经网络;2.使用模拟退火算法;3.使用随机梯度下降;4.使用遗传算法。第五部分介绍了 一些其他常见的神经网络,有RBF网络、ART网络、SOM网络、级联相关网络、Elman网络、Boltzmann机,分别介绍了他们的网络机构以及训练过程。第六部分简单介绍了深度学习与神经网络的关系,构建深层神经网络的两个方法,并介绍了训练深层神经网络的两种常用的方法:1。无监督逐层训练(预训练+微调);2.权共享。

Read More

机器学习系列—15.概率图模型

机器学习最重要的任务是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推断。概率模型(probabilistic model)将学习任务归结于计算变量的概率分布,主要分为两种模型:判别式模型和生成式模型。判别式模型是对条件分布进行建模(即有条件分布推断条件概率分布);生成式模型直接对联合分布进行建模。但是这些概率模型的属性变量之间往往存在复杂的联系,因此概率模型的学习,即基于训练样本来估计变量分布的参数往往相当困难。因此有了概率图模型(probabilistic graphical model),其能简洁紧凑地表达变量间关系的工具。

Read More

机器学习系列—14.半监督学习

当训练样本不足时,学得模型的泛化能力也往往不佳。因此可以采用主动学习的方法,即引入额外的专家知识,通过与外界的交互来将部分未标记样本转变为有标记样本。但若不与专家交互,没有获得额外信息,还能利用未标记样本来提高泛化性能吗?回答是可以的。让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised)。要利用未标记样本,要做一些将未标记样本所揭示的数据分布信息与类别标记相联系的假设。最常见的是“聚类假设”(cluster assumption),即假设数据存在簇结构,同一个簇的样本属于同一个类别。另一种常见的假设是“流形假设”(manifold assumption),即假设数据分布在一个流形结构上,邻近的样本拥有相似的输出值。“邻近”程度常用“相似”程度来刻画,因此,流形假设可看作聚类假设的推广,但流形假设对输出值没有限制,比聚类假设的适用范围更广,但是二者的本质都是“相似的样本拥有相似的输出”这个基本假设。

Read More

机器学习系列—13.特征选择

特征选择是一个重要的“数据预处理”(data preprocessing)过程,即从给定的特征集合中选择与当前学习任务相关的特征的过程。特征选择中所谓的“无关特征”是指与当前学习任务无关,有一类特征称为“冗余特征”(redundant feature),他们所包含的信息能从其他特征中推演出来。冗余特征很多时候是不起作用的,它们有时会增加学习过程的负担,有时会降低学习任务的难度。因此冗余特征的情况较为复杂,本文所讲述的内容中的数据集均不涉及冗余特征。
从初始的特征集合中选取包含重要信息的特征子集,若遍历所有可能的子集,会遭遇组合爆炸,可行的做法是产生一个“候选子集”,评价出它的好坏,基于评价结果产生下一个候选子集。。。循环往复。这里会涉及两个关键环节:如何根据评价产生下一候选子集?如何评价子集的好坏?

Read More

机器学习系列—12.降维之PCA

许多学习方法都涉及距离计算,而高维空间会给距离计算带来很大的麻烦,甚至计算内积都不再容易。事实上,在高维情形下出现的数据样本稀疏、距离计算困难等问题是所有机器学习方法共同面临的严重障碍,被称为“维数灾难”(curse of dimensionality)。缓解维数灾难的一个重要途径就是降维(dimension reduction),也称“维数约简”。

Read More

机器学习系列—11.k近邻

k近邻(k-Nearest Neighbor,kNN)学习是一种常用的监督学习方法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。通常,在分类任务中可使用“投票法”,即选择这k个样本中出现最多的类别标记作为预测结果;在回归任务中可使用“平均法”,即将这k个样本的实值输出标记的平均值作为预测结果;还可基于距离远近进行加权平均或加权投票,距离越近的样本权重越大。

Read More