主要内容

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

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

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

当您在高大的阵列进行计算,MATLAB®使用使用并行池(默认情况下,如果您有并行计算工具箱™)或本地MATLAB会话。要使用时,你有并行计算工具箱本地MATLAB会话中运行的例子,通过改变全球执行环境mapreduce函数。

mapreducer(0)

这个例子与数据在一台计算机上的一个子集工作是建立一种线性回归模型,然后将其扩展到分析所有的数据集。你甚至可以进一步扩展这一分析:

  • 处理数据不能被读入内存

  • 使用MATLABPLASSERD Server™与分布群集群的数据一起使用

  • 集成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”“DayOfWeek”...'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)
TT = MX8高大表年月DAYOFMONTH DAYOFWEEK DepTime ArrDelay DepDelay距离____ _____ __________ _________ _______ ________ ________ ________ 1987 10 21 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 133213 12 296 1987 10 22 4 629 4 373 -1 1987 10 28 3 1446 59 63 308 1987 10 8 4 928 3 -2 447 1987 10 10 6 859 11 -1 954::::::::::::::::

数据进行预处理

这个例子的目的是探索天,星期的时间,更多的细节。星期转换为分类数据与标签,然后从数字出发时间变量决定一天的小时。

tt。DayOfWeek =分类(tt。DayOfWeek 1:7, {“太阳”“我的”“星期二”...'星期三'“星期四”“星期五”'坐'});tt.hr =离散化(tt.deptime,0:100:2400,0:23)
TT = MX9高大表年月DAYOFMONTH DAYOFWEEK DepTime ArrDelay DepDelay距离HR ____ _____ __________ _________ _______ ________ ________ __ 1987 10 21周二642 8 12 308 6 1987 10 26日1021 8 1 296 10 1987 10 23星期四2055 21 20 480 201987年10月23日周四1332 13 12 296 13 1987 10 22星期三629 4 -1 373 6 1987 10 28周二1446 59 63 308 14 1987 10 8 928周三3 -2 447 9 1987 10 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] =聚集(G,C)
评估使用本地MATLAB会话高表达: - 通的1 1:4秒评价完成在5.8秒完成
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.17.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.6457 22.991 9.1557 29.731 4.5135 31.228{‘太阳’}太阳8570 7.7515 36.003 5.7943 80.91 9.3324 32.516 7.2146 118.25{“清华”}清华8601 10.053 36.18 4.1381 37.051 10.923 34.708 1.1414 138.38{“面前”}外胎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

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

探索星期几和小时,获得额外的统计信息的当天的效果,如均值的标准差和平均值的95%置信区间。您可以通过整个高大表,并指定哪些变量来执行计算。

byDayHr = grpstats (tt, {“人力资源”“DayOfWeek”},...{'意思''SEM''vesci'},“DataVar”'DepDelay');byDayHr =聚集(byDayHr);
using the Local MATLAB Session: - Pass 1 of 1: Completed in 6.1 sec

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

