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




8 Answers

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

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

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

  • 样本的均值,中位数,标准差以及样本总体之间的差异(这非常重要)
  • 分布以及为什么高斯分布如此重要(中心极限定理)
  • 它是什么意思与空假设测试。
  • 什么是变量变换,相关,回归,多变量分析。
  • 什么是贝叶斯统计。
  • 绘图方法。

所有这些要点不仅对你作为一名计算机科学家至关重要,而且对于你来说也是一个人。 我会举几个例子。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

performance r statistics nlp

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

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

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

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

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

  1. 编程,软件工程和计算机科学中的哪些问题是非常适合的统计方法? 我会在哪里获得最大的回报?
  2. 我应该花些时间学习什么样的统计方法?
  3. 我应该使用什么资源来学习? 书籍,论文,网站。 我希望能够讨论每本书(或其他资源)的内容,以及它为什么相关。

为了澄清我所寻找的内容,我对程序员通常需要处理哪些问题可以从统计方法中受益以及哪些类型的统计工具可能有用感兴趣。 例如:

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



男孩,其中一些答案很好。 我来自相同的背景,不得不主要通过书籍和同事的渗透进入生物统计学。 这是我的建议:

  • 从概率上开始,包括条件概率,贝叶斯定理,马尔可夫模型和一些基本的统计分布。

  • 如果你没有它,得到一些线性代数,所以你不会被矩阵吓倒。 如果你面对棘手的代数和微积分,就要努力学习并穿过它。 这很值得。

  • 统计理论分为两个阵营,频率主义者和贝叶斯。 频繁主义者年龄较大且稳固。 贝叶斯更新,更灵活,更令人兴奋。 特别是,马尔可夫链蒙特卡罗和相关技术可以完成令人兴奋的事情。

在我的领域,药剂学方面,能够从稀疏和昂贵的数据中提取有意义的结果具有很高的收益,因此统计能力非常重要。

补充:这里有一些最喜欢的书(不是完整的列表):

  • 统计分布 ”,第二版,由埃文斯,黑斯廷斯和孔雀。 它给出了一个非常完整的发行清单,告诉它们如何相关,如何对它们进行抽样和估计。 我每天都用它。

  • 矩阵和线性代数 ”,施奈德和巴克。 非常好,容易遵循。

  • Bayesian Statistics:An Introduction ”,第二版,Lee。 非常简洁,易于阅读。

  • 马尔科夫链在实践中的蒙特卡洛 ”,Gilks​​,Richardson和Spiegelhalter。 喜欢这本书,这些都是制作WinBugs的人,这是一个非常棒的免费软件包。




伟大的问题! 我其实觉得值得回过头一分钟,看看更广阔的景象。 例如,我在Zed的咆哮中喜欢的东西接近开头:

我质疑他们的指标,他们试图通过统计推理的蹩脚尝试来支持它们。 我真的不能责怪他们,因为他们在大学可能被告知,逻辑和理由优于证据和观察。

这对我来说强调对经验主义的需要。 当然,我听到你说,你知道这一点 ,这就是为什么你的个人资料。 嗯,是的,但真的不止这些。 Zed重新回到了平均水平,我认为这是正确的:显示分布,绘制数据,观察尾部行为。

所以我想要的是,答案不在一本书中,而在于更多的思考问题 ,把世界视为概率

而且我也发现R对数据的思考和编程有很大的帮助。




关于编程的一个很好的资源是Russell和Norvig的“人工智能:一种现代方法”。 它可以是理解基于统计的机器学习技术的非常有用的资源。




我希望如果我们大多数程序员都不需要知道关于统计,概率或数学的任何信息,那么肖先生和其他人都可以。

尽管数学成绩优异,这是我过去30年来的经历。

所以,也许这个问题的标题应该是:“程序员应该知道他需要知道统计信息的统计数字?”




也许看看(免费)书籍Think Think:程序员的概率和统计 。 尽管它使用Python来演示统计概念,但任何具有其他编程语言经验的人都应该能够遵循。

网站描述:

Think Stats是Python程序员的概率和统计学介绍。

如果你有Python的基本技能,你可以使用它们来学习概率和统计学的概念。 这本新书强调简单的技巧,您可以使用它来探索真实的数据集并回答有趣的统计问题。




我的简短答案是:潜变量统计,包括结构方程建模和有限混合建模(潜在类/概况)。 这些涵盖了大量的统计模型。




我想说的是Larry Wasserman的“All of Statistics”(2004)中的内容。 它还具有提出统计与计算机科学之间差距的想法。

希望它有帮助。




Related