大数据自下而上:算法和统计学完美的结合
从理论上来说有这样终极的目标:给定一个可以推理的目标,同时确定固定的计算时间,提供由算法和分析支撑的保证,按小时、分钟、秒进行计算,推论的质量将会随着数据的精确性而单调递增,并且是没有边界的无线增长。随着数据无边界的增长,遇到很大的麻烦,我们每一代人都需要面对。我们想一次解决,有什么样的办法可以推理积累的大量数据?需要花时间解决,这可能需要几十年才能解决。
我们看一下目前的进展。其中一个就是自下而上的办法,将算法原理和统计学的推论完美地结合在一起。这些算法原则上来讲,可以放在一个环境当中,我们选一些分治的方法来解决。这些难题,我们聚合起来,聚合的越多,这些错就越少,更好做一些。然后分开相互之间相互矛盾的数据,包括统计数字,还有计算机科学的数字,可以避免带来很大的麻烦。然后再回到我们理论上的问题,如何进行权衡,提高我们计算的效率。
1.大数据引导程序(The bootstrap)
首先第一个问题,我们叫做大数据的引导程序,我们在伯克利几年前做过这样的工作。这个引导程序能够解决一些非常重要的问题--评价推论的质量。很多有学识的研究者并不太关注推论的质量。输入数据到一个盒子里面,然后得到一个答案,是9.5.但是多数的决策并不能满足要求,要知道9.5里面的差错率多大?如果这个数字超过10的话,就要把肝切掉了,如果是9.5的话还可以。所以,这是真正的9.5吗?还存在很大的误差吗?或者是没有超过10吗?如果真正做出真实的决策时,是没有误差这个栏的考虑,但是计算机科学家们需要对这个有很深的了解。所以我们要进行工作,能够在数据库的社区里面建立一些数据库,能够输入,然后再输出,同时有一个非常清楚明白的误差栏。
现在让我们进入到另外一个领域,进入到统计学里面怎么样呢?很有意思的一点就是在非常简单的事情上,我们抽样,根据有相关的公式,可以通过这样的途径进行了解。比如说我们根据抽样里面的差异性,加上知道差错率,如果不讲差错率,有一个中等的情况,比如说10.2,那这个误差是多少呢?并没有这样的公式在里面。我们怎么知道一般情况中存在的差异性?我们有一个通常叫做的程序框架,能够应对快速扩展的大数据,并且计算误差率。
到底推断的质量如何?我们观察的数据包括机器的误差率和基于数据进行参数的预测。我们叫做形成一种参数的预估值。就像一条程序、一个黑匣子,到底有多少的误差在里面,这是我们所关注的。通过对程序进行计算,了解数据指标情况,如果想做一个理想的统计学家的话,还要对它进行科学的定义。
所谓的频率主义者,每一个数据都会要计算中间的情况,还有一些预估估算,不同的数据级进行浮动,你看浮动的范围就带来这种所谓的误差率。从这个定义来说,这个误差率是什么,误差率就是指你还需要更多的时间分析这些数据。如果你没有大量的数据,你不能够对这些数据进行一次又一次的检验,并同时看他们之间的浮动。如果没有一个数据集的话,就可以一次性去做,看看生成的情况,我们只有一个数据集。
我们设想一下,如何分析这些问题,解决这些问题,即使只有一个数据集。这些数据来自什么地方,有这样的一些群体,比如说在我们这里生成一些数据,有一个曲线可以反映出相关的群体。如果是一个一般不存在的东西,上面有一个幻灯片,可以形成一个数据集,两个数据集,对每个数据集进行计算,你所在意的都是一些数据的预测,然后得到一个公式。可以做计算机的并击处理,生成一个数据的处理,每一个计算机可以进入一个预估值,然后可以在估算当中产生一些误差。然后这个里面我们没有多个数据级,我们不能这样去做。我们观察有一个数据来自这样的群体,然后这些数据不是列出来的数据,这些数据的分布图是分布式,可以生成越来越多的数据。这种分布尽管不可以换,但是你可以从中抽样。我们叫做近似值,基本上是真实的。[page]
所以说,这是非常微妙、深层的理念,拿过一个数据级生成多个数据级,这个叫做引导程序。1979年的时候拿到的一个大奖,这里其实是非常简单的理念。尽管1979年还没有云的语言等,也是可以这样做。你可以用于任何的查询上,为什么不把所有的数据库从云上取样,听起来是非常好的理念。但是,这可以在我们计算机科学里面有更加好的应用。我们的一些数据在服务器上已经分布了,如果重新抽样,数据级拿过来,从里面进行抽样,得先返回去,再回到这个地方。意味着什么呢?从这个上面进行取样,讲的更清楚一些,就是基于终端的数据,这是一个分布式的,可以从任何一侧进行取样。比如说从一天当中这个数据发生的时间当中取样,同样一个大的数据级可以做一次,然后反复的做,这又意味着什么?如果这样取样的话,从其中一个点上分布,可以得到其中一个点,然后按比例的高度划分,我得到这一点,再次做一下,可以获得同样的点。做N次,在某些点上可以得到很多次。这跟我们取样和替代一样,把一个样品拿过来然后再返回去,反复地做。
我们经常描述,把最初的数据拿过来重新取样,然后做很多次,就是所谓的引导程序。数据点上有替代,可以做数学计算,0.632次,如果有这个取样的话,就有632个。不能做这么大,这是我们主要的程序,在随意的预估上,可以达到引导程序,已经超越一些小数据了,这是可能会带来的一些问题。
2.二次抽样(Subsampling)
还有另外一个方面,就是统计学家们做的。他们需要有竞争力,出现另外一个程序的话,它也可以来解决,叫做二次取样。二次取样跟以前一样,进行一个取样,在这个里面可能太大了,我们用一个子抽样,或者再次的抽样,进行一个划分。我们很快的到预估值上,在这个B点上得到9.5的数字,我可以再次去做,把B点从N点里面取出来,可以做很多次。我们可以有多少的估算值,还有这样的浮动,听起来很好,一个数据级,我得到各种估算值,问题就是是否正确。因为B点,预算值大小取决于N点的数量,这个取样是来了解这些误差。我们可以有这样的浮动,规模不一样的,尺寸大小不一样,错就错了。所以不能进行二次抽样估算得到答案,这个答案是错误的。
这里关键问题产生了,这个比例是错了,这个值太大了,因为这个数据级太小了。我们重新设定他们的尺寸,这样一个比例怎么进行设置?一般不知道怎么做。对于像一个黑匣子一样,在数据库里面放一些东西,用户定义的功能,就不知道它的尺寸多大,然后还有一定数量的数据点等,这也是一个问题,你必须要从理论上针对每一个黑匣子去做。更加严重的问题是,如果在现实中使用的话,如果是工程上的默认,这里有一个例子,50000个合成数字,我们还有一些计算,我们用合成的方法做,知道真正的Airbas是什么,这是我们做的结果。再强调一点,这里并没有任何二次的抽样,只需要1.5次的工作,就可以进行取样。
这里误差有一个核算,我们有合成的数据。X轴上看到的时间,运行的是二次取样,不同的取向,还有y轴上,你可以看到0.5在这个上面,这个误差是很坏的,这个蓝色的点是一个蓝色的程序,这是Bootstrap的对象,可以很快的稳定走下来。我们可以来把这个误差变成0,然后我们可以进行平均,在这个上面,并不是要达到Bootstrap,在合理的范围内,我们达到6,这个还是有问题的,然后在7、6.8,然后在绿色的线下面,他们更有效的使用我们的引导程序,引导程序的效率是很高的。它也是有一个N的融合。这个B是一个最中心的限制,我们感到很惊讶,就是在80年代论证的时候。
对于这些我可以看到非常好的结果,现在的0.9是这个浅绿色又出现问题了,它还重复出现,但是这个值我们还不知道,我们知道这是真实的地方,正确的价值,但是现实当中我们是无法知道的。工程师的一些方法有的时候是做不到的。[page]
3.新流程的小“自助包”(Bag of little bootstraps)
我们还有另外一个理念“小自助包”,我将会讨论新的步骤结合引导程序和二次抽样,并且运用他们最好的部分。同小部分的数据一起,比如说二次抽样和同样适合分布式计算平台。但是,与引导程序相同,它并不需要分析的部分,所以想到一些理念,我们的Bootstraps运行40多年了,统计学家不会有任何的程序上的担心。
再回到这个图片,我们还有真实性,还有数据级,还有一个Size B,进行重新的取样。现在我们注意到这个Size
B的数据是来自于周围的一个步骤,他们还是间接的来自下面一个真实的情况。我们继续看我们的子集,图片看上去不太好,现在的N不是10,想一下预估值和估算值也是非常好的近似值。然后不要考虑这是否是真实的,你现在面临这样的世界,你是一个大家伙,这是你真实的情况。你可以进行抽样,基于我们的B点,它是一种分布,你可以来去抽样,按你所需要的次数,多少次都可以,只要能想到的。你把这个对象拿过来,然后你可以及时的进行抽样,现在在正确的比例值上,有合适的数据级是需要的。其中很多点会重复很多次。
然后我们多次的对它进行取样,在某些点可能完全不做,然后我们有B点,觉得它非常小,我们觉得它是分布式的。我们有一个非常好的叫做B取样的分子级,我不想去分析它,尽管这是一个本地的网络,但是也不会把它分散。所以每一个B点会多少次被二次取样,这些数据在什么地方,我们可以把这个放在原来的基础上,我们可以做多次的事情,再做引导程序,这样的话,我们把子取样进行引导,有一张图作为我的总结。
这个流程比较复杂,你把B取样的一个子样,然后放在一个数据级上,然后又替代一段时间内,你获得的值,因此上面是一个处理器,它有一个引导程序,我们为什么不用一个框进行解决问题呢?他是一个比较小的取样,它是正确的,但是有很多的噪音,我们必须要平均。所以必须需要多个框,可能需要200个处理器都执行同样的一个计算的流程。那么,他们可能都会有一个平均的错误率。
这是有效的,首先回到一个TB的问题,N=N的6次方,比如说我们子样数据级的大小是4GB,而再次取样的数据级别也是4GB,那么这张图和刚才那张图是一样的。就是在一个数据集上,加大计算机的利用率。如果在真正的分布式的计算环境里面做,我想应该是0.5TB,会在一个大的数据库里会发生什么呢?我们看一下引导程序,不可能进行并行化,我们使用并行计算,通过机器学习,做第一个再取样,再做一次,然后再并行计算的计算机上进行Bootstraps计算,大概15000秒的时间获得一个合理的答案,对于应用来说稍微有一点慢了。所以我们现在怎么做?我们有一个算法。对于0.5TB的数据,放到所有本地的200个处理器上,也就是说这个红点的位置,然后再取样,再做引导程序。我以前在机器学习方面,我不可能有这样的图做出来,只是20%、30%的完善。这却改变了并行计算的方式,我们可以进行非常大型的一种引导程序,我们现在可以在数据库中做,我们正在开发关系型的数据库当中。
数据分析咨询请扫描二维码
数据分析需要学习的内容非常广泛,涵盖了从理论知识到实际技能的多个方面。以下是数据分析所需学习的主要内容: 数学和统计学 ...
2024-11-24数据分析师需要具备一系列多方面的技能和能力,以应对复杂的数据分析任务和业务需求。以下是数据分析师所需的主要能力: 统计 ...
2024-11-24数据分析师需要学习的课程内容非常广泛,涵盖了从基础理论到实际应用的多个方面。以下是根据我搜索到的资料整理出的数据分析师需 ...
2024-11-24《Python数据分析极简入门》 第2节 6 Pandas合并连接 在pandas中,有多种方法可以合并和拼接数据。常见的方法包括append()、conc ...
2024-11-24《Python数据分析极简入门》 第2节 5 Pandas数学计算 importpandasaspdd=np.array([[81,&n ...
2024-11-23数据分析涉及多个方面的学习,包括理论知识和实践技能。以下是数据分析需要学习的主要方面: 基础知识: 数据分析的基本概念 ...
2024-11-22数据分析适合在多个单位工作,包括但不限于以下领域: 金融行业:金融行业对数据分析人才的需求非常大,数据分析师可以从事经 ...
2024-11-22数据分析是一种涉及从大量数据中提取有用信息和洞察力的过程。其工作内容主要包括以下几个方面: 数据收集与整理:数据分析师 ...
2024-11-22数据分析师需要掌握多种技能,以确保能够有效地处理和分析数据,并为业务决策提供支持。以下是数据分析师需要掌握的主要技能: ...
2024-11-22数据开发和数据分析是两个密切相关但又有所区别的领域。以下是它们的主要区别: 定义和目标: 数据开发:数据开发涉及数据的 ...
2024-11-22数据架构师是负责设计和管理企业数据架构的关键角色,其职责涵盖了多个方面,包括数据治理、数据模型设计、数据仓库构建、数据安 ...
2024-11-22数据分析师需要具备一系列技能,以确保能够有效地处理、分析和解释数据,从而支持决策制定。以下是数据分析师所需的关键技能: ...
2024-11-22数据分析师需要具备一系列技能,以确保能够有效地处理、分析和解释数据,从而支持决策制定。以下是数据分析师所需的关键技能: ...
2024-11-22数据分析师需要具备一系列的技能和能力,以确保能够有效地处理、分析和解释数据,从而支持业务决策。以下是数据分析师所需的主要 ...
2024-11-22需求持续增长 - 未来数据分析师需求将持续上升,企业对数据驱动决策的依赖加深。 - 预测到2025年,中国将需要高达220万的数据人 ...
2024-11-22《Python数据分析极简入门》 第2节 4 Pandas条件查询 在pandas中,可以使用条件筛选来选择满足特定条件的数据 importpanda ...
2024-11-22数据分析师的工作内容涉及多个方面,主要包括数据的收集、整理、分析和可视化,以支持商业决策和问题解决。以下是数据分析师的一 ...
2024-11-21数据分析师必须掌握的技能可以从多个方面进行归纳和总结。以下是数据分析师需要具备的主要技能: 统计学基础:数据分析师需要 ...
2024-11-21数据分析入门的难易程度因人而异,总体来看,入门并不算特别困难,但需要一定的学习和实践积累。 入门难度:数据分析入门相对 ...
2024-11-21数据分析是一项通过收集、整理和解释数据来发现有用信息的过程,它在现代社会中具有广泛的应用和重要性。数据分析能够帮助人们更 ...
2024-11-21