主要内容

使用高数组的大数据统计和机器学习

这个例子展示了如何使用MATLAB®和Statistics and machine learning Toolbox™对内存不足的数据进行统计分析和机器学习。

高数组和表是为处理内存不足的数据而设计的。这种类型的数据由非常多的行(观测值)组成,而列(变量)的数量较少。不需要编写专门的代码来考虑庞大的数据量(例如MapReduce),您可以使用高数组以类似于内存中的MATLAB数组的方式处理大型数据集。基本区别在于,在请求执行计算之前,通常不计算高数组。

在高数组上执行计算时,MATLAB®使用并行池(如果有并行计算工具箱™,则默认为并行池)或本地MATLAB会话。若要在具有并行计算工具箱时使用本地MATLAB会话运行示例,请使用mapreduce函数。

mapreduce (0)

这个示例使用一台计算机上的数据子集来开发一个线性回归模型,然后扩展到分析所有数据集。您可以进一步扩展此分析:

  • 处理无法读入内存的数据

  • 使用MATLAB并行服务器™处理跨集群分布的数据

  • 与Hadoop®和Spark®等大数据系统集成

高阵列机器学习导论

统计和机器学习工具箱中的几种无监督和有监督学习算法可与高数组一起使用内存不足的数据执行数据挖掘和预测建模。这些算法适用于内存不足的数据,并且可以包括与内存内算法的轻微变化。功能包括:

  • k - means聚类

  • 线性回归

  • 广义线性回归

  • 逻辑回归

  • 判别分析

在MATLAB中,内存外数据的机器学习工作流类似于内存内数据:

  1. 进行预处理

  2. 探索

  3. 开发模型

  4. 验证模型

  5. 扩展到更大的数据

本例在开发航班延误预测模型时遵循了类似的结构。这些数据包括1987年到2008年的大量航空公司航班信息。这个示例的目标是基于一些变量来预测出发延迟。

示例中包含了有关tall数组基本方面的详细信息在MATLAB中使用高数组分析大数据.这个示例扩展了分析,包括使用高数组的机器学习。

创建航空公司数据高表

数据存储是存储大到无法装入内存的数据集合的存储库。可以从许多不同的文件格式创建数据存储,作为从外部数据源创建高数组的第一步。

为示例文件创建一个数据存储airlinesmall.csv.选择感兴趣的变量,处理“NA”值作为缺失的数据,并生成数据的预览表。

Ds =数据存储(fullfile(matlabroot,“工具箱”matlab的“演示”“airlinesmall.csv”));ds。SelectedVariableNames = {“年”“月”“DayofMonth”“DayOfWeek”...“DepTime”“ArrDelay”“DepDelay”“距离”};ds。TreatAsMissing =“NA”;预=预览(ds)
pre =8×8表Year Month DayofMonth DayOfWeek DepTime ArrDelay DepDelay Distance _________ __________ _________ _______ ________ ________ ________ 1987 1021 3 642 8 12 308 1987 10 26 1 1021 8 1 296 1987 10 23 5 2055 21 20 480 1987 10 23 5 1332 13 12 296 1987 10 22 4 629 4 1 373 1987 10 28 3 1446 59 63 308 1987 10 8 4 928 3 -2 447 1987 10 10 6 6 859 11 1 954

创建一个由数据存储支持的高表,以方便处理数据。高数组的底层数据类型取决于数据存储的类型。在本例中,数据存储是表格文本,并返回一个高表。显示包括数据的预览,并指示大小未知。

Tt =高(ds)
tt = Mx8高表年月DayofMonth DayOfWeek DepTime ArrDelay DepDelay距离  ____ _____ __________ _________ _______ ________ ________ ________ 1987 10 21 3 642 8 308 1987 10 26 1 1021 8 1 296 1987 10 23 5 2055 21 480 1987 10 23 5 1332 13 629年12 296 1987 10 22日4 4 1 373 1987 10 28 1446 59 63 308 1987 928 4 3 2 447 1987 10 10 6 859 11 954  : : : : : : : : : : : : : : : :

数据进行预处理