x = unstack (byDayHr (:, {“人力资源”“DayOfWeek”“mean_DepDelay”}),...“mean_DepDelay”“DayOfWeek”);X =调用sortRows(x)的
x =24×8表小时星期日星期一星期二星期三星期四星期五星期六__ _______ ________ _______ _______ 0 38.519 71.914 39.656 34.667 90 25.536 65.579 45.846 1 27.875 93.6 125.23 52.765 38.091 29.182 2的NaN 39 102的NaN 78.25 -1.5 NaN 3的楠楠楠楠-377.5 53.5的NaN4 -7 -6.2857 -7 -7.3333 -10.5 -5的NaN 5 -2.2409 -3.7099 -4.0146 -3.9565 -3.5897 -3.5766 -4.1474 6 0.4 -1.8909 -1.9802 -1.8304 -1.3578 0.84161 -2.2537 7 3.4173 -0.47222 -0.18893 0.71546 0.081.069 -1.3221 8 2.3759 1.4054 1.6745 2.2345 2.9668 1.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.9979 11 6.9946 4.9165 5.5639 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.06756.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会话高表达: - 通的1 1:在2.7秒评价完成在3.8秒完成评估使用本地MATLAB会话高表达: - 的1遍1:在2.4秒评价完成在2.7秒完成
ylim(500[0])包含(“一天的时间”)ylabel(“延迟(分钟)”

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

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

将数据分割为训练集和验证集

要开发一个机器学习模型,它是培养和发展的模型和数据的另一部分测试模型的数据储备一部分是有用的。有许多方式存在您将数据分割为训练和验证集。

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

的再现性,使用设定的随机数发生器的种子tallrng.该结果可能会因工人的数量和用于高阵列执行环境而变化。有关详细信息,请参阅控制代码运行的位置

tallrng('默认')数据= datasample(TT,25000,'代替',错误的);基团= 0 * data.DepDelay;Y = cvpartition(组,“坚持”1/3);dataTrain =数据(训练(Y),:);数据测试=数据(测试(Y),:);

拟合监督学习模型

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

模型= fitlm(dataTrain,'ResponseVar''DepDelay'
评估使用本地MATLAB会话高表达: - 通的2 1:完成在1.5秒 - 第二遍2:在5.3秒评价完成在8秒完成
模型=紧凑的线性回归模型:DepDelay〜[线性公式在8个预测9项条款]估计系数:估计SE TSTAT p值__________ ________ __________(截距)30.715 75.873 0.40482 0.68562 -0.01585年份0.037853 -0.41872 0.67543 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 -0.56082 DayOfWeek_Wed 0.35309 -1.5883 0.11224 DayOfWeek_Thu -0.25295 0.35239 -0.71782 0.47288 0.91768 DayOfWeek_Fri 0.36625 2.5056 0.012234 DayOfWeek_Sat 0.45668 0.35785 1.2762 0.20191 DepTime -0.011551 0.0053851 -2.1450.031964 ArrDelay 0.8081 0.002875 281.08 0距离0.0012881 0.00016887 7.6281 2.5106e-14小时1.4058 0.53785 2.6138 0.0089613观测数:16667,错误自由度:16653均方根误差:12.4 R平方:0.834,调整R平方:0.833˚Ft-统计与常数模型:6.41e + 03,p值= 0

预测和验证模型

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

模型变量包含的拟合模型的属性,您可以访问使用点符号信息。或者,双击在工作区中的变量,以交互方式探索的性质。

model.Rsquared
ans =结构体字段:普通:0.8335调整后:0.8334

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

PRED =预测(模式,数据测试);ERR =预解码值 -  dataTest.DepDelay;图直方图(ERR,'BinLimits',[ -  100 100],'正常化''PDF'
使用本地MATLAB会议评估高表达: - 通过第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值,变量, 和Dayofmonth.不显著这种模式,这样你就可以不用模型质量产生负面影响删除它们。

要进一步探索这些模型参数,请使用诸如的交互式可视化plotSliceplotInterations, 和plotEffects.例如,使用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
MODEL2 =紧凑的线性回归模型:DepDelay〜1 + DepTime + ArrDelay +距离估计系数:估计SE TSTAT p值_________ __________ _______ __________(截距)-1.4646 0.31696 -4.6207 3.8538e-06 DepTime 0.0025087 0.00020401 12.297 1.3333e-34 ArrDelay 0.80767 0.0028712281.3 0距离0.0012981 0.00016886 7.6875 1.5838e-14编号的观察:16667,错误自由度:16663均方根误差:12.4 R平方:0.833,调整R平方:0.833 F统计与常数模型:2.77e04,p值= 0

模型开发

即使使用模型简化,进一步调整变量与特定交互之间的关系也很有用。要尝试进一步,请用较小的高阵列重复此工作流程。对于调整模型时的性能,您可以考虑在缩放到整个高阵列之前的内存数据的小提取。

在这个例子中,你可以像逐步回归,这是适合于反复,内存模型开发利用的功能。调整模型后,可以扩展到使用高大的阵列。

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

子集=聚集(DataTest);
using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.8 sec
sModel = stepwiselm(子集,'ResponseVar''DepDelay'
1.添加ArrDelay,FSTAT = 42200.3016,p值= 0 2.添加DepTime,FSTAT = 51.7918,p值= 6.70647e-13 3.添加DepTime:ArrDelay,FSTAT = 42.4982,p值= 7.48624e-11 4.添加距离,FSTAT= 15.4303,p值= 8.62963e-05 5.添加ArrDelay:距离,FSTAT = 231.9012,p值= 1.135326e-51 6.添加DAYOFWEEK,FSTAT = 3.4704,p值= 0.0019917 7.添加DAYOFWEEK:ArrDelay,FSTAT = 26.334,p值= 3.16911e-31 8.添加DAYOFWEEK:DepTime,FSTAT = 2.1732,p值= 0.042528
sModel =线性回归模型:DepDelay ~[4个预测因子9项线性公式]估算SE tStat pValue ___________ __________ ________ __________(截距)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_friday -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.4728 1.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-23 DayOfWeek_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 Number of observations: 8333, Error degrees of freedom: 8309 Root Mean Squared Error: 12 R-squared: 0.845, Adjusted R-Squared: 0.845 F-statistic vs. constant model: 1.97e+03, p-value = 0

从逐步拟合结果包括交互方面的模型。

现在尝试通过使用适合高大的数据模型fitlm返回的公式为步骤行程

Model3 = fitlm(DataTrain,smodel.formula)
评估使用本地MATLAB会话高表达: - 通的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统计和机器学习工具箱高大阵列的一个关键功能是连接到平台,如Hadoop和星火。你甚至可以编译代码并使用MATLAB编译器™星火上运行它。看扩展高数组与其他产品下载188bet金宝搏有关使用这些产品的更多信息:下载188bet金宝搏

  • 数据库工具箱™

  • 并行计算工具箱™

  • MATLAB®并行服务器™

  • MATLAB编译器™

相关话题