程序员(或计算机科学家)应该知道什么统计数据?

我是一名有数学和计算机科学背景的程序员。 我研究过本科水平的可计算性,图论,线性代数,抽象代数,算法和一些概率和统计(通过几个CS类)。

不过,我觉得我对统计数据不够了解。 统计数据在计算中越来越有用,统计自然语言处理有助于推动Google搜索和机器翻译的一些算法,并需要对硬件,软件和网络进行性能分析,这些分析需要合理的统计基础,并且与生物信息学每天更普遍。

我已经阅读了关于“Google如何使用if语句使用贝叶斯过滤的方式”,并且我知道甚至相当朴素,简单的统计方法解决Paul Graham的“垃圾邮件和更好的贝叶斯过滤计划”的问题的能力,我想超越这个。

我试图研究学习更多的统计数据,但我有点失落。 维基百科的文章有很长的相关主题列表,但我不确定应该看看哪些内容。 我觉得从我看到的情况来看,很多统计数据都假设一切都是线性组合的因素组合,加上一些高斯分布的随机噪声; 我想知道除了线性回归之外我应该学什么,或者如果在开始学习其他技术之前,我应该花时间去真正理解。 我发现了几本长长的书籍列表, 我应该从哪里开始?

所以我想知道该从哪里出发。 学什么,在哪里学习。 特别是,我想知道:

  • 编程,软件工程和计算机科学中的哪些问题是非常适合的统计方法? 我会在哪里获得最大的回报?
  • 我应该花些时间学习什么样的统计方法?
  • 我应该使用什么资源来学习? 书籍,论文,网站。 我希望能够讨论每本书(或其他资源)的内容,以及它为什么相关。
  • 为了澄清我所寻找的内容,我对程序员通常需要处理哪些问题可以从统计方法中受益以及哪些类型的统计工具可能有用感兴趣。 例如:

  • 程序员经常需要处理大型自然语言文本数据库,并帮助分类,分类,搜索和处理它。 什么统计技术在这里有用?
  • 更一般地说,人工智能已经从离散的符号方法转向统计技术。 什么样的统计人工智能方法现在可以为工作程序员提供最多的东西(而不是正在进行的研究,可能会或可能不会提供具体的结果)?
  • 程序员经常被要求生产高性能的系统,在负载下可以很好地扩展。 但除非你能衡量它,否则你无法真正谈论性能。 你需要用什么样的实验设计和统计工具才能够自信地说出结果是有意义的?
  • 物理系统的模拟,例如计算机图形学中,经常涉及随机方法。
  • 程序员通常遇到的其他问题是否会受益于统计方法?

  • 有趣的问题。 作为一名统计学家,他的兴趣越来越与计算机科学保持一致,或许我可以提供一些想法......

  • 不要学习频率主义假设检验。 虽然我的大部分工作都是以这种模式完成的,但它并不符合业务或数据挖掘的需求。 科学家一般都有特定的假设,并且可能希望衡量这样的可能性,即假设他们的假设不是真的,数据会像现在这样极端。 这很少是计算机科学家需要的答案。

  • 贝叶斯是有用的 ,即使你不知道你为什么假设你正在使用的先验。 贝叶斯分析可以为您提供各种偶然事件的精确概率估计值,但重要的是要认识到,您有这种精确估计值的唯一原因是因为您对先验概率做出了模糊决策。 (对于那些不知情的人,使用贝叶斯推理,你可以指定一个任意的先验概率,并根据收集到的数据对其进行更新以获得更好的估计值)。

  • 机器学习和分类可能是开始的好地方。 机器学习文献更侧重于计算机科学问题,尽管它的使命几乎与统计学相同(请参阅:http://anyall.org/blog/2008/12/statistics-vs-machine-learning-fight/) 。

    既然你谈到了大量变量的大型数据库,这里有几个算法在这个领域派上用场。

  • adaboost:如果你有大量蹩脚的分类器,并且想要制作一个好的分类器。 (另请参阅logit增强)
  • 支持向量机:强大而灵活的分类器。 可以学习非线性模式(如果您想对其进行挑剔,可以在非线性内核空间中使用线性模型)。
  • k-nearest neighbor:一个简单而强大的算法。 它不能很好地扩展,但是有近似的最近邻居选择,它们并不那么病态。
  • CART:该算法根据许多预测变量对数据进行分区。 如果存在可变交互作用,或者存在一个非常好的预测器,它只适用于数据的一个子集,那就特别好。
  • 最小角度回归:如果您试图预测的值是连续的,并且您有大量数据和大量预测变量。
  • 这绝不是完整的,但应该给你一个很好的起点。 关于这个主题的一本非常好的书籍是Duda,Hart,Stork:Pattern Classification

    另外,统计的很大一部分是描述性可视化和分析。 这些对程序员特别有用,因为他们允许他/她将信息传回给用户。 在R中,ggplot2是我创建可视化的首选包。 在描述性分析方面(并且在文本分析中有用)是多维缩放,其可以给出非空间数据的空间解释(例如参议员的意识形态http://projecteuclid.org/DPubS?service=UI&version= 1.0&动词=显示&手柄= euclid.aoas / 1223908041)。


    就像一个观点,而不是批评者,但是你的问题应该用不同的方式来表述:“任何人都应该知道什么统计数据?”。

    事实上,不幸的是,我们都处理统计数据。 这是生活中的事实。 民意调查,天气预报,药物有效性,保险,当然还有计算机科学的一些部分。 能够批判性地分析所呈现的数据可以在选择正确的理解或被欺骗之间建立界限,无论这意味着什么。

    说,我认为以下几点是重要的理解

  • 样本的均值,中位数,标准差以及样本和总体之间的差异(这非常重要)
  • 分布以及为什么高斯分布如此重要(中心极限定理)
  • 它是什么意思与空假设测试。
  • 什么是变量变换,相关,回归,多变量分析。
  • 什么是贝叶斯统计。
  • 绘图方法。
  • 所有这些观点不仅对你作为一名计算机科学家至关重要,而且对于你来说也是一个人。 我会举几个例子。

  • 零假设的评估对于测试方法的有效性至关重要。 例如,如果某种药物可以工作,或者如果修复硬件有一个具体结果,或者这只是一个偶然的问题。 假设你想提高机器的速度,并更换硬盘。 这个变化是否重要? 您可以使用旧硬盘和新硬盘进行性能采样,并检查差异。 即使您发现新磁盘的平均值较低,这并不意味着硬盘完全有效。 这里输入Null假设测试,它会给你一个置信区间,而不是一个明确的答案,例如:更改硬盘驱动器对机器性能有着实际影响的概率为90%。

  • 相关性对于发现两个实体是否“变化相似”很重要。 由于互联网口头禅“相关不是因果关系”教导,应该小心处理。 两个随机变量显示相关的事实并不意味着一个导致另一个导致另一个,也不意味着它们与第三个变量(您未测量)相关。 他们可以以同样的方式行事。 寻找海盗和全球变暖来理解这一点。 相关性报告可能的信号,但不报告发现。

  • 贝叶斯。 我们都知道垃圾邮件过滤器。 但还有更多。 假设你去体检,结果告诉你有癌症(我非常希望没有,但它是为了说明一点)。 事实是:此时大多数人会认为“我有癌症”。 这不是真的。 对癌症进行的阳性检测可以将人群患癌症的概率从基线(例如,每千人中有8人患有癌症,从空气中筛选出来)提高到更高的值,这不是100%。 这个数字有多高取决于测试的准确性。 如果测试不好,你可能只是一个误报。 方法越准确,偏差越高,但仍不是100%。 当然,如果多个独立的测试都证实你患有癌症,那么你很可能拥有它,但仍然不是100%。 也许它是99.999%。 这是许多人不了解贝叶斯统计的一个观点。

  • 绘图方法。 这是另一件总是无人看管的事情。 如果您无法通过简单的阴谋有效传达他们的意思,分析数据并不意味着什么。 根据您想要关注的信息或您拥有的数据类型,您会更喜欢xy图,直方图,小提琴图或饼图。

  • 现在,让我们回到你的问题。 我认为我只是在一个简短的说明中过度放松,但是因为我的答案被投票了很多,我觉得如果我正确回答你的问题,就像我的知识允许的那样更好(这里是假期,所以我可以尽情享受正如我想要的那样)

    编程,软件工程和计算机科学中的哪些问题是非常适合的统计方法? 我会在哪里获得最大的回报?

    通常情况下,所有与数据比较有关的数据都涉及来自不可靠来源的数字(或简化为数字)输入。 来自乐器的信号,一堆页面以及它们包含的单词数量。 当你得到这些数据,并且必须从一堆中找出一个精确的答案时,那么你需要统计数据。 例如,考虑在iPhone上执行点击检测的算法。 你正在使用一个颤抖,肥胖的手写笔来指一个比手写笔本身小得多的图标。 显然,硬件(电容屏幕)会向您发送一串关于手指的数据,以及一些关于随机噪声的数据(空气?不知道它是如何工作的)。 驾驶员必须从这个混乱中理解并在屏幕上给你ax,y坐标。 这需要(很多)统计。

    我应该花些时间学习什么样的统计方法?

    我告诉你的绰绰有余,也是因为了解他们,你必须通过其他的东西。

    我应该使用什么资源来学习? 书籍,论文,网站。 我希望能够讨论每本书(或其他资源)的内容,以及它为什么相关。

    我主要从标准大学课程中学到统计数据。 我的第一本书是“火车残骸书”,非常好。 我也试过这个,它着重于R,但它并没有让我特别满意。 你必须知道事情和R才能通过它。

    程序员经常需要处理大型自然语言文本数据库,并帮助分类,分类,搜索和处理它。 什么统计技术在这里有用?

    这取决于您需要使用数据集来回答的问题。

    程序员经常被要求生产高性能的系统,在负载下可以很好地扩展。 但除非你能衡量它,否则你无法真正谈论性能。 你需要用什么样的实验设计和统计工具才能够自信地说出结果是有意义的?

    测量有很多问题。 测量是一项精致而精致的艺术。 正确的测量几乎超越人类。 事实是,采样引入了来自采样器或者方法的偏差,或者来自样本的性质或者来自自然的性质。 一个好的采样者知道这些事情,并试图尽可能多地减少不需要的偏差到随机分布。

    您发布的博客中的示例是相关的。 假设你有一个数据库的启动时间。 如果你在这段时间内采取绩效评估,所有的措施都会有偏差。 没有可以告诉你的统计方法。 只有你对系统的了解可以。

    程序员通常遇到的其他问题是否会受益于统计方法?

    每次你有一个数据生产者的集合,你有统计数据,所以科学计算和数据分析显然是一个地方。 Folksonomy和社交网络几乎都是统计数据。 甚至在某种意义上,stackoverflow也是统计数据。 答案被高估的事实并不意味着它是正确的。 这意味着根据对独立评估人员的统计集合的评估,很有可能是正确的。 这些评估者的行为如何在stackoverflow,reddit和digg之间产生差异。


    我没有太多补充,但恰巧我刚开始阅读这本书:DS Sivia和J. Skilling,“数据分析 - 贝叶斯教程”,2006年第2版,牛津大学出版社。

    引起我注意的是前言,作者提到对那些接受统计学研究的人的普遍不满:

    前言

    作为一名大学生,我总是发现统计学的主题相当神秘。 这个话题对我来说并不是全新的,因为我们早在高中时就已经对一些概率进行了教育; 例如,我已经熟悉二项式,泊松分布和正态分布。 这大部分是有道理的,但似乎只涉及掷骰子,掷硬币,洗牌等等。 然而,有志成为科学家,我真正想知道的是如何分析实验数据。 因此,我急切地期待着统计讲座 。 可悲的是,他们非常失望 。 尽管所阐述的许多测试和程序在直观上是合理的, 但整件事情却令人不满:似乎没有任何基本的基本原则! 因此,“概率和统计学”课程导致了一种不幸的两分法: 概率有道理,但仅仅是一种游戏; 统计数据很重要,但它是一个令人困惑的测试集合,没有明显的韵律或理由 。 虽然对这种情况不满意,但我决定抛开这个话题,专注于真正的科学。 毕竟,困境只是我自己的不足之处的反映,当真正分析我的数据的时候,我只需要努力。

    上面的故事不仅仅是我自己的,而且也是许多科学家的常见经历。 幸运的是, 它不一定要这样 。 在我们的本科讲座中没有告诉我们的是,对于仅使用概率论的数据分析的整个主题,存在另一种方法。 从某种意义上说,它使统计学的话题完全是多余的。 另一方面,它为许多流行的统计测试和程序提供了合理的理由,明确了在其使用中隐含假定的条件和近似值

    本书旨在成为这种替代贝叶斯方法的教程指南,其中包括最大熵等现代开发。

    ...

    我希望这本书能够保持其承诺。

    本书第一版有几个预览章节,从采用本书的认知心理学/ AI课程以及本课程的其他教材。 第二作者在这里的相关软件。 这也是Google图书在这里的更多扩展预览。

    链接地址: http://www.djcxy.com/p/24923.html

    上一篇: What statistics should a programmer (or computer scientist) know?

    下一篇: Functions available for Tufte boxplots in R?