程序员(或计算机科学家)应该知道什么统计数据?
我是一名程序员,在math和计算机科学方面有着不错的背景。 我研究了可计算性,图论,线性代数,抽象代数,algorithm,以及在本科水平上的一些概率和统计(通过几个CS类)。
不过,我觉得我对统计数据不够了解。 统计学在计算中越来越有用,统计自然语言处理有助于为search和机器翻译中的一些Googlealgorithm提供帮助,对硬件,软件和networking的性能分析需要适当的统计基础,这些都是可信的,而生物信息学每天更普遍。
我已经阅读了关于“Google如何使用if语句使用贝叶斯过滤的方式” ,并且我知道Paul Graham的“垃圾邮件和更好的贝叶斯过滤 计划”中的问题,甚至是相当天真的,简单的统计方法,但我知道,我想超越这个。
我试图研究更多的统计数据,但是我已经有点失落了。 维基百科的文章有一长串的相关话题,但我不确定我应该看看。 我觉得从我所看到的情况来看,很多统计数字都假设一切都是线性组合的因素,加上一些高斯分布的随机噪声, 我想知道除了线性回归还有什么我应该学习的东西,或者我应该花时间去真正理解,然后再转向其他技术。 我发现了几本很长的书, 我应该从哪里开始?
所以我想知道从哪里去。 学什么,在哪里学习。 特别是,我想知道:
- 编程,软件工程和计算机科学中的哪些问题是非常适合的统计方法? 我将在哪里获得最大的回报?
- 我应该花些时间学习什么样的统计方法?
- 我应该使用什么资源来学习? 书籍,报纸,网站。 我希望能够讨论每本书(或其他资源)是什么,以及为什么它是相关的。
为了澄清我在寻找什么,我感兴趣的是程序员通常需要处理哪些问题可以从统计方法中受益,以及哪种统计工具是有用的。 例如:
- 程序员经常需要处理大型的自然语言文本数据库,并帮助分类,分类,search和处理。 什么统计技术在这里有用?
- 更一般地说,人工智能已经从分散的,符号的方法转向统计技术。 什么样的统计人工智能方法现在最能提供给工作程序员(而不是正在进行的研究,可能会也可能不会提供具体的结果)?
- 程序员经常被要求生产高性能的系统,在负载下可以很好地扩展。 但是除非你能测量,否则你不能谈论性能。 你需要用什么样的实验devise和统计工具来自信地说出结果是有意义的?
- 物理系统(如计算机graphics学)的模拟通常涉及随机方法。
- 程序员经常遇到的其他问题是否会受益于统计方法?
有趣的问题。 作为一个统计学家,他的兴趣越来越与计算机科学保持一致,也许我可以提供一些想法…
-
不要学习频率主义假设检验 。 虽然我的大部分工作都是以这种模式完成的,但它并不符合业务或数据挖掘的需求。 科学家一般都有特定的假设,并且可能希望衡量一个概率,假设他们的假设不是真的,那么数据就会如此极端。 这很less是计算机科学家需要的答案。
-
贝叶斯是有用的 ,即使你不知道你为什么假设你正在使用的先验。 贝叶斯分析可以给出一个精确的各种偶然事件的概率估计,但重要的是要认识到,你有这个精确估计的唯一原因是因为你对先验概率做出了一个模糊的决定。 (对于那些不知情的人,用贝叶斯推理,你可以指定一个任意的先验概率,根据收集到的数据更新这个概率,以得到一个更好的估计值)。
机器学习和分类可能是一个开始的好地方。 机器学习文献更侧重于计算机科学问题,尽pipe它的使命几乎与统计学相同(请参阅: http : //anyall.org/blog/2008/12/statistics-vs-machine-learning-fight/ ) 。
既然你谈到了大量的variables的大型数据库,这里有几个algorithm在这个领域派上用场。
- adaboost :如果你有大量蹩脚的分类器,并且想要制作一个好的分类器。 (另请参阅logit增强)
- 支持向量机 :强大而灵活的分类器。 可以学习非线性模式(如果你想挑剔,可以在非线性内核空间中线性化)。
- k-nearest neighbor :一个简单而强大的algorithm。 它不能很好地扩展,但是有近似的最近邻居select,不是那么有病态的。
- CART :该algorithm基于许多预测variables来分割数据。 如果存在可变的相互作用,或者存在一个非常好的预测因子,那么这个预测因子只适用于一部分数据。
- 最小angular度回归 :如果您试图预测的值是连续的,并且您有大量的数据和大量的预测variables。
这不是完整的,但应该给你一个很好的起点。 关于这个主题的一本非常好的书籍是Duda,Hart,Stork: Pattern Classification
另外,统计的很大一部分是描述性的可视化和分析。 这些程序员特别感兴趣,因为他们允许他/她传递信息给用户。 在R中, ggplot2是我创build可视化的首选包。 在描述性分析方面(对文本分析有用)是多维尺度 ,可以给出非空间数据的空间解释(例如参议员的意识形态http://projecteuclid.org/DPubS?service=UI&version= 1.0&verb = Display&handle = euclid.aoas / 1223908041 )。
作为一个观点,不是批评者,但是你的问题应该以不同的方式来表述:“ 任何人都应该知道什么数据?”。
事实上,不幸的是,我们都处理统计。 这是生活中的事实。 民意调查,天气预报,药物有效性,保险,当然还有一些计算机科学的部分。 能够批判性地分析所呈现的数据给出了正确理解或被欺骗之间的界限,无论如何。
说,我认为以下几点很重要
- 样本的均值,中位数,标准差以及样本和总体之间的差异(这是非常重要的)
- 分布,为什么高斯分布如此重要(中心极限定理)
- 它是什么意思与空假设testing。
- 什么是variables转换,相关性回归,多元分析。
- 什么是贝叶斯统计。
- 绘图方法。
所有这些要点不仅对你作为一名计算机科学家至关重要,对于你来说也是至关重要的。 我会给你一些例子。
-
零假设的评估对于testing方法的有效性至关重要。 例如,如果一种药物能够工作,或者如果一个修复你的硬件有一个具体的结果,或者这只是一个偶然的问题。 假设你想提高一台机器的速度,并改变硬盘。 这个改变是否重要? 你可以用旧的和新的硬盘做性能采样,并检查差异。 即使您发现新磁盘的平均值较低,并不意味着硬盘完全有效。 这里进入Null假设testing,它会给你一个置信区间,而不是一个明确的答案,如:有90%的可能性,改变硬盘驱动器有一个具体的影响你的机器的性能。
-
相关性对于发现两个实体是否“变化相似”很重要。 由于互联网的口头禅“相关不是因果关系”所教导的,应该谨慎对待。 两个随机variables显示相关性的事实并不意味着一个引起另一个,也不是相关的第三个variables(你没有测量)。 他们可以以同样的方式行事。 寻找海盗和全球变暖来了解这一点。 相关性报告可能的信号,但不报告发现。
-
贝叶斯。 我们都知道垃圾邮件filter。 但还有更多。 假设你去体检,结果告诉你有癌症(我非常希望没有,但是要说明一点)。 事实是:现在大多数人会认为“我有癌症”。 这不是真的。 对癌症进行的阳性testing将癌症从人群基线(例如,每千人中有8人患有癌症,从空气中挑出)的可能性提高到更高的值,这不是100%。 这个数字有多高取决于testing的准确性。 如果testing结果不好,你可能只是一个误报。 方法越精确,偏差越高,但仍不是100%。 当然,如果多个独立的testing都证实你有癌症,那么很有可能你真的拥有了它,但仍然不是100%。 也许是99.999%。 这是许多人不了解贝叶斯统计的一个观点。
-
绘图方法。 这是另一件总是无人看pipe的事情。 数据分析并不意味着什么,如果你不能通过一个简单的阴谋有效地传达他们的意思。 根据你想要把什么信息放在焦点上,或者你有什么样的数据,你会喜欢一个xy图,一个直方图,一个小提琴图或者一个饼图。
现在,让我们回到你的问题。 我觉得我只是一个简单的说明,但是因为我的答案被很多人投票了,所以我觉得如果我的答案正确地回答你的问题,那么我的知识就可以做得更好(这里是假期,所以我可以尽量多正如我想要的那样)
编程,软件工程和计算机科学中的哪些问题是非常适合的统计方法? 我将在哪里获得最大的回报?
通常情况下,所有与数据比较有关的数据(包括来自不可靠来源的数字(或简化为数字)input) 来自乐器的信号,一堆页面以及它们包含的词语的数量。 当你得到这些数据,并且必须从一堆中find一个精确的答案,那么你需要统计。 例如,想想在iPhone上执行点击检测的algorithm。 你正在使用一个颤抖,肥胖的手写笔来指一个比手写笔本身小得多的图标。 显然,硬件(电容屏幕)会向您发送一堆关于手指的数据,以及一些关于随机噪声(空气?不知道它是如何工作的)的数据。 驾驶员必须从这个混乱中解脱出来,并在屏幕上给予斧头,y坐标。 这需要(很多)统计。
我应该花些时间学习什么样的统计方法?
我告诉你的绰绰有余,也是因为了解他们,你必须通过其他的东西。
我应该使用什么资源来学习? 书籍,报纸,网站。 我希望能够讨论每本书(或其他资源)是什么,以及为什么它是相关的。
我主要从标准的大学课程学到统计数据。 我的第一本书是“ 火车残骸 ”,非常好。 我也尝试过这个 ,主要关注R,但是并没有让我特别满意。 你必须知道事情和R来通过它。
程序员经常需要处理自然语言中的大型文本数据库,并帮助对其进行分类,分类,search和处理。 什么统计技术在这里有用?
这取决于您需要使用数据集来回答的问题。
程序员经常被要求生产高性能的系统,在负载下可以很好地扩展。 但是除非你能测量,否则你不能谈论性能。 你需要用什么样的实验devise和统计工具来自信地说出结果是有意义的?
测量有很多问题。 测量是一种精致而精致的艺术。 适当的测量几乎超越了人类。 事实是,采样引入了来自采样者或者方法的偏差,或者来自样本的性质或者来自自然的性质。 一个好的采样者知道这些事情,并试图尽可能多地减less不必要的偏差到一个随机分布。
您发布的博客中的示例是相关的。 假设你有一个数据库的启动时间。 如果在这段时间内采取措施,所有的措施都会有偏差。 没有可以告诉你的统计方法。 只有你的系统知识可以。
程序员经常遇到的其他问题是否会受益于统计方法?
每次你有一个数据生产者的集合,你有统计数据,所以科学计算和数据分析显然是一个地方。 Folksonomy和社交networking几乎都是统计数据。 甚至在某种意义上,stackoverflow也是统计的。 答案被高估的事实并不意味着这是正确的。 这意味着根据对独立评估人员统计集合的评估,很有可能是正确的。 这些评估者的行为如何使得stackoverflow,reddit和digg的区别。
我没有太多补充,但恰巧我刚开始阅读这本书: DS Sivia与J. Skilling的“ 数据分析 – 贝叶斯教程 ”,2006年第二版,牛津大学出版社 。
引起我注意的是前言,作者提到对那些接受统计学研究的人的普遍不满:
前言
作为一名大学生,我总是发现统计学的主题相当神秘。 这个话题对我来说并不是什么新鲜事,因为早些时候我们已经在高中时就教了一点概率。 例如,我已经熟悉二项式,泊松分布和正态分布。 这大部分是有道理的,但似乎只涉及掷骰子,掷硬币,洗牌等等。 然而,有志成为科学家,我真正想知道的是如何分析实验数据。 因此,我非常期待有关统计的讲座 。 可悲的是,他们非常失望 。 尽pipe所阐述的许多testing和程序在直觉上是合理的, 但整件事情却令人深感不满:似乎没有任何基本的基本原则! 因此,“概率统计”课程导致了一个不幸的两分法: 概率是有道理的,但只是一个游戏; 统计是重要的,但这是一个令人眼花缭乱的收集testing,没有明显的韵律或理由 。 虽然对这种情况不满意,但我决定搁置这个问题,专注于真正的科学。 毕竟,困境只是我自己的不足之处的反映,当真正分析我的数据的时候,我只需要努力。
上面的故事不仅仅是我自己的,而且也是许多科学家的共同经历。 幸运的是, 它不一定是这样的 。 在我们的本科讲座中我们没有被告知的是,对于仅使用概率论的数据分析的整个主题,存在另一种方法。 从某种意义上说,这使得统计学的话题完全是多余的。 另一方面,它为许多stream行的统计testing和程序提供了合理的理由,明确了在使用中隐含假定的条件和近似值 。
本书的目的是成为这种替代贝叶斯方法的教程指南,包括最大熵等现代发展。
…
我希望这本书能够保持其承诺。
本书第一版有几个预览章节,从采用本书的认知心理学/ AI课程以及同一课程的其他材料。 第二作者在这里的相关软件。 这也是来自Google图书的更加广泛的预览。
男孩,其中一些答案是好的。 我来自同样的背景,不得不主要通过书籍和同事的渗透进入生物统计学。 这是我的build议:
-
从概率的坚实基础开始,包括条件概率,贝叶斯定理,马尔科夫模型和一些基本的统计分布。
-
如果你没有它,得到一些线性代数,所以你不会被matrix吓到。 如果你面对棘手的代数和微积分,请closures并通过它。 这很值得。
-
统计理论分为两个阵营,频发者和贝叶斯。 频繁主义者年纪大而且坚实。 贝叶斯更新,更灵活,更令人兴奋。 尤其是,马尔可夫链蒙特卡罗(Monte Carlo)和相关技术可以做出令人兴奋的事情。
在我所领域的药剂学领域,能够从稀疏和昂贵的数据中提取有意义的结果是很高的收益,因此统计能力是非常重要的。
补充:这里有一些最喜欢的书(不是完整的列表):
-
“ 统计分布 ”,第二版,由埃文斯,黑斯廷斯和孔雀。 它给出了一个非常完整的分布列表,告诉他们如何相关,如何抽样和估计它们。 我每天都用它。
-
“ matrix和线性代数 ”,施耐德和巴克。 非常好,容易遵循。
-
贝叶斯统计:介绍 “,第2版,由李。 非常简洁,易于阅读。
-
由Gilks,Richardson和Spiegelhalter撰写的“ Markov Chain Monte Carlo in Practice ”。 喜欢这本书,这些都是制作WinBugs的人,这是一个非常棒的免费软件包。
比统计更可能,但贝叶斯概率可能是非常有用的(它支撑垃圾邮件filter),IMO更多的软件应该使用它来推断用户的习惯。
Head First Statistics是学习统计学的优秀书籍(一位math家/统计学家告诉我,它没有太多的错误,只是理论上的一些简单)。
我几乎忘了提及: 如何统计
好问题! 我其实觉得值得回头一步,看看更广阔的景象。 比如我在Zed的咆哮中所喜欢的就是在开始时:
我怀疑他们的指标,他们试图在统计推理上蹩脚的尝试来支持它。 我真的不能责怪他们,因为他们在大学可能被告知逻辑和理由优于证据和观察。
这对我来说强调对经验主义的需要。 当然,我听到你说,你知道,这就是为什么你的configuration文件。 那么,是的,但实际上不止于此。 Zed重新回到了平均水平,我认为这是正确的:显示分布,绘制数据,观察尾部行为。
所以我想要的是,答案不在一本书中,而在于更多地思考问题 ,把世界视为概率 。
而且我也发现R对数据的思考和编程有很大的帮助。
关于编程的一个很好的资源是Russell和Norvig的“人工智能:现代方法”。 理解基于统计的机器学习技术可能是一个非常有用的资源。
这里有一本很好的书,可以在网上免费获得:Hastie,Tsibshirani和Freidman的“统计学习元素” 。
它涵盖了一系列有用的主题,应该是对机器学习领域的一个很好的介绍。 这是对过度拟合模型的解释是我所见过的最好的,我读过的20-30本书。
多么伟大的线程。 在这个问题本身和答案中有很多很好的信息,但是我真的很惊讶没有人提到“ 编程集体智慧 ”一书。
如果你是这个学科的新手(像我一样),并且希望把机器学习和统计理论付诸实践,这是我认识的最好的书。
这本书解释:
- 协作过滤技术,使在线零售商推荐产品或媒体
- 聚类方法检测大型数据集中类似项目的组
- search引擎function – search器,索引器,查询引擎和PageRankalgorithm
- 优化algorithm,search数以百万计的可能解决scheme的问题,并select最好的一个
贝叶斯过滤,用于垃圾邮件filter,用于根据单词types和其他特征对文档进行分类
使用决策树不仅可以做出预测,而且可以模拟决策的方式
- 预测数值而不是分类来build立价格模型
- 支持vector机器,以匹配网上交友网站的人
- 非负matrix分解法寻找adataset中的独立特征
- 不断发展的问题解决智能 – 计算机如何通过改进自己的代码来发展自己的技能,游戏就越多
除此之外, 关于TED为什么每个人都应该学习统计的问题都有很好的讨论 。
我希望如果我们大多数程序员都不需要知道关于统计,概率或者math的任何知识,那么肖先生和其他所有人都可以。
尽pipemath成绩优异,这是我过去30年来的经历。
所以,这个问题的标题应该是“程序员应该知道统计信息是否需要统计?”
我很惊讶没有人提到对graphics的敏锐理解对于良好的统计实践至关重要。 机器学习和贝叶斯分析是非常棒的(如果你想对贝叶斯进行一个正式但平易近人的应用介绍,请试试Gelman的书 ),但是你可以通过非常好的可视化来理解一个问题。 Tufte的经典是一个开始的好地方,graphics书籍的经典符号学和语法值得一读。 最后,看看R ggplot2软件包 ,开始实现复杂的graphics思想。
也许看看(免费)书, 思考统计:程序员的概率和统计 。 虽然它使用Python来演示统计概念,但任何具有其他编程语言经验的人都应该能够跟随。
网站描述:
Think Stats是Python程序员的概率和统计学介绍。
如果你有Python的基本技能,你可以用它们学习概率和统计的概念。 这本新书强调简单的技术,您可以使用探索真正的数据集和回答有趣的统计问题。
这只取决于你正在从事的领域。例如,如果你正在处理涉及抽样和数据分析的应用程序,分布(Normal,t和Chi Square)等领域将是有用的。 而如果你的应用程序是类似预测软件的话,你可能需要关于poisson等分布的知识。
如果您的工具将根据以前的数据做出一些决定,那么平均值,方差和标准差的想法可能是有用的。 (用假设testing)
更新:大多数大学提供统计课程。 我看过一些可以认为简短但仍然很好的讲义。 例
你可以用平均值和标准差做很多。
这完全取决于你将要处理的问题。
我会说在“统计”(2004年),由拉里Wasserman它的东西是正确的。 它还具有提出统计学和计算机科学之间的差距的想法的优势。
希望它有帮助。
我的简短答案是:潜variables统计,包括结构方程build模和有限混合模型(潜在类/概况)。 这些涵盖了大量的统计模型。
没有人提到Bootstrap方法,主成分分析或LASSOalgorithm,这真是太神奇了。 它们涵盖了数据缩减,模拟和探索性数据分析等等。