笔良文昌

笔为良,则文者昌


  • 首页

  • 归档

  • 关于

  • 标签

再见 2018

发表于 Dec 10 2018   |  

自从大学毕业,就没有再写过年终总结。可能是生活过的浑浑噩噩,也可能是人长大后过的更现实,反而很少时间去反思自己。到头来也没有想到有什么好总结的…

上一篇文章还是我在国内准备托福时候写的,现在转眼间两年过去了,在美国的学业即将结束。昨天刚考完了最后一门考试,明天完成最后一次作业,也就跟雪城大学说拜拜了。

在美国的生活确实很安逸,安逸到感觉自己逐渐失去斗志。本来来美国以为是学习新技术,结果发现教学水平其实不过如此,课业基本靠自己吃老本+自学能轻松应付。其实,只有英语是最大的问题,结果两年后感觉英语依旧是最大的问题….

最近终于决心「又」把博客捡起来了。更新一下 Hexo,发现之前用的七牛图床全挂了,导致博客很难看。这里推荐 V2EX 的图床。随后看情况把之前的博文修复一下。

珍惜 2018 为数不多的日子。共勉。

上传剪贴板图片到 CDN 服务器

发表于 Jun 20 2016   |  

啥问题

我在写markdown 时会将引用的图片上传到CDN服务器,然而上传步骤略微繁琐而且容易打断写作的思路。

要干啥

将系统剪贴板中的图片直接利用 CDN 服务商提供的 API 上传到服务器,并返回图片在 CDN Server 上的链接。
PS: 这里选择的 CDN 服务商是 QiNiu

这么做

安装依赖

  1. 安装 pngpaste
  2. 安装 qiniu 的 python API 模块

代码

Github-uploadpic2cnd

结果是这样子

macOS 的系统截屏快捷键是 Ctrl+Command+Option+4。
截取图片后运行程序直接回上传到设置好的 CDN 服务器并返回短链接。如下图例:

关于IERA

发表于 Mar 20 2015   |  

这里现在不会提供帮助了,如需帮助发邮件至 noclyt@gmail.com

IERA 是我在支付宝实习时写的一个与ODPS交互的半自动化的用于数据分析的可视化工具。

基于Python2.7+PyQt4 开发的,后端使用 Odpscmd 与ODPS交互。

之所以这么做是因为两点:

  1. 开发初期时间紧张且只有我自己一人负责,用Python怎么快怎么来。
  2. ODPS平台的Python API是厂内员工闲余时维护的。当时 API 功能不能满足需求,退而求其次用了 Odpscmd。

这也正是坑不断的原因。

如果你看到了IERA,恰好你看到了这个网页,又恰好你想完善IERA。我有以下两点建议&请求:

  1. 后端去除Odpscmd的依赖。如果Python API还是不满足需求,就封装个Java API包。我一直想做这个件事,当我开发好Smart IERA准备着手这件事的时候,我被调离了博山组……
  2. 帮我修一下 BUG…

我估计现在厂内应该出现有 IERA 类似功能的项目了。因为我离职前,正有开发的同事跟我咨询这一套流程。

IERA 作为一个我们组内用的小程序,我觉得从我离开博山组,他的生命周期就到头了。但它的功能已经很健全了(排除一些 BUG 的话),不吹不黑,确实提高了我们分析数据的效率。

在我离开前的日子,情报中心的同学用 IERA 进行分析数据,就已经超过我对它预期了。也可见厂内的完善数据分析工具的工作,任重而道远。

非常感谢博山给我的包容和支持,感谢同事们给我的鼓励和帮助!

现在回想开发 IERA 时,自己有太多的不足,感觉对不起博山对自己的信任,只能给当时的自己打 7 分。如果还能下次跟着博山继续干,我要让自己努力做到 10 分!

Bootstrap Bagging and Adaboost

发表于 Mar 8 2015   |  

单个弱分类器(比如感知器、决策树)一般预测结果并不好。如果将多个弱分类器加权组合,对于新的预测,多个弱分类器根据各自的权值投票,得票最多的结果作为预测结果。这样的效果往往优于单个分类器。

Aggregation

含义

多个弱分类器通过一定的方式组合成一个强分类器。

疑问

每个弱分类器的训练数据是什么样的呢?

每个分类器不可能全部都用完整的训练数据(这样的话每个弱分类器都是相同的了)。如果按照分类器的数量等分训练数据,每个弱分类器训练一部分数据,万一数据有杂讯,最终结果就容易受影响。比较好的解决方法是引入 Bootstrap .

Bootstrap

定义

从N条样本数据中,等比例有放回的抽取N次数据组成新的数据集。

特点

  1. 很好的解决了训练多个弱分类器时训练样本不够的问题
  2. 每条数据约有 66% 的概率被选入新数据集,也就是说新训练数据约包含原训练数据的 66% 。

Bagging

定义

对于K个弱分类器,每个分类器使用 Bootstrap 出的训练数据,然后做相同权值投票。

Boosting

定义

Boosting是一种思想,得到不同的样本子集,通过不同的样本子集可以得到不同的弱分类器。按照一定的方法对多个弱分类器进行加权融合,最后结果是弱分类器加权投票的结果。

AdaBoost

定义

每条训练数据都有一个权值。使用训练数据训练得弱分类器gi(),更新每条数据的权值(增大分类错误的数据的权值,减小分类正确的权值),计算gi()分类器的权值(与分类正确的数据的权值和有关)。再用更新后的训练数据权值训练得弱分类器gi+1(),以此类推。预测结果是多个弱分类器加权投票的结果。

Python的map,readue,filter函数

发表于 Feb 28 2015   |  

map()

map(function, iterable, …)

解释:

  1. 第一个参数是一个函数 function ,后面可以跟多个参数
  2. 除了第一个参数,其他参数必须是 iterable
  3. 返回值是一个列表
  4. 该列表中的第i个元素是 function以所有其他参数的的第i个元素组成的参数列表的值

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> map(str, range(5))           # 对range(5)各项进行str操作
['0', '1', '2', '3', '4'] # 返回列表

>>> def add(x,y):return x+y
...
>>> map(add,'zhoujy','Python')
['zP', 'hy', 'ot', 'uh', 'jo', 'yn']

# 想要输入多个序列,需要支持多个参数的函数,注意的是各序列的长度必须一样,否则报错:
>>> def add(x,y):return x+y
...
>>> map(add,'zhoujy','Python')
['zP', 'hy', 'ot', 'uh', 'jo', 'yn']
>>> def add(x,y,z):return x+y+z
...
>>> map(add,'zhoujy','Python','test') #'test'的长度比其他2个小
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() takes exactly 2 arguments (3 given)

>>> map(add,'zhoujy','Python','testop')
['zPt', 'hye', 'ots', 'uht', 'joo', 'ynp']

reduce()

reduce(function, iterable[, initializer])

解释:

  1. 第一个参数是函数,第二个参数是可迭代的,第三个是可选参数。
  2. 第一个参数必须是只有两个参数的函数。
  3. 如果有第三个参数,则把它当做reduce()计算的初始值。
1
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])  # calculates ((((1+2)+3)+4)+5)

filter()

filter(function, iterable)

解释:

  1. 第一个的参数是一个函数,第二个参数是可迭代的
  2. 以iteable的元素为参数依次执行function(),将结果 =True 的元素组成列表返回,=False 则过滤。

代码:

1
2
>>> filter(lambda x : x%2,range(10))        #lambda 函数返回奇数,返回列表
[1, 3, 5, 7, 9]

rfb-nnet

发表于 Feb 16 2015   |  

Full RBF Network

有多少笔资料(N),就有多少个中心。

物理意义:权重和每个点与中心的距离相关。

方法:假设每个点的权重都一样,那么对于一个新的点,所有点进行加权投票。每一张票的加权值 = exp(每个点到新点的距离)

K Nearest Neighbor

对于一个新的点,选择最近的K个点,进行加权投票。

RBF Network Learning 这节课中间用了好多课件讲:Full RBF Network的Ein=0,可能会过拟合。所以我们要来找一些合适中心(而不是把所有N个点都当成中心)

K-Means

方法: 。。。

我们利用 K-Means 选取一些合适的“中心”,然后用这些点做 RBF NNet 的特征转换。

敏感:K的值和初始点位置。

ID501068B5-Z9N86gQ2

mooc-ntu-deeplearning

发表于 Feb 14 2015   |  

神经网络的关键问题

  • 网络结构

    具体问题具体分析

    例如:数字图像处理中得Convolutional NNet(卷积神经网络)是把相邻的像素相关联,距离远的则无关联。

  • 高模型复杂度

    Regularization(正则化)

    1. Dropout
    2. Denoising(目的使NN面对含有一点noise的输入也能输出正确结果)
  • 难以得到最优解

    • 谨慎的初始化可以避免陷入局部最优解。例如:Pre-Training
  • 计算复杂度大

    GPU计算

最关键的点:Regularization和Initialization。

Autoencoder

把权重(weights)看做特征转换。那么一个好的权重(good-weights)就意味着能提取输入向量的关键特征。那么样的话,我们甚至可以通过关键特征重新拼凑出最初的输入向量。而我们正是需要这样的 good-weights !

考虑只有一层隐层的神经网络,且输入和输出层都是 $d$ 维,隐层是 $ \tilde{d} $。如下图

ip-nnet

$w_{ij}^{(1)}$: encoding weights. $w_{ij}^{(1)}$:decoding weights. 目标函数 $ g(\mathbf{x}) \approx \mathbf{x}$

我们称这样的神经网络是 Information-Preserving Neural Network

性质:

  • 一般来说有 $ tilde{d} < d
  • 限制 $ w_{ij}^{(1)} = w_{ji}^{(2)}$ ,作为一种 Regularization(正则化)方式。
  • …

Pre-Trainning

前面说过,权重初始化影响着最终解陷入局部最优解,可以通过 Pre-Trainning 减少这种影响。

思想

结合 Autoencoder 的思想:好的权重意味着提取关键特征,并可以进行复原。

方法

对于一个多层的神经网络,我们由低到高依次对每层进行 autoencoder 的训练。如图:

pre-train

Regularization in Deep Learning

随着神经元的增多,神经网络的模型复杂度也随之增加。因此在模型中加入 Regularization(正则化)是必不可少的。

  • 限制模型复杂度
  • 削弱权重值
  • 提前停止
  • Denosing
  • …

Denosing

问题:一般的学习问题中,nosing对训练的正确性影响很大。

思想:学习得到一个新的分类器,用于“辨别”是否包含杂讯的数据(并转化)。

方法:对正常的数据 $\mathbf{x}$,人工加上noise产生 $\mathbf{\tilde{x}}$ 。学习数据 $ (\mathbf{\tilde{X}}, Y=\mathbf{X}) $ 。这样就可以得到一个新的分类器,这个分类器可以用于将包含杂讯的$\mathbf{\tilde{x}}$ 转化为“正确的”$\mathbf{x}$。

顺势而为

发表于 Feb 12 2015   |  

前几天回学校参加数学建模了,真是累觉不爱。

先说对数学建模这个比赛吧。

  1. 首先这是一门比较综合性的比赛。最强调的应该是数学和统计。
  2. 这更适合高手之间的比赛。因为每道题没有一个标准答案,具有很广的知识面的牛人更能给出更完美的答案,这才是比赛的魅力。
  3. 主观性很强的比赛。最终的比赛结果是有评委(人)给出的,既然是人打分就难逃偏见。而在选手看来,更像一个黑盒打分,无法得知“为什么给我这么多分”。更何况这次美赛全世界有7000+(?)份论文。

我上面这么说并不是想抨击数学建模比赛,而是觉得自己完全不适合这个比赛:一是自己太菜,没办法创造吸引人的解法(我觉得这是一个比赛能让你真正快乐的根本);二是对主观性的比赛不太感冒。

正如这次比赛自己也是打了酱油一样:用matplotlib花了几张图,用LaTeX排了一下版。

在这里十分感谢@栾思焘的邀请,让我抱了一下大腿。其实最应该感谢@栾思焘的不是带我做比赛,而是能和@LYX在一起比赛。


这篇文章的中心应该是@LYX。

至少从现在看来,前景看来似乎并不是明朗的。

比完赛一起去吃饭看电影,我突然有种想吻她的冲动,结果在昏暗的放映厅还是被她躲过去了。当时似乎太困了,想不到怎么去面对下面尴尬的状况。不过两个人似乎都心照不宣的没有提刚才的事情。

从电影院出来之后,我是打算去超市买盒巧克力送她啦。(反正当时情况比较特殊,我只能带着她去超市)然后把她骗到超市,要买巧克力。她拉着我怎么也不要T_T。僵持了了好久,最终还是拗不过她,买了两小盒m&m出来了。两个人一人一盒,我拿的是蓝色的。

说实话我当时挺伤心的,因为我想起一些以前的事情。以前李悦也是对我送的东西百般推脱,后来才知道她是觉得两个人本来就不合适,又何必接受别人的礼物。想到这里,我不禁悲伤起来。

从超市出来之后,我表现得比较失落,她问我是不是觉得她没有我想象中的那么可爱了。我说:“不是。”确实不是,我反而觉得她越发可爱了。我想告诉她,我此时多么想拥抱她。可惜我没说,也没有去做。我承认我是不敢,因为我怕伤害,我怕一时的冲动会失去她。

身边有很多恋爱案例,奈何依旧改变不了自己“羞怯”的性格。现在想想这并非坏事。大概每个人对“拥有”的定义不同,而我知道自己需要的一个长期而稳定的关系。而一时的“欢愉”(假设我真的趁机抱了她,吻了她)并不能带来什么帮助。

我以为自己经历过一次恋爱后会变得成熟。但事实还是打破了我的认识,我见到她时依旧会不知所措,依旧会像小孩子一样吃醋。听到她不自觉的卖萌时,心都快要融化掉。或许,我就是那种喜欢把自己的幼稚面展现给恋人的人。

可以称作是“恋人”吗?我又在自作多情了。我承认自己对她一次次的婉拒有一些懊恼。但毕竟大家还不是很熟,不是吗?我们相识于2014.12.5,距今为止不过两个月有余。我相信她是在用时间来检验冲动,如若真是如此,我自然欣然接受。

我有时会感到迷茫,进而难免急功近利。这样确实是不好的。确实留给自己一些时间,好好反省自己,了解对方。

在知乎上看到一篇文章,讲究顺势而生。有人会说逆势而改变历史,但这不过是一句马后炮。大多逆势者亡矣。我说不上来什么叫做“势”,我只能告诉自己:看不懂的不能称为势,令自己迷惑的不能称为势,感受不到的不能称为势。顺从命运更不能称为顺势。

顺势而为,听起来更像一个哲学性的方法。那篇文章讲:两个人没有确定恋人关系更不要在乎什么“情人节”,而是应珍惜在一起的每一天,每天过的就像情人节一样。此为顺势。

长这么大了,也应该明白,属于你自己的东西,努力后会有好结果的。

LaTeX学习笔记

发表于 Feb 2 2015   |  

(先挖一个坑,自己慢慢把LaTeX的学习笔记更新到这里)

基础篇

代码中的空格

在代码中输入的空格和回车,在排版时的表现。

  1. 一个回车的等于一个空格
  2. 多少个空格都等价于一个空格
  3. 两个回车作用是分段
  4. 两个及更多个回车等价于两个回车
排版中的空格

有时候我们需要在排版时控制空格的数量、长度:
…

各类LaTeX文件

介绍不同扩展名的文件

  1. .tex LaTeX或TeX源文件
  2. .sty LaTeX宏包文件。可使用\usepackage加载到你的LaTeX文件中
  3. .dtx 文档化TeX文件。LaTeX宏包发布的主要格式。通过处理一个.dtx文件就可以得到该LaTeX宏包中所包括的宏代码文档。
  4. .ins 为相应的.dtx文件的安装文件。如果你在网上下载一个LaTeX宏包,你通常会发现有一个 .dtx 和一个 .ins 文件。使用LaTeX对 .ins 文件进行处理,可以从 .dtx 文件中提取宏包。

当编译LaTeX源文件后,会得到以下文件:

  1. .dvi 与设备无关文件。这是LaTeX编译运行的主要结果。你可以使用DVI预览器预览其内容,或者使用像 dvips 这样的应用程序输出到打印机。
  2. .log 上次编译运行的日志文件。
  3. .toc 储存了所有章节标题。该文件将在下次编译运行时读入并生成目录。
  4. .aux 另一种用来向下次编译运行传递信息的辅助文件。除了其他信息外, .aux 文件通常包含交叉引用信息。
  5. .idx 如果你的文件包含有索引,LaTeX使用此文件储存所有的索引词条。此文件需要使用 makeinde 处理。
  6. .lof 类似 .toc 文件,可生成图形目录。
  7. .lot 类似 .toc 文件,可生成表格目录。

列出我觉得很不错的学习链接:

  1. 西南林业大学的Emacs+LaTeX教程 评价:特别棒!手把手教你用Emacs+AucTex写LaTeX,主要学习了AucTex的快捷键和LaTeX基本语法。写起来效率真是高啊。
  2. E喵的LaTeX新手入门教程 评价:新手向教程,和我目的一样都是为了数学建模排版而学LaTeX。

用Emacs优雅的抒写markdown

发表于 Feb 1 2015   |  

啥?

作为一个Emacser肯定是用Emacs写markdown的。

我觉得称得上“优雅”需要两点:

  1. 编辑器可以提供自动补全,关键字高亮,模板补全
  2. 快捷键预览markdown文件(输出html、pdf格式都可以)

既然想优雅的写markdown,我们就需要下面两个插件:

  1. markdown-mode.el
  2. Pandoc

markdown-mode.el

这是Emacs的关于markdown的插件,可以通过elpa直接安装。

现已发现的优点:

  1. 关键字高亮
  2. 快捷键自动补全(例如Org-mode的Alt+Enter功能)
  3. 快速模板、自定义模板(再也不用担心忘了怎么插入图片了…)
  4. 待探索…

Pandoc

让我们先看一下Pandoc的wiki:

Pandoc是由John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。Pandoc使用Haskell语言编写,以命令行形式实现与用户的交互,可支持多种操作系统;Pandoc采用GNU GPL授权协议发布,属于自由软件。

所以我们使用Pandoc的目的是:直接预览一个markdown文件

1. 安装Pandoc

对于Mac,现在可以直接通过Homebrew安装Pandoc

$ brew install pandoc

2. 配置预览快捷键命令

Emacs的mardown-mode自带预览快捷键:C-c C-c p。既然我们使用pandoc来预览,就需要修改一下快捷键对应的执行命令:

Emacs菜单栏”option” -> “Customize Emacs” -> “Specific Option” -> 输入 mardown-command

然后再文本框里输入预览快捷键C-c C-c p对应执行的命令(默认是markdown):

pandoc -f markdown -t html -s –mathjax –highlight-style pygments

为什么命令长这个样子?

  1. -f mardown -t html 表示把一个mardown文件输出为一个html文件,效果就是在默认浏览器打开一个网页进行预览markdown文件的内容
  2. --mathjax 支持LaTeX数学公式
  3. --highlight-stype pygments 使用pygments支持语法高亮

3. 最终效果

打开Emacs编辑一个markdown文件,按C-c C-c p直接在浏览器中预览markdown文件。

结语

终于可以优雅的写markdown文件了。还要再学一下markdown-mode的配置和Pandoc的参数,这样用起来会更顺手。我会把一些使用心得更新在这里。

12
noclyt

noclyt

唯一能逃避的仅仅是逃避本身

12 日志
9 标签
RSS
GitHub Twitter 微博 知乎
Links
  • SumyBlog
© 2014 - 2018 noclyt
由 Hexo 强力驱动
主题 - NexT.Pisces