这个示例旨在更详细地探索一天中的时间和一周中的一天。将星期几转换为带标签的分类数据,并从数值出发时间变量确定一天中的小时。

tt。DayOfWeek =绝对的(tt。DayOfWeek 1:7, {“太阳”“我的”“面前”...“结婚”“星期四”“星期五”“坐”});tt。人力资源= discretize(tt.DepTime,0:100:2400,0:23)
tt = Mx9高表年月DayofMonth DayOfWeek DepTime ArrDelay DepDelay距离人力资源  ____ _____ __________ _________ _______ ________ ________ ________ __ 21个外胎1987 642 8 1021 308 6 1987年10 26太阳8 2055 296 1987 10 23日星期四21 480 296 1987 10 1332年清华23日13 12 13 1987 629 22结婚4 1 373 6 1987 10 28外胎1446 59 63 308 928 1987 10 8结婚3 2 447 9 1987 10 859星期五11 1 954 8  : : : : : : : : : : : : : : : : : :

只包括2000年以后的年份,并忽略缺少数据的行。通过逻辑条件识别感兴趣的数据。

Idx = tt。一年>= 2000 &...~任何(ismissing (tt), 2);Tt = Tt (idx,:);

分组浏览数据

对于高数组,有许多探索性函数可用。例如,grpstats函数计算高数组的分组统计信息。使用按星期分组的汇总统计信息,通过确定数据的中心性和分布来探索数据。同时,探讨出发延误与到达延误之间的相关性。

G = grpstats(tt(:,{“ArrDelay”“DepDelay”“DayOfWeek”}),“DayOfWeek”...“的意思是”“性病”“偏斜”“峰度”})
g = Mx11高表GroupLabel DayOfWeek GroupCount mean_ArrDelay std_ArrDelay skewness_ArrDelay kurtosis_ArrDelay mean_DepDelay std_DepDelay skewness_DepDelay kurtosis_DepDelay  __________ _________ __________ _____________ ____________ _________________ _________________ _____________ ____________ _________________ _________________ ?????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : : : : : : : : : : : : : : : : : : : : : :
C = corr(tt.DepDelay,tt.ArrDelay)
C = MxNx…高阵???...???...? ? ? ... : : : : : :

这些命令会生成更多的高数组。直到显式地将结果收集到工作区中,才执行这些命令。的收集命令触发执行,并尝试最小化执行计算所需的数据遍历次数。收集要求结果变量适合内存。

[statsByDay,C] = collect (g,C)
使用本地MATLAB会话评估tall表达式:-通过1 / 1:在3.3秒内完成评估在4.4秒内完成
statsByDay =7×11表GroupLabel DayOfWeek GroupCount mean_ArrDelay std_ArrDelay skewness_ArrDelay kurtosis_ArrDelay mean_DepDelay std_DepDelay skewness_DepDelay kurtosis_DepDelay  __________ _________ __________ _____________ ____________ _________________ _________________ _____________ ____________ _________________ _________________ {' 星期五的}星期五7339 4.1512 32.1 7.082 120.53 7.0857 29.339 8.9387 168.37{‘我的’}Mon 8443 5.2487 32.453 4.5811 37.175 6.8319 28.573 5.6468 50.271{“坐”}坐8045 7.132 33.108 3.645722.991 9.1557 29.731 4.5135 31.228 {'Sun'} Sun 8570 7.7515 36.003 5.7943 80.91 9.3324 32.516 7.2146 118.25 {'Thu'} Thu 8601 10.053 36.18 4.1381 37.051 10.923 34.708 1.1414 138.38 {'Tues'} Tues 8381 6.4786 32.322 4.374 38.694 7.6083 28.394 5.2012 46.249 {'Wed'} Wed 8489 9.3324 37.406 5.1638 57.479 10 33.426 6.4336 85.426
C = 0.8966

包含结果的变量现在是Workspace中的内存变量。根据这些计算,数据中会出现变化,您可以进一步研究延迟之间的相关性。

探索星期几和小时的影响,并获得额外的统计信息,如平均值的标准误差和平均值的95%置信区间。您可以传递整个高表并指定要对哪些变量执行计算。

byDayHr = grpstats(tt,{“人力资源”“DayOfWeek”},...“的意思是”扫描电镜的“meanci”},“DataVar”“DepDelay”);byDayHr = gather(byDayHr);
使用本地MATLAB会话评估tall表达式:-通过1 / 1:在3.8秒内完成评估在4.5秒内完成

由于tall数组的数据分区,输出可能是无序的。重新排列内存中的数据,以便进一步研究。

x = unstack(byDayHr(:,{“人力资源”“DayOfWeek”“mean_DepDelay”}),...“mean_DepDelay”“DayOfWeek”);X = sortrows(X)
x =24×8表人力资源孙Mon外胎结婚星期四星期五坐  __ _______ ________ ________ _______ _______ _______ _______ 0 38.519 71.914 39.656 34.667 90 25.536 65.579 45.846 27.875 93.6 125.23 52.765 38.091 29.182 - 2南39 102 78.25 - -1.5南南南南南南-7.3333 - -10.5 -377.5 -6.2857 53.5南4 7 7 5南5 6 -2.2409 -3.7099 -4.0146 -3.9565 -3.5897 -3.5766 -4.1474 0.4 -1.8909 -1.9802 -1.8304 -1.3578 0.84161 -2.2537 7 8 3.4173 -0.47222 -0.18893 0.71546 0.08 1.069 -1.3221 2.3759 1.4054 1.6745 2.2345 2.96681.6727 0.88213 9 2.5325 1.6805 2.7656 2.683 5.6138 3.4838 2.5011 10 6.37 5.2868 3.6822 7.5773 5.3372 6.9391 4.5939 5.5936 7.0435 4.8989 5.2839 12 5.673 5.1193 5.7081 7.9178 7.5269 8.0625 7.4686 13 8.0879 7.1017 5.0857 8.8082 8.2878 8.0675 6.2107 14 9.5164 5.8343 7.416 9.5954 8.6667 6.0677 8.444 15 8.1257 4.8802 7.4726 9.8674 10.235 7.167 8.6219

在高数组中可视化数据

目前,您可以使用柱状图histogram2binScatterPlot,ksdensity.可视化都触发执行,类似于调用收集函数。

使用binScatterPlot来考察之间的关系人力资源而且DepDelay变量。

binScatterPlot (tt.Hr tt.DepDelay,“伽马”, 0.25)
使用本地MATLAB会话计算tall表达式:-通过1 / 1:在1.6秒内完成评估,在2.2秒内完成评估,使用本地MATLAB会话计算tall表达式:-通过1 / 1:在1.4秒内完成评估,在1.5秒内完成
Ylim ([0 500]) xlabel(“一天中的时间”) ylabel (“延迟(分钟)”

{

正如输出显示中所指出的,可视化通常需要两次遍历数据:一次执行分箱,一次执行分箱计算并生成可视化。

将数据分成训练集和验证集

为了开发机器学习模型,保留一部分数据用于训练和开发模型,另一部分数据用于测试模型是很有用的。有许多方法可以将数据分割为训练集和验证集。

使用datasample获得随机抽样的数据。然后使用cvpartition将数据划分为测试集和训练集。要获得非分层分区,可以通过将数据样本乘以0来设置统一分组变量。

为了重现性,设置随机数发生器的种子使用tallrng.根据工作人员的数量和tall数组的执行环境,结果可能有所不同。详细信息请参见控制代码运行的位置

tallrng (“默认”) data = datasample(tt,25000,“替换”、假);group = 0*data.DepDelay;Y = cvpartition(groups,“坚持”, 1/3);dataTrain =数据(训练(y),:);dataTest =数据(测试(y),:);

拟合监督学习模型

建立基于多个变量的出发延误预测模型。线性回归模型函数fitlm行为类似于内存中的函数。但是,使用tall数组的计算将导致CompactLinearModel,这对于大数据集更有效。模型拟合触发执行,因为它是一个迭代过程。

model = fitlm(dataTrain,“ResponseVar”“DepDelay”
使用本地MATLAB会话评估tall表达式:-通过2中的第1步:在1.1秒内完成-通过2中的第2步:在3.8秒内完成评估在5.6秒内完成
模型=紧凑线性回归模型:DepDelay ~[8个预测因子中9项的线性公式]估计SE tStat pValue __________ __________ ________ __________ (Intercept) 30.715 75.873 0.40482 0.68562 Year -0.01585 0.037853 -0.41872 0.67543 Month 0.03009 0.028097 1.0709 0.28421 DayofMonth -0.0094266 0.010903 -0.86457 0.38729 DayOfWeek_Mon -0.36333 0.35527 -1.0227 0.30648 DayOfWeek_Tues -0.2858 0.35245 -0.81091 0.41743 DayOfWeek_Wed -0.56082 0.35309 -1.5883 0.11224 DayOfWeek_Thu -0.25295 0.35239 -0.71782 0.47288 DayOfWeek_Fri 0.45668 0.36625 2.5056 0.012234 DayOfWeek_Sat 0.45668 0.357851.2762 0.20191 DepTime -0.011551 0.0053851 -2.145 0.031964 ArrDelay 0.8081 0.002875 281.08 0 Distance 0.0012881 0.00016887 7.6281 2.5106e-14 Hr 1.4058 0.53785 2.6138 0.0089613 Number of observations: 16667, Error degrees of freedom: 16653 Root Mean Squared Error: 12.4 R-squared: 0.834, Adjusted R-Squared: 0.833 F-statistic vs. constant model: 6.41e+03, p-value = 0

预测和验证模型

显示显示拟合信息,以及系数和相关的系数统计。

模型变量包含关于拟合模型的属性信息,您可以使用点表示法访问这些属性。或者,双击Workspace中的变量以交互方式查看属性。

模型。Rsquared
ans =带字段的结构:普通:0.8335调整:0.8334

根据模型预测新的值,计算残差,并使用直方图进行可视化。的预测函数预测大数据和内存数据的新值。

pred = predict(model,dataTest);err = pred - dataTest.DepDelay;图直方图(呃,“BinLimits”(-100 100),“归一化”“pdf”
使用本地MATLAB会话评估tall表达式:-通过2中的第1步:在2.3秒内完成-通过2中的第2步:在1.4秒内完成评估在4.6秒内完成
标题(“残差直方图”

图中包含一个轴对象。标题为“残差直方图”的axis对象包含一个类型为直方图的对象。

评估和调整模型

查看显示中的输出p值,一些变量在模型中可能是不必要的。您可以通过删除这些变量来降低模型的复杂性。

更仔细地检查模型中变量的重要性方差分析

A =方差(模型)
一个=9×5表SumSq DF MeanSq F pValue __________ _____ __________ _______ __________ Year 26.88 1 26.88 0.17533 0.67543 Month 175.84 1 175.84 1.1469 0.28421 DayofMonth 114.6 1 114.6 0.74749 0.38729 DayOfWeek 3691.4 6 615.23 4.0129 0.00050851 DepTime 705.42 1 705.42 4.6012 0.031964 ArrDelay 1.2112e+07 1 1.2112e+07 79004 0 Distance 8920.9 1 8920.9 58.188 2.5106e-14 Hr 1047.5 1 1047.5 6.8321 0.0089613 Error 2.5531e+06 16653 153.31

基于p值,变量一年,DayOfMonth对于这个模型来说并不重要,所以您可以在不影响模型质量的情况下删除它们。

为了进一步研究这些模型参数,可以使用交互式可视化,例如plotSliceplotInterations,plotEffects.例如,使用plotEffects检验每个预测变量对出发延误的估计影响。

plotEffects(模型)

图中包含一个轴对象。axis对象包含10个line类型的对象。

基于这些计算,ArrDelay模型中的主要效应(它是高度相关的DepDelay).其他影响是可以观察到的,但影响要小得多。此外,人力资源是由DepTime,因此这些变量中只有一个对模型是必要的。

减少变量的数量以排除所有的日期组件,然后拟合一个新的模型。

model2 = fitlm(dataTrain,'DepDelay ~ DepTime + ArrDelay + Distance'
使用本地MATLAB会话评估tall表达式:-通过1 / 1:在2秒内完成评估在2.2秒内完成
model2 =紧凑线性回归模型:DepDelay ~ 1 + DepTime + ArrDelay + Distance估计系数:估计SE tStat pValue _________ __________ _______ __________(截距)-1.4646 0.31696 -4.6207 3.8538e-06 DepTime 0.0025087 0.00020401 12.297 1.3333e-34 ArrDelay 0.80767 0.0028712 281.3 0 Distance 0.0012981 0.00016886 7.6875 1.5838e-14观测数:16667,误差自由度:16663均方根误差:12.4 r平方:0.833,调整后r平方:0.833 f统计量与常数模型:2.77e+04, p值= 0

模型开发

即使简化了模型,进一步调整变量之间的关系并包括特定的相互作用也是有用的。为了进一步实验,请使用更小的tall数组重复此工作流程。为了优化模型时的性能,您可以考虑在扩展到整个高数组之前使用内存数据的小提取。

在这个例子中,您可以使用像逐步回归这样的功能,它适合迭代的内存模型开发。在调优模型之后,您可以扩展到使用高数组。

将数据的子集收集到工作区中并使用stepwiselm在内存中迭代地开发模型。

子集= gather(dataTest);
使用本地MATLAB会话评估tall表达式:-通过1 / 1:在1.2秒内完成评估
sModel = stepwiselm(子集,“ResponseVar”“DepDelay”
1.添加ArrDelay, FStat = 42200.3016, pValue = 0。添加DepTime, FStat = 51.7918, pValue = 6.70647e-13添加DepTime:ArrDelay, FStat = 42.4982, pValue = 7.48624e-11添加距离,FStat = 15.4303, pValue = 8.62963e-05添加ArrDelay:Distance, FStat = 231.9012, pValue = 1.135326e-51添加DayOfWeek, FStat = 3.4704, pValue = 0.00199178.添加DayOfWeek:ArrDelay, FStat = 26.334, pValue = 3.16911e-31添加DayOfWeek:DepTime, FStat = 2.1732, pValue = 0.042528
sModel =线性回归模型:DepDelay ~[4个预测因子中9项的线性公式]估计SE tStat pValue ___________ __________ ________ __________ (Intercept) 1.1799 1.0675 1.1053 0.26904 DayOfWeek_Mon -2.1377 1.4298 -1.4951 0.13493 DayOfWeek_Tues -4.2868 1.4683 -2.9196 0.0035137 DayOfWeek_Wed -1.6233 1.476 -1.0998 0.27145 DayOfWeek_Thu -0.74772 1.5226 -0.49109 0.62338 DayOfWeek_Fri -1.7618 1.5079 -1.1683 0.2427 DayOfWeek_Sat -2.1121 1.5214 -1.3882 0.16511 DepTime 7.5229e-05 0.00073613 0.10219 0.9186 ArrDelay 0.8671 0.013836 62.669 0 Distance 0.0015163 0.00023426 6.47281.0167e-10 DayOfWeek_Mon:DepTime 0.0017633 0.0010106 1.7448 0.081056 DayOfWeek_Tues:DepTime 0.0032578 0.0010331 3.1534 0.0016194 DayOfWeek_Wed:DepTime 0.00097506 0.001044 0.93398 0.35034 DayOfWeek_Thu:DepTime 0.0012517 0.0010694 1.1705 0.24184 DayOfWeek_Fri:DepTime 0.0026464 0.0010711 2.4707 0.013504 DayOfWeek_Sat:DepTime 0.0021477 0.0010646 2.0174 0.043689 DayOfWeek_Mon:ArrDelay -0.11023 0.014744 -7.4767 8.399e-14 DayOfWeek_Tues:ArrDelay -0.14589 0.014814 -9.8482 9.2943e-23DayOfWeek_Wed:ArrDelay -0.041878 0.012849 -3.2593 0.0011215 DayOfWeek_Thu:ArrDelay -0.096741 0.013308 -7.2693 3.9414e-13 DayOfWeek_Fri:ArrDelay -0.077713 0.015462 -5.0259 5.1147e-07 DayOfWeek_Sat:ArrDelay -0.13669 0.014652 -9.329 1.3471e-20 DepTime:ArrDelay 6.4148e-05 7.7372e-06 8.2909 1.3002e-16 ArrDelay:Distance -0.00010512 7.3888e-06 -14.227 2.1138e-45观测数:8333,误差自由度:8309 Root Mean Squared Error: 12 R-squared: 0.845, Adjusted R-squared:0.845 f统计量与常数模型:1.97e+03, p值= 0

由逐步拟合得到的模型包含交互项。

现在尝试为高数据拟合一个模型fitlm返回的公式stepwiselm

model3 = fitlm(dataTrain, model . formula)
使用本地MATLAB会话评估tall表达式:-通过1 / 1:在2秒内完成评估在2.1秒内完成
model3 =紧凑线性回归模型:DepDelay ~[4个预测因子中9项的线性公式]估计SE tStat pValue ___________ __________ ________ __________ (Intercept) -0.31595 0.74499 -0.4241 0.6715 DayOfWeek_Mon -0.64218 1.0473 -0.61316 0.53978 DayOfWeek_Tues -0.90163 1.0383 -0.86836 0.38521 DayOfWeek_Wed -1.0798 1.0417 -1.0365 0.29997 DayOfWeek_Thu -3.2765 1.0379 -3.157 0.0015967 DayOfWeek_Fri 0.44193 1.0813 0.40869 0.68277 DayOfWeek_Sat 1.1428 1.0777 1.0604 DepTime 0.0014188 0.00051612 2.7489 0.0059853 ArrDelay 0.72526 0.011907 0 Distance 0.0014824 0.000170278.7059 3.4423e-18 DayOfWeek_Mon:DepTime 0.00040994 0.00073548 0.55738 0.57728 DayOfWeek_Tues:DepTime 0.00051826 0.00073645 0.70373 0.48161 DayOfWeek_Wed:DepTime 0.00058426 0.00073695 0.79281 0.4279 DayOfWeek_Thu:DepTime 0.0026229 0.00073649 3.5614 0.00036991 DayOfWeek_Fri:DepTime 0.0002959 0.00077194 0.38332 0.70149 DayOfWeek_Sat:DepTime -0.00060921 0.00075776 -0.80396 0.42143 DayOfWeek_Mon:ArrDelay -0.034886 0.010435 -3.3432 0.00082993 DayOfWeek_Tues:ArrDelay -0.0073661 0.010113 -0.72837 0.4664DayOfWeek_Wed:ArrDelay -0.028158 0.0099004 -2.8441 0.0044594 DayOfWeek_Thu:ArrDelay -0.061065 0.010381 -5.8821 4.1275e-09 DayOfWeek_Fri:ArrDelay 0.052437 0.010927 4.7987 1.6111e-06 DayOfWeek_Sat:ArrDelay 0.014205 0.01039 1.3671 0.1716 DepTime:ArrDelay 7.2632e-05 5.3946e-06 13.464 4.196e-41 ArrDelay:Distance -2.4743e-05 4.6508e-06 -5.3203 1.0496e-07 Number of observations: 16667, Error degrees of freedom: 16643 Root Mean Squared Error: 12.3 R-squared: 0.837, Adjusted R-Squared: 0.836 F-statistic vs. constant model: 3.7e+03, p-value = 0

您可以重复此过程以继续调整线性模型。但是,在这种情况下,您应该探索可能更适合此数据的不同类型的回归。例如,如果您不想包括到达延迟,那么这种类型的线性模型就不再合适。看到高数组逻辑回归获取更多信息。

Scale to Spark

MATLAB和统计与机器学习工具箱中的高数组的一个关键功能是连接到Hadoop和Spark等平台。您甚至可以编译代码并使用MATLAB Compiler™在Spark上运行它。看到用其他产品扩展Tall数组下载188bet金宝搏有关使用这些产品的更多信息:下载188bet金宝搏

  • 数据库工具箱™

  • 并行计算工具箱

  • MATLAB®并行服务器

  • MATLAB编译器™

相关的话题