前几天在twitter上感言:新的一年,继续hard模式的人生。这个hard模式有两个意思。
一个意思是说在墙内的生活很hard。这年月在大局域网内搞什么事都不容易。写博客,发电邮,看电影,搜资料,这些大小事情都被GFW拦住。未来之中国,真是猪栏之中国!
另一个意思是说学习的状态很hard。不断的把自己往非舒适区推,不断的学一些新的东西。很有意思。有人说,把兴趣和工作合二为一,才能真正的做到极致,我深以为然。工作内的八小时和工作外的八小时,都在做同一类的事情,类似武侠小说中,那些对武道的终极追求者。(当然本人还是近女色的)
感言完毕,下面是2014年的流水账了。
年初的时候换工作到了一家电商公司1号店,接触到互联网数据。做了些枯燥的取数需求,也做了一些看似高端的模型,了解数据仓库和BI的东西,实战经验丰富了不少。感谢数据海洋的推荐。
后来春节期间为supstat编写R语言的中级培训材料,主要是以机器学习为纲,顺势又把这些算法捣实了一下。supstat的vivian人很好,祝她在纽约平安。
5月份和李舰到台湾参加东吴大学主办的一个会,顺便把台北玩了一下。认识了谢邦昌这位数据挖掘界的大佬,还有台北商业大学的邹老师。台北的饭还是很好吃的,有机会再去台北逛一逛。感谢主办方赞助的机票。
下半年时候开始花时间学python,对于它的数据模块已经运用自如。非常喜欢它的notebook,我甚至写了一个R和python的对比slide,准备在R会上讲的。不过李舰还是给了个命题作文,只讲了下数据科学。
2014年完成的一件大事就是把书稿写完了,李舰和我合著的《数据科学中的R语言》,历经三个寒暑,多轮修改,总算可以在各位的有生之年读到了。快哉快哉。感谢李颖编辑的耐心。
至于其它都不值多说了,或者先做了再说吧。我的博客仍然在更新,它是我的一个线上笔记(其实是不会用github)。敏锐的读者可以观察到,博客的主题已经改为《数据科学中的R和python》。工具增加了,研究的方向没有变。主题下面是对数据科学最好的一句提炼:Data Science is the art of turning data into actions。诸位有兴趣往数据科学坑里跳的,可以关注两个方面的修炼。一方面是有形的技能:理论、工具、实战。另一方面是无形的气质:好奇、创造、求败。在有涯的人生时间里,成为数据相关所有领域的专业余者(Pro-Ams,这个词要感谢志平)。
2015年的目标是:有knowledge、有money、有happy。成为超一流的数据科学家。
就这样子吧,借用一句话当尾巴:真正的英雄主义,是认清生活的本来面目,仍然热爱它。
星期三, 十二月 31, 2014
星期一, 十二月 29, 2014
星期日, 十二月 28, 2014
星期日, 十二月 14, 2014
星期二, 十二月 09, 2014
德国坦克问题的简单解答
德国坦克问题是一个经典的统计估计问题,不清楚的同学可以自行google。最简单的思路是将坦克总数X看做是一个X面的骰子。我们对骰子的面数不确定,但可以根据出现的点数来对X的取值分布做推断。推断方法就是贝叶斯方法。
假设我们对坦克总数有[500, 1000, 1500, 2000, 3000]五种可能的估计,先验估计为均匀分布,之后我们观察到战场上坦克编号出现有[4, 180, 75, 1007, 1003, 1500]
尝试估计这五种可能的后验概率分布如下:
500: 0.0
1000: 0.0
1500: 0.837
2000: 0.149
3000: 0.013
python 代码如下:
假设我们对坦克总数有[500, 1000, 1500, 2000, 3000]五种可能的估计,先验估计为均匀分布,之后我们观察到战场上坦克编号出现有[4, 180, 75, 1007, 1003, 1500]
尝试估计这五种可能的后验概率分布如下:
500: 0.0
1000: 0.0
1500: 0.837
2000: 0.149
3000: 0.013
python 代码如下:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from collections import Counter | |
class Tank(): | |
def __init__(self,value): | |
self.tab = dict(Counter(value)) | |
def Values(self): | |
return self.tab.keys() | |
def Mult(self, x, factor): | |
self.tab[x] = self.tab.get(x, 0) * factor | |
def Likelihood(self, data, hypo): | |
if hypo < data: | |
return 0 | |
else: | |
return 1.0/hypo | |
def Normalize(self, fraction=1.0): | |
total = sum(self.tab.itervalues()) | |
factor = float(fraction) / total | |
for x in self.tab: | |
self.tab[x] *= factor | |
return sum(self.tab) | |
def Update(self, data): | |
for hypo in self.Values(): | |
like = self.Likelihood(data, hypo) | |
self.Mult(hypo, like) | |
return self.Normalize() | |
def Print(self): | |
for val, prob in sorted(self.tab.iteritems()): | |
print val, prob | |
def main(): | |
suite = Tank([500, 1000, 1500, 2000, 3000]) | |
for roll in [4, 180, 75, 1007, 1003, 1500]: | |
suite.Update(roll) | |
print 'After more obs' | |
suite.Print() | |
if __name__ == '__main__': | |
main() |
订阅:
博文 (Atom)