主要内容

使用高大阵列与大数据的统计和机器学习

此示例显示了如何使用Matlab®和统计和机器学习工具箱™对内存失控数据进行统计分析和机器学习。

高大的阵列和桌子设计用于与内存失控数据一起使用。与较少数量的列(变量)相比,这种类型的数据包括非常大的行(观察)。而不是编写考虑到巨大尺寸的专业代码,例如使用MapReduce,您可以使用高阵列以与内存中的MATLAB阵列类似的方式使用大数据集。基本差异是,在您请求执行计算之前,高阵列通常保持未评估。

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

mapreduce (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)
pre =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距离_______________________________________________________________________________________________________________________________________________________________________________________________________________1981910 1987 10 23 5123213 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, {“太阳”“星期一”“面前”...'星期三'“星期四”'fri''坐'});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.year> = 2000&...〜任何(Ismissing(TT),2);tt = tt(idx,:);

分组探究数据

高阵列提供了许多探索功能。例如,GRPSTATS.函数计算高数组的分组统计信息。探索数据通过确定数据的中心性和散布与汇总统计按天分组。同时,探讨出发延误与到达延误之间的关系。

g = grpstats (tt (: {“ArrDelay”“DepDelay”'Dayofweek'}),'Dayofweek'...'意思''std''歪斜''kurtosis'})
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表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 { '星期一'}周一8443 5.2487 32.453 4.5811 37.175 6.8319 28.5735.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 {'星期二'} 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.

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

探究周天数和小时的影响,并获得额外的统计信息,如均值的标准误差和均值的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

由于高阵列的数据划分,输出可能是无序的。重新排列内存中的数据以供进一步探索。

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 -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⋮

可视化高阵列中的数据

目前,您可以可视化高数组数据使用直方图直方图2binscatterplot., 和ksdity..可视化所有触发器的执行,类似于调用收集功能。

采用binscatterplot.检查之间的关系人力资源DepDelay变量。

binscatterplot(tt.hr,tt.depdelay,'伽玛', 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(“时间”)ylabel(“延迟(分钟)”

图包含UIControl类型的轴和其他对象。轴包含类型直方图2的对象。

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

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

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

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

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

Tallrng('默认')Data = DataSample(TT,25000,'代替'、假);组= 0 * data.DepDelay;y = cvpartition(组,“坚持”, 1/3);dataTrain =数据(训练(y):);人数(=数据(测试(y):);

适合受监督学习模型

构建模型以基于多个变量预测出发延迟。线性回归模型功能fitlm与内存功能类似地行事。但是,高阵列的计算导致了一个CompactLinearModel,这对大数据集更有效。模型拟合触发器执行,因为它是一个迭代过程。

型号= fitlm(数据仓,'responsevar'“DepDelay”
使用当地MATLAB会话评估高表达: - 通过第1条:第2条:在1.5秒内完成 - 通过2的第2条:5.3秒评估完成8秒
型号=紧凑线性回归模型:DEPDELAY〜[线性配方在8个术语中有8个预测器]估计系数:估计系数:估计系数PVALUE __________ ___________________________0.41870 0.67543 0.03009 0.037543 0.0309 0.090 0.28421月0.0709 0.28421 0.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 HR 1.4058 0.5106C-14 HR 1.4058 0.53785 2.6138 0.0089613观察数:16667,误差自由度:16653均方方误差:12.4 R线:0.834,调整R线:0.833- 静态与常量型号:6.41e + 03,p值= 0

预测并验证模型

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

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

model.rsquared.
ans =.结构与字段:普通:0.8335调整:0.8334

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

pred =预测(模型、人数();err = pred - dataTest.DepDelay;图直方图(呃,'binlimits'(-100 100),“归一化”“pdf”
使用本地MATLAB会议评估高表达: - 通过第1项,共2分:3.5秒段 - 通过2的第2条:在1.9秒的评估中完成,在6.5秒内完成
标题('残留的直方图'

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

评估和调整模型

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

使用更密切地研究模型中变量的重要性Anova.

一个=方差分析(模型)
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 +距离'
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.9 sec
Model2 = Compact Linear回归型号:Depdelay〜1 + Deptime + Arrdelay +距离估计系数:估计估计系数__________________________________________4646 0.31696 -4.6207 3.85380-06 0.31696 -4.6207 3.85380-06 0.31696 -4.6207281.3 0距离0.0012981 0.00016886 7.6875 1.5875 1.5875 1.58382-14观察数:16667,误差自由度:16663根均匀误差:12.4 R线:0.833,调整R线:0.833 F统计与常数型号:2.77e+04,p值= 0

模型开发

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

在此示例中,您可以使用逐步回归等功能,这些功能适用于内存模型开发。调整模型后,可以扩展到使用高阵列。

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

子集=聚集(DataTest);
使用本地MATLAB会话评估高表达: - 通过1:1:在1.8秒的评估中完成,在1.9秒内完成
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.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 =线性回归模型:Depdelay〜[线性配方在4个预测器中有9个术语]估计系数:估计系数:估计系数Pvalue ___________ _____________________________377 1.4298 -1.42298 -1.4951 0.13493#4.2868 1.4298 -2.9196 0.0035137DayOfWeek_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 -2.1121 DayOfWeek_Sat 1.5214 -1.3882 0.16511 DepTime 7.5229e-05 0.00073613 0.10219 0.9186 ArrDelay 0.8671 0.013836 62.669 0距离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.3471C2 -9.329 1.3471E-20 Deptime:Arrdelay 6.4148E-05 7.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.7372E-06 8.2909 1.3002E-16 Arrdelay:距离-0.00010512 7.3888E-06 -14.227 2.1138E-45观察数:8333,误差自由度:8309根均方误差:12 r断层:0.845,调整R线:0.845 F统计与常数型号:1.97E + 03,P值= 0

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

现在尝试使用的适合高数据的模型fitlm返回的公式为stepwiselm

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

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

规模的火花

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

  • 数据库工具箱™

  • 并行计算工具箱™

  • MATLAB®并行服务器™

  • Matlab Compiler™

相关话题