• Croupier

    随机、优先与权重 动机 除了汇编语言这样的另类,常规的编程语言几乎都提供了按平均概率生成整数或者浮点数的标准库。这也是应用开发中非常基本的功能。不过,有时候我们需要一些关于随机性的更复杂的功能。 这种复杂性主要来自两个方面:非平均的随机分布和随机结果的使用方式。 非平均概率 标准库的随机算法,通常都是以一个平均概率的,生成(0,1)之间浮点数的函数,或者以一个生成[0, MAX_INT)区间的整数值的方法为基础,构造相关的算法(Java标准库的Random类型,nextInt 和 nextDouble是分别实现的,互不依赖),这就使得相关的随机数生成总是在已知区间内的平均概率。有时候我们会希望以非平均概率生成随机数。例如我手上有一个推荐系统,在我们从数据集中抽取推荐内容发送到客户端时,并不希望每个内容都有平均的被选择机会,肯定是希望权重更高,更靠前的内容,有更大的几率被选中。 一种常见的方法是计算出每个内容的权重——weight、rank、score或者其它什么名字,整数或者浮点数——然后根据这个权重去选择内容。但其实严格的按权重计算概率是一个相对比较奢侈的做法,很多时候我们未必需要一个严格按照权重分布的随机数,而是仅仅要求一个有序列表中的元素,排在更前面的元素总是有更大的几率被选中——这正是推荐系统常见的需求。 随机数的使用 很奇怪,C++ 的 STL 都提供了 random_shuffle 这样的针对集合的随机算法,但是Java没有,不但Java的标准库没有,scala的标准库,甚至 Apache Commons,都没有从一个容器中随机选择若干元素的方法,Apache Commons 的 RandomUtils 中包含 nextBoolean、nextBytes这样的随机内容构造,但是就是没有从一个有限集合中做随机选择的支持。但是对我的日常工作来说,随机数一个非常重要的用途,就是利用随机行为,生成一个数据列表的子集。有时候我需要一个从固定集合中反复采样,有时候我希望做一个随机分割,还有时候,我还要处理只读和可变的容器。 针对这两个方面的缺失,我回顾了这些年来遇到的各种相关问题,在 Jaskell Core 和 Jaskell Java 8 中各自加入了一组随机工具,用于对 Java 的 List 和 Scala 的 Seq、ListBuffer 做随机选择操作。 实现 随机算法和选择算法分离 [Read More]
  • 《数据可视化基础》读后感

    《数据可视化基础》读后感 这本书比我预想的读起来要轻松的多。全书没有任何编程或者数学性质的东西,但是对我很有价值,补充了我的知识中缺失的一片拼图。 这本书分门别类的介绍了各种主要的图表类型和对应的适用场景,给出了各种好和不好的设计示范。 对我来说,用pandas或echart或r画图,并没有特别大的区别,顶多就是花几天学一学,查一查手册。但是图表背后是统计领域的行业知识,很多图表,在读这本书之前,我并不知道它们的存在,或者并不知道如何才能用好。 例如颜色和灰度的关系,以前,我只是模糊的有些感觉,会无意识的尝试一些特定的颜色组合,但是从来没有站在色弱或者色盲人士的角度,认真的去认识这个问题。在书中,清晰的给出了如何普适广大受众的颜色设计。 再例如,对于多维图表的设计,我以前也只是做一些肤浅的尝试,而这本书中,有非常细致的介绍,特别是如何保障图表在脱离电脑,印刷到纸上后,仍然有足够的表达能力。 全书正文三百多页,在我近期阅读的书籍中,算得上是一个小本子,没有公式,没有代码(随书源码使用 R 语言, ggplot2包,可以另行下载)。读起来也没什么负担,但是普适于任何工作或学习与数据相关的人士。当然,真正完成工作,我们需要具体的技术工具,需要切实的统计知识。但是对可视化的了解,也是必不可少的一部分,这本书,可以帮助我们有的放矢。
    Tags:
  • 《通向实在之路》

    《通向实在之路》 近一段时间,我的各个开源项目都没有什么提交,这些天,我读完了《通向实在之路——宇宙法则的完全指南》。 这本书,我是在作者罗杰彭罗斯得诺贝尔物理奖的时候买的。而我们这代人,很多都读过他的《皇帝新脑》,那时候,我们对他的了解还仅仅是数学家、物理学家和霍金的好友。 这本《通向实在之路》,比《皇帝新脑》更深入,主题也更专注。这本书总览了现代数学和理论物理的宏观图景,从欧式几何到非欧几何,从实数系到微积分,再复分析,微分几何、群、张量,对称,再到辛几何、代数几何,从而引出现代物理的场、动力学、相对论、量子力学和弦论,旋量、扭量、超对称,从测量和测不准,从夸克到黑洞。不可不谓之艰深博大,以至于虽然没有对每个问题详细解说,也仍然是800页的巨著——这是简体中文版,英文原版篇幅只会更大。 这本书很适合作为数学系或者物理系学生的综述课本,可以说是一本“有故事情节”的《普林斯顿数学指南》。当然,对于大学新生,几乎必然会有大量的内容无法读懂,我的意见是,尽管读下去,通篇读完之后,你会对你的大学四年,甚至直到博士阶段,将要遇到的知识有一个基本的概念,你会知道那些课程和理论的轮廓,这对于未来的学习会有极大的帮助,而随着学习深入,越来越多的知识,就会像片片拼图,逐渐的拼合成书中的图景。 当然,作为一本关注理论物理的著作,书中也并没有详述所有的数学分支,但是这并非是缺点,读者大可以以这本书为基石,自行填补拼图的其它方向。或许这本书唯一称得上缺点的,那就是门槛太高了一些,这不是那种普通人读了以后可以引为谈资的科普读物,如果没有相当的数学基础,我相信连里面的插图都无法正确理解。但是作为诺贝尔物理学奖得主的一本物理学和数学著作, 这又算得上是什么缺点呢?
    Tags: