主要内容

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

此示例演示如何使用MATLAB®和统计与机器学习工具箱对内存不足的数据执行统计分析和机器学习™.

高数组和表是为处理内存不足的数据而设计的。这种类型的数据由大量的行(观察值)组成,而列(变量)的数量较少。与使用MapReduce编写考虑到巨大数据量的专用代码不同,您可以使用高数组以类似于内存中的MATLAB数组的方式处理大型数据集。根本区别在于,在您请求执行计算之前,高数组通常保持未评估状态。

当您在高数组上执行计算时,MATLAB®使用一个并行池(如果您有parallel Computing Toolbox™,则默认)或本地MATLAB会话。要在使用并行计算工具箱时使用本地MATLAB会话运行示例,请使用mapreduce作用

mapreduce (0)

本例使用一台计算机上的数据子集来开发一个线性回归模型,然后按比例放大以分析所有的数据集。你可以进一步放大这个分析:

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

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

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

高数组机器学习简介

统计学和机器学习工具箱中的一些非监督和监督学习算法可用于使用高数组执行数据挖掘和内存不足的数据预测建模。这些算法适用于内存不足的数据,并可能包含与内存中的算法的轻微差异。功能包括:

  • k - means聚类

  • 线性回归

  • 广义线性回归

  • 逻辑回归

  • 判别分析

MATLAB中内存不足数据的机器学习工作流类似于内存中数据:

  1. 进行预处理

  2. 探索

  3. 发展模式

  4. 验证模型

  5. 扩展到更大的数据

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

关于高阵列的基本方面的细节包括在这个例子中利用高数组在MATLAB中分析大数据。此示例扩展了分析,包括使用高数组的机器学习。

创建航空公司数据高表

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

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

ds =数据存储(fullfile (matlabroot,“工具箱”matlab的“演示”“airlinesmall.csv”));ds。SelectedVariableNames = {“年”“月”“DayofMonth”“星期五”...“DepTime”“ArrDelay”“DepDelay”“距离”};ds.TreatAsMissing=“NA”;=之前预览(ds)
前=8×8表年月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 =高(ds)
8)T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T表表表表表表表表表表年月月月月月月月月月月月日日日月月月月月月月月月月月月月日日日月月月月月月月月月月月月月日日日日日月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月日日日日日日日日日日日日日日日日日日日日日日日日日日日日的月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月102246294-137319871028314465963308198710849283-244719871010 6 859 11 -1 954 : : : : : : : : : : : : : : : :

数据进行预处理

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

tt。DayOfWeek =分类(tt。DayOfWeek 1:7, {“太阳”“妈妈”“面前”...“Wed”“星期四”“星期五”“Sat”}); tt.Hr=离散化(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 30814 1987 10 8 Wed 928 3 -2 447 9 1987 10 10 friday 859 11 -1 954 8::::::::::::::::::

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

idx=tt.年份>=2000&...~any(ismissing(tt),2);tt=tt(idx,:);

分组探究数据

许多探索函数可用于高数组grpstats函数计算高数组的分组统计信息。探索数据通过确定数据的中心性和散布与汇总统计按天分组。同时,探讨出发延误与到达延误之间的关系。

g = grpstats (tt (: {“ArrDelay”“DepDelay”“星期五”}),“星期五”...“中庸”“性病”“偏斜”“峰度”})
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] =收集(g、C)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 4 sec
statsByDay =7×11表一周一周一周一周一周一周一组标签标签一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周的一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周标签一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一组一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一周一(小标题)(小标题)(小标题)(小标题)(小标题)(小标题)(小标题)(小标题)(小标题)(小标题))()小标题))(小标题星期五7339 4.1512 32.1 7.082 120.53 7.0857 29.339 8.9387 168.37{'Mon'}Mon 8443 5.2487 32.453 4.5811 37.175 6.8319 28.573 5.6468 50.271{'Sat'}Sat 8045 7.132 33.108 3.6457 22.991 9.1557 29.731 4.5135 31.228{'Sun'}Sun'}Sun'}Sun'}8570 7.7515 36.003 5.7980.9.3324 32.516.214}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 6.4336 85.426
C=0.8966

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

探究周天数和小时的影响,并获得额外的统计信息,如均值的标准误差和均值的95%置信区间。您可以传递整个高表,并指定要执行计算的变量。

byDayHr=grpstats(tt{“人力资源”“星期五”},...“中庸”“扫描电镜”“meanci”},“数据变量”“DepDelay”);byDayHr =收集(byDayHr);
using the Local MATLAB Session: - Pass 1 of 1: Completed in 6.1 sec

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

x=取消堆叠(按天数)(:{“人力资源”“星期五”“mean_DepDelay”}),...“mean_DepDelay”“星期五”); 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 -2.2409 -3.7099 -4.0146 -3.9565 -3.5897 -3.5766 -4.14747 6 0.4 -1.8909 -1.9802 -1.8304 -1.3578 0.84161 -2.2537 3.4173 -0.47222 -0.18893 0.71546 0.08 1.069 -1.3221 8 2.5325 2.3759 1.4054 1.6745 2.2345 2.9668 1.6727 0.88213 9 10 1.6805 2.7656 2.683 5.6138 3.4838 2.5011 6.37 5.2868 3.6822 7.5773 5.3372 6.9391 4.9979 11 12 6.9946 4.9165 5.5639 5.5936 7.0435 4.8989 5.2839 5.673 5.1193 - 5.7081 7.9178 - 7.52698.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⋮

在高阵列中可视化数据

目前,您可以可视化高数组数据使用直方图组织图2宾斯卡特普洛特酒店Ks密度.可视化所有触发器的执行,类似于调用聚集作用

使用宾斯卡特普洛特酒店检查人力资源DepDelay变量。

binScatterPlot(tt.Hr、tt.DEPDELY、,“伽马”, 0.25)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.7 sec Evaluation Completed in 3.8 sec使用Local MATLAB Session: - Pass 1 of 1: Completed in 2.4 sec
ylim([0 500])xlabel(“时间”)伊拉贝尔(“延迟(分钟)”

图包含一个轴和uicontrol类型的其他对象。轴包含一个histogram2类型的对象。

正如在输出显示中所指出的,可视化通常需要对数据进行两次传递:一次执行装箱,另一次执行装箱计算并生成可视化。

将数据拆分为培训集和验证集

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

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

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

塔林(“默认”)数据=数据样本(tt,25000,“替换”、假);组= 0 * data.DepDelay;y = cvpartition(组,“坚持”, 1/3);dataTrain =数据(训练(y):);人数(=数据(测试(y):);

Fit监督学习模型

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

型号=fitlm(数据列车,“响应者”“DepDelay”
使用本地MATLAB会话评估tall表达式:-通过1/2:在1.5秒内完成-通过2/2:在5.3秒内完成评估在8秒内完成
模型=紧凑线性回归模型:DepDelay ~[8个预测因子中有9项的线性公式]估计系数:估计统计值uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(截距)30.0.0.0.0.0.0.0.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7.7 7 7 7 7.7 7 7 7 7 7 7.7 7 7 7 7 7 7 7 7 7 7 7 7.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 47288达卡周星期五0.91768 0.36625 2.5056 0.012234周星期六0.45668 0.35785 1.2762 0.20191分时-0.011551 0.0053851-2.145 0.031964 ArrDelay 0.8081 0.00287281.08 0距离0.0012881 0.00016887.6281 2.5106e-14小时1.4058 0.53785 2.6138 0.0089613观测次数:16667,误差自由度:16653均方根误差红色:0.834,调整后的R平方:0.833 F统计与常数模型:6.41e+03,p值=0

预测并验证模型

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

模型变量包含有关拟合模型的信息作为属性,可以使用点表示法访问该属性。或者,双击工作区中的变量以交互地探索属性。

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

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

pred =预测(模型、人数();err = pred - dataTest.DepDelay;图直方图(呃,“宾极限”(-100 100),“归一化”“pdf”
使用本地MATLAB会话评估tall表达式:-第1次通过(共2次):在3.5秒内完成-第2次通过(共2次):在1.9秒内完成评估在6.5秒内完成
标题(“残差直方图”

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

评估和调整模型

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

使用以下工具更仔细地检查模型中变量的重要性方差分析

一个=方差分析(模型)
a=9×5表SumSq DF MeanSq F pValue  __________ _____ __________ _______ __________ 26.88年1 1月26.88 0.17533 0.67543 175.84 175.84 1.1469 0.28421 114.6 DayofMonth 1 6 615.23 4.0129 0.00050851 3691.4 114.6 0.74749 0.38729 DayOfWeek DepTime 705.42 - 1 705.42 4.6012 0.031964 1.2112 ArrDelay e + 07年1 1.2112 e + 07年79004 0距离8920.9 - 58.188 8920.9 - 12.5106e-14 Hr 1047.5 1 1047.5 6.8321 0.0089613错误2.5531e+06 16653 153.31

基于p值,变量一年月日对于此模型而言,这些属性不重要,因此可以删除它们,而不会对模型质量产生负面影响。

要进一步探索这些模型参数,请使用交互式可视化,例如plotSliceplotInterationsplotEffects.例如,使用plotEffects检验每个预测变量对出发延误的估计影响。

plotEffects(模型)

图中包含一个坐标轴。轴包含10个线型对象。

根据这些计算,,ArrDelay模型中的主要效应(它与DepDelay).其他影响是可以观察到的,但影响要小得多。此外人力资源决心从DepTime,因此模型只需要这些变量中的一个。

减少变量的数量以排除所有的数据成分,然后拟合一个新的模型。

model2 = fitlm (dataTrain,“DepDelay~DepTime+ArrDelay+Distance”
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.9 sec
模型2=紧凑型线性回归模型:DepDelay~1+DepTime+ArrDelay+距离估计系数:估计setstat pValue uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(截距)距离0.0012981 0.00016886 7.6875 1.5838e-14观测次数:16667,误差自由度:16663均方根误差:12.4 R平方:0.833,调整后的R平方:0.833 F统计与常数模型:2.77e+04,p-value=0

模型开发

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

在本例中,您可以使用类似逐步回归的功能,这适用于迭代的内存模型开发。调整模型后,您可以放大以使用高阵列。

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

子集=收集(数据测试);
使用本地MATLAB会话评估tall表达式:-通过1/1:在1.8秒内完成评估在1.9秒内完成
sModel = stepwiselm(子集,“响应者”“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.629633 -05添加ArrDelay:Distance, FStat = 231.9012, pValue = 1.135326e-51添加DayOfWeek, FStat = 3.4704, pValue = 0.0019917添加DayOfWeek:ArrDelay, FStat = 26.334, pValue = 3.16911e-31添加DayOfWeek:DepTime, FStat = 2.1732, pValue = 0.042528
sModel=线性回归模型:DEPDLAY ~[四个预测因子中有9项的线性公式]估计系数:估计当前pValue uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(截距)1.4951 0.41109 0.62109 0.62109 0.62338 8 0.41109 0.62338 8 8 0.41109 0.419 0.419 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 1.468 1.4683-4.2868 1.468 8 1.468 8 8 8 8 8 8 8 1.4683-2.4683-2.9 9 9 9 9 9 9 9 9 9 9 9 9 9-2.468-2.468-2.6 8-2.9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9-2.8-2.8-2.9 9 9 9 9 9 9 9-2.9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9-2.9 9 9 9 9 9 9 9 9 9 9 9 9 9-2.9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10219 0.9186ArrDelay 0.8671 0.013836 62.669 0距离0.0015163 0.00023426.4728 1.0167e-10星期一:DepTime 0.0017633 0.0010106 1.7448 0.081056星期二:DepTime 0.0032578 0.0010331 3.1534 0.0016194星期三:DepTime 0.00097506 0.001044 0.93398 0.35034星期四:DepTime 0.0012517 0.001061.17064星期五:DepTime0.0010711 2.4707 0.013504星期一星期六:DepTime 0.0021477 0.0010646 2.0174 0.043689星期一:抵达延迟-0.11023 0.014744-7.4767 8.399e-14星期二:抵达延迟-0.14589 0.014814-9.8482 9.2943e-23星期三:抵达延迟-0.041878 0.012849-3.2593 0.1215星期五:抵达延迟-0.01393-14星期五:抵达延迟-0.01943-14星期五-0.077713 0.015462-5.0259 5.1147e-07星期六: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.2272 2.1138e-45观测次数:8333,误差自由度:8309均方根误差:12 R平方:0.845,调整后的R平方:0.845 F统计与常数模型:1.97e+03,p值=0

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

现在,尝试使用fitlm返回的公式为stepwiselm

模型3=fitlm(数据列,sModel.公式)
使用本地MATLAB会话评估tall表达式:-通过1/1:在3.5秒内完成评估在3.8秒内完成
model3 =紧凑线性回归模型:DepDelay ~[4个预测因子9项线性公式]估算SE tStat pValue ___________ __________ ________ __________(截距)-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.68277DayOfWeek_Sat 1.1428 1.0777 1.0604 0.28899 DepTime 0.0014188 0.00051612 2.7489 0.0059853 ArrDelay 0.72526 0.011907 60.913 0 Distance 0.0014824 0.00017027 8.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.792810.4279 DayOfWeek_Thu:DepTime 0.0026229 0.00073649 3.5614 0.00036991 DayOfWeek_Fri:DepTime 0.002959 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.4664 DayOfWeek_Wed:ArrDelay -0.0281580.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:ArrDelay16667,误差自由度:16643均方根误差:12.3 r平方:0.837,校正r平方:0.836 F-statistic vs. constant model: 3.7e+03, p-value = 0

可以重复此过程以继续调整线性模型。但是,在这种情况下,您应该探索可能更适合此数据的不同类型的回归。例如,如果不希望包含到达延迟,则这种类型的线性模型不再合适。看见高列Logistic回归为更多的信息。

规模的火花

MATLAB、Statistics和Machine Learning Toolbox中的高数组的一个关键功能是与Hadoop和Spark等平台的连接。您甚至可以使用MATLAB Compiler™在Spark上编译代码并运行它。看到扩展高数组与其他产品s manbetx 845有关使用这些产品的更多信息:s manbetx 845

  • 数据库工具箱™

  • 并行计算工具箱™

  • MATLAB®并行服务器™

  • MATLAB编译器™

相关话题