blog | 逍遥郡


  • Home

  • Archives

  • Tags

  • Search

逻辑回归的两种数学表达

Posted on 2012-05-13 |
\[\newcommand{\R}{\mathbb{R}} \newcommand{\w}{\mathbf{w}} \newcommand{\x}{\mathbf{x}}\] LR两种表达 表达一 假设样本集$\brace{(\x^{(i)},y^{(i)})}_{i=1}^m$ ,特征$\x\in \R^n$,类别$y\in\brace{0,1}$,则LR模型: \[\begin{aligned} p(y=1|\x,\w) &=\sigma(\w\tr\x) &=\frac{\exp(\w\tr\x)}{1+\exp(\w\tr\x)} \\ p(y=0|\x,\w) &=1-\sigma(\w\tr\x) &=\frac1{1+\exp(\w\tr\x)} \end{aligned}\] 所谓“几率”(odds),反映了$x$作为正例的相对可能性。对几率取对数则得到“对数几率”(log odds,即logit),是一个线性函数: \(\mathrm{logit}(p) = \log\frac{p}{1-p}=\w\tr\x\) ...
Read more »

线性回归方法概要

Posted on 2012-05-05 |
[TOC] 最简单的线性回归模型可以用如下公式表示: \[y(\mathrm{x},\mathrm{w}) = w_0+w_1x_1+\dots+w_Mx_D\] 其中, $\mathrm{x}=(x_1,\dots,x_D)^\mathsf{T}$ 为输入的 $D$ 维特征向量,需要求解参数向量(也称作权重,或者回归系数) $\mathrm{w}=(w_0,\dots,w_D)$ ,这种模型是多元一次方程,为了扩展到多项式模型,一般的线性模型用如下公式表示: \[y(\mathrm{x},\mathrm{w}) = w_0+\sum_{j=1}^{M-1}w_j \phi_j(\mathrm{x})\] 其中, $\phi_j(x)$ 称作 基函数 (basis function), $w_0$ 是一个固定长度的偏移量,称作 偏差 (bias)参数。定义 $\phi_0(x)=1$ ,可以得到更紧凑的表示方式: \[y(\mathrm{x},\mathrm{w}) = \sum_{j=0}^{M-1} w_j\phi_j(\mathrm{x}) = \mathrm{w} ...
Read more »

LRU Cache的C++实现

Posted on 2012-04-26 |
Cache是提升程序性能的利器,在程序设计中可以说无处不在。而大多数情况下,我们使用最简单LRU算法即可满足需求,利用C++标准库或者boost库短短的几十行代码即可设计出一个通用的LRU Cache。 为了保证访问性能,对于标准库我们可以使用std::map来保存需要缓存的Key和Value。LRU算法是指当Cache满的时候,需要淘汰掉最早访问过的那个Key,以便插入新的Key和Value。直观看起来,我们似乎需要另外一个数据结构来保存Cache里每个Key访问的时间,但实际上我们只要维持Cache里Key的访问顺序即可,并无需保存具体时间戳,所以我们可以利用std::list这个数据结构。因此,基本的容器定义如下: typedef std::list<K> key_tracker_type; typedef std::map< K, std::pair<V,typename key_tracker_type::iterator> > key_to_value_type; 在每个map的元素里保存了指向list的迭代器;当访问 ...
Read more »

Hadoop Streaming编程框架mrjob

Posted on 2012-04-19 |
众所周知,Hadoop有Java和Streaming两种方式来编写MapReduce任务。Java的优点是计算效率高,并且部署方便,直接打包成一个jar文件就行了;而Streaming的优点是开发灵活方便,尤其是Python在其中可谓如鱼得水,无需IDE任何编辑器都能书写,而且对于要求计算效率的地方,我们可以使用C/C++来获得更好的性能。所以,这里介绍一下mrjob这个Python框架。 mrjob是Yelp释出的一份用于辅助书写MapReduce任务的Python框架,当然实质上也就是在Hadoop Streaming的命令行上包了一层,有了统一的Python界面,而无需你再去直接调用Hadoop Streaming命令。此外,mrjob对AWS支持得非常好,或者说其实这个框架大半的代码都是在为AWS服务,只是我们也可以拿它来书写一般的Hadoop Streaming程序。由于mrjob只是wrap了一下Hadoop Streaming的命令行,由此带来的另外一个好处就是它只需要在你的客户机上部署即可使用,而无需部署到Hadoop集群的所有机器上去。 如果你有多个mapper或 ...
Read more »

微积分备忘

Posted on 2012-04-08 |
[TOC] 级数 极限、序列的极限、函数的极限、连续 导数、偏导数、微分 设有定义域和取值都在实数域中的函数 y=f(x)。若 f(x) 在点 x0 的某个邻域内有定义,则当自变量 x 在 x0 处取得增量 Δx(点 x0+x 仍在该邻域内)时,相应地函数 y 取得增量 Δy=f(x0+Δx)-f(x)-f(x0);如果 Δy 与 Δx 之比当 Δx→0 时的极限存在,则称函数 y=f(x) 在点 y 与 Δx 之比当Δx→0 时的极限存在,则称函数 y=f(x) 在点 x0 处可导,并称这个极限为函数 y=f(x) 在点 x0 处的导数,记为 f’(x0),即: \[f'(x_0) = \lim_{\Delta x\to 0}\frac{\Delta y}{\Delta x} = \lim_{\Delta x\to 0}{f(x_0+\Delta x)-f(x_0) \over \Delta x}\] 微分也是一种线性描述函数在一点附近变化的方式。 微分和导数是两个不同的概念。但是,对一元函数来说,可微与可导是完全等价的。 可微的函数,其微分等于导数乘以自变量的微分d ...
Read more »

线性代数备忘

Posted on 2012-03-14 |
[TOC] 线性相关、线性无关(Linear independence) 若n个向量线性有关,则说明其中一个向量可以用其余n-1个向量线性表示;若线性无关则不能。 线性有关的向量组中存在冗余向量,即有的向量是无用的,这会影响方程组解的结构。 在高等数学里面,向量二维和三维相关,就是共线(坐标对应成比例)和共面的问题。比如:共线 a1 = k1a2 + k2a3。 从向量空间的角度解释:将向量组中的向量看作空间内的向量,相关即为向量方向中有一致的,无关即为各个向量方向均不同。 线性无关的向量能构成线性空间的基集。 基(Basis)、正交基、自然基 向量空间 V 的基 B 是 V 的可张成(生成)出 V 的线性无关子集。称这子集的元素为基向量。 自然基:某一维为1其余维都为0的向量组成的一组基。 秩(Rank) 一个矩阵A的列秩是A的线性无关的纵列的极大数目。类似地,行秩是A的线性无关的横行的极大数目。 矩阵的列秩和行秩总是相等的,因此它们可以简单地称作矩阵A的秩,通常表示为r(A)或rank(A)。 矩阵行秩=列秩,关键在于理解“矩阵的秩等于其转置矩阵的秩”因为矩 ...
Read more »

使用skeleton自动输入

Posted on 2012-03-04 |
如果编辑器能够帮助我们输入,引导我们输入,这无疑是提高生产力的一个好方法。正基于此,Emacs里的自动输入方法有很多,查看Info的 Autotype 一节,可以看到有abbrev、skeleton、tempo、autoinsert等等,此外流行的还有yasnippets、template等。 大家一般认为skeleton比较弱,完全可以被tempo、yasnippet之类的替代了,不过经过使用,发觉skeleton做自动输入还是很强大的,而且可以搭配abbrev、autoinsert完成更多的工作。 skeleton的定义 skeleton是一个内嵌的模板语言,可以通过 define-skeleton 函数来定义,语法非常简陋。这里根据函数的说明简单介绍一下如何定义一个skeleton: (define-skeleton COMMAND DOCUMENTATION &rest SKELETON) 参数说明: COMMAND 定义一个skeleton即定义了一个elisp函数,这就是函数名称。 DOCUMENTATION skeleton说明 SKE ...
Read more »

Redis集群小记

Posted on 2012-02-24 |
Redis近两三年变得来非常流行,它的设计很简洁,非常轻量级,至少到目前2.4.x为止,它的定位还是一个单机版的基于内存的kv数据库服务。当然作者Salvatore目前也正在进行Redis Cluster的设计和开发,有兴趣的可以看看这篇幻灯片。单机性能毕竟有限,并且作为内存数据库,单机容易因宕机等原因导致中断服务,所以即使没有正式的Redis Cluter,我们常常不得不自己山寨Redis集群来使用。 最近,需要为我们的CTR模型开发线上预估服务,有大量的特征(数十亿量级)需要在Hadoo集群离线产生之后供在线模型读取,并且对QPS和时延要求都很高。由于数据读取的场景比较多,并且需要支持T+1批量更新。因此,最终选择用Redis搭个集群来提供特征存取服务,这里做一个小结。 在动手之前,需要先了解Redis的优缺点和它的适用场景。这方面的总结也很多,就不细述,简单列举一下。 Redis的优势在于: 吞吐量很高。由于是内存数据库,因此支持高速读写,每秒10w级。 数据结构很丰富。支持string、list、hash、set、sorted set,且有丰富的数据操作方法, ...
Read more »

最大似然估计方法

Posted on 2012-01-18 |
已知概率密度函数的形式,估计其参数的这个过程即参数估计(Parameter Estimation)。常用的估计方法有 最大似然估计、最大后验估计、贝叶斯估计等。 若设 $\mathrm{x}=(x_1,\dots,x_n)$ 是来自概率密度函数 $p(\mathrm{x}\vert\theta)$ 的独立采样,则其联合概率可以表示为: \[p(\mathrm{x}|\theta) = \prod_{i=1}^n p(x_i|\theta)\] 当通过采样已知 $\mathrm{x}$ 概率, $p(\mathrm{x}\vert\theta)$ 是关于未知参数 $\theta$ 的函数,称为样本的似然函数,常记作 $L(\theta)$ 。 把似然函数取得最大值时的 $\hat\theta$ 用作未知参数 $\theta$ 的估计值的过程,称为最大似然估计(MLE, maximum-likelihood estimation)。 实际应用过程中为了计算方便,一般都使用对数自然函数: \[\begin{align} \ell(\theta) &= \ln L( ...
Read more »

在Emacs里使用tumblr

Posted on 2012-01-07 |
自从tumblr.com开始支持markdown语法 后,它在我眼里就从一只丑小鸭变成了白天鹅。在tumblr上你可以用markdown语法方便的书写;你无需自己去架设网站,搭个LAMP环境去跑wordpress;tumblr.com绑定域名是免费的,wordpress.com绑定域名价格不菲;tumblr有很多漂亮的模板可以选择;最棒的是,它提供了API,这样怎么玩都可以了。总之对比下来,对于个人blog来说,tumblr真是个不错的选择啊。于是我打算从wordpress转移到tumblr了。 加上前两天在TL上了解到octopress是个很棒的工具,于是我就想如果借助Emacs,把Emacs作为一个前端去管理tumblr的话,似乎也能达到类似的效果。可惜我去Emacswiki找了一下,发觉只有一个tumble.el,它仅能发布blog,没有提供管理功能,于是我就利用元旦时间自己写了一个tumblr-mode.el。目前有如下的功能: tumblr-list-posts 根据blog名、tag和状态信息列出已有的blog tumblr-get-post 打开已有的blo ...
Read more »
1 … 5 6 7 … 19
Julian Qian

Julian Qian

记录编程、Hack和自娱自乐的一些玩意。

189 posts
60 tags
RSS
Creative Commons
© 2024 Julian Qian
Powered by Jekyll
Theme - NexT.Mist