このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,メモリ不足になるデータに対してMATLAB®と统计和机器学习工具箱™で統計解析と機械学習を実行する方法を示します。
高配列および高表はメモリ不足になるデータを処理するように設計されています。このタイプのデータは,少数の列(変数)に対して非常に多くの数の行(観測値)から構成されています。MapReduceのようにデータの巨大なサイズを考慮する特殊なコードを記述する代わりに,高配列を使用して,インメモリのMATLAB配列に似た方法で大規模なデータセットを処理できます。基本的な違いは,高配列は通常,計算の実行要求があるまで評価されない,という点です。
高大配列に対する计算を実行する场合,MATLAB®は并列プール(并行计算工具箱™がある场合は既定)またはローカルのMATLABセッションを使用します.Parallel计算工具箱がある场合にローカルのMATLABセッションを使用して例を実行するには,关数mapreduce
を使用してグローバルな実行環境を変更します。
mapreducer(0)
この例では,単一のコンピューターでデータのサブセットを処理して線形回帰モデルを作成してから,データセット全体を分析するように拡張します。この分析は,次にも拡張できます。
メモリに読み込めないデータの处理
MATLAB并行服务器™の使用によるクラスター間分散されたデータの処理
Hadoop®や火花®などのビッグデータシステムとの統合
统计和机器学习工具箱の教師なしおよび教師あり学習アルゴリズムのいくつかは高配列を扱う処理に利用可能であり,メモリ不足になるデータについてデータマイニングや予測モデリングを実行します。これらのアルゴリズムは,メモリ不足になるデータに適しており,インメモリアルゴリズムとわずかに異なる場合があります。機能には以下があります。
k - meansクラスタリング
線形回帰
一般化線形回帰
ロジスティック回帰
判别分析
MATLABでは,メモリ不足になるデータに対する机械学习ワークフローはインメモリデータの场合と似ています。
前処理
調査
モデルの開発
モデルの検証
より大きいデータへの拡張
この例では,飛行機の遅れに対する予測モデルの開発と同様の構造に従います。このデータには,1987 ~ 2008年における飛行機のフライト情報に関する大規模なファイルが含まれています。この例の目標は,いくつかの変数に基づいて出発の遅れを予測することです。
高配列の基本的な側面に関する詳細は,高大的配列を使用したMATLABでのビッグデータの解析の例に含まれています。この例では,高配列配列を使用する機械学習を含めるように分析を拡張します。
データストアとは,大きすぎてメモリに收まらないデータの集合を格纳するリポジトリです。外部のデータソースから高大配列を作成する1番目のステップとして,いくつかの异なるファイル形式からデータストアを作成できます。
サンプルファイル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距离 ____ _____ __________ _________ _______ ________ ________ ________ 1987 21 308 642 8 12 1987 10 26 1 1021 8 296 1987 10 23 5 2055 21 480 1987 10 23 5 1332 13 12 296 1987 10 22 4 629 1446 1 373 1987 10 28 3 59 63 308 1987 10 928 4 3 2 447 1987 1011 954 859 6 : : : : : : : : : : : : : : : :
この例の目的は,時刻と曜日をさらに詳しく調べることです。ラベルがある直言配列に曜日を変換し,出発時間の数値変数から時間を判別します。
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 30814 1987 10 8 Wed 928 3 -2 447 9 1987 10 10 friday 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)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.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.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”},...{“的意思是”那扫描电镜的那“meanci”},“DataVar”那'DepDelay');byDayHr =聚集(byDayHr);
using the Local MATLAB Session: - Pass 1 of 1: Completed in 4 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⋮
现在,高大的配列のデータの可视化には柱状图
,histogram2
,binScatterPlot
およびksdensity
を使用できます。すべての可視化で、関数收集
の呼び出しと同じように実行がトリガーされます。
binScatterPlot
を使用して変数人力资源
と変数DepDelay
の関係を調べます。
binScatterPlot (tt.Hr tt.DepDelay,“伽马”, 0.25)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.6 sec Evaluation Completed in 2.2 sec使用本地MATLAB Session: - Pass 1 of 1: Completed in 1 sec Evaluation Completed in 1.2 sec
ylim(500[0])包含(“一天的时间”) ylabel (“延迟(分钟)”)
出力表示に記されているように,多くの場合,可視化ではデータを2回通過します。ビンにまとめるための1回と,ビンに対する計算を実行して可視化を生成するための1回です。
機械学習モデルを開発するには,データの一部をモデルの学習および開発用に保持し,データの別の部分をモデルの検定用に保持すると有益です。データを学習セットと検証セットに分割する方法はいくつかあります。
datasample
を使用してデータの无作为标本を抽出します。次に,cvpartition
を使用してデータを検定セットと学习セットに分割します。非层化区分を取得するため,データ标本にゼロを乘算して一様なグループ化変数を设定します。
再現性を得るため,tallrng
を使用して乱数発生器のシードを設定します。高配列の場合,ワーカーの個数と実行環境によって結果が異なる可能性があります。詳細については,コードの実行场所の制御を参照してください。
tallrng (“默认”) data = datasample(tt,25000,“替换”,错误的);基团= 0 * data.DepDelay;Y = cvpartition(组,“坚持”, 1/3);dataTrain =数据(训练(y):);人数(=数据(测试(y):);
いくつかの変数に基づいて出発の遅れを予測するモデルを構築します。線形回帰モデル関数fitlm
はインメモリ関数と同じように動作します。ただし,高配列を使用して計算を行うと,大規模なデータセットでより効率的なCompactLinearModel
が生成されます。モデルのあてはめは反復的なプロセスなので,実行がトリガーされます。
模型= fitlm (dataTrain,“ResponseVar”那'DepDelay')
using the Local MATLAB Session: - Pass 1 of 2: Completed in 0.92 sec - Pass 2 of 2: Completed in 2.9 sec
model =紧凑线性回归模型:DepDelay ~[8个预测因子9项线性公式]估计值__________ __________ ________ __________(截距)年-0.01585 0.037853 -0.41872 0.67543月- 0.03009 0.028097 1.0709 0.28421 DayofMonth -0.0094266-0.56082 0.35309 -1.5883 0.11224 DayOfWeek_Thu -0.25295 0.35239 -0.71782 0.47288 DayOfWeek_Fri 0.91768 0.36625 2.5056 0.012234 DayOfWeek_Sat 0.45668 0.35785 0.2762 0.20191 DepTime -0.011551 0.0053851 -2.145 0.031964 ArrDelay 0.8081 0.002875 281.08 0距离0.0012881 0.00016887 7.6281 Hr 1.4058 0.53785 2.6138 0.0089613数量观测值:16667,误差自由度:16653均方根误差:12.4 r平方:0.834,校正r平方:0.833 F-statistic vs. constant model: 6.41e+03, p-value = 0
表示には,あてはめの情报,系数および关连する系数统计が示されています。
変数模型
にはあてはめたモデルに関する情報がプロパティとして含まれており,ドット表記を使用してアクセスできます。または,ワークスペースで変数をダブルクリックして対話的にプロパティを確認します。
模型。Rsquared
ans =结构体字段:普通:0.8335调整:0.8334
モデルに基づいて新しい値を予測し,残差を計算し,ヒストグラムを使用して可視化を行います。关数预测
は高大データとインメモリデータの両方について新しい値を予测します。
PRED =预测(模式,数据测试);ERR =预解码值 - dataTest.DepDelay;图直方图(ERR,“BinLimits”(-100 100),“归一化”那'PDF')
using the Local MATLAB Session: - Pass 1 of 2: Completed in 2.3 sec - Pass 2 of 2: Completed in 1.1 sec
标题(“残差直方图”)
表示の出力p値を见ると,一部の変数はモデルに不要であると考えられます。このような変数を削除すると,モデルの复雑度を减らすことができます。
方差分析
を使用して,モデルにおける変数の有意性をより详しく确认します。
一个=方差分析(模型)
一个=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
はこのモデルでは有意ではないので,これらを削除してもモデルの品質にマイナスの影響はありません。
これらのモデルパラメーターをさらに調べるには,plotSlice
,plotInterations
,plotEffects
などの対話的な可視化を使用します。たとえば,出発の遅れに対する各予測子変数の推定効果を調べるには,plotEffects
を使用します。
plotEffects(模型)
これらの计算に基づくと,モデルの主效果はArrDelay
です(DepDelay
と高い相関があります)。他の効果は観測可能ですが,影響は非常に小さくなっています。さらに,人力资源
はDepTime
から決定したので,これらの変数のうちモデルに必要なのは1つだけです。
変数の数を減らしてすべての日付成分を除外し,新しいモデルをあてはめます。
MODEL2 = fitlm(dataTrain,'DepDelay ~ DepTime + ArrDelay + Distance')
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2 sec
model2 =紧凑线性回归模型:DepDelay ~ 1 + DepTime + ArrDelay + Distance Estimated Coefficients:Estimate SE tStat pValue _________ __________ _______ __________ (Intercept) -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距离0.0012981 0.00016886 7.6875 1.5838e-14观测数:16667,误差自由度:16663均方根误差:12.4 R-squared:0.833,调整后的R-Squared: 0.833 F-statistic vs. constant model: 2.77e+04, p-value = 0
モデルを単純化した状態でも,変数間の関係をさらに調整して明確な交互作用を含めると有益な可能性があります。さらに調べるには,小さい高配列でこのワークフローを繰り返します。モデルを調整するときのパフォーマンスを高めるには,インメモリデータを少量抽出,処理した後に高配列全体に拡張することが考えられます。
この例では,反復的なインメモリモデル開発に適している,ステップワイズ回帰に似た機能を使用できます。モデルを調整した後で,高配列を使用するように拡張できます。
データのサブセットをワークスペースに収集し,stepwiselm
を使用してメモリ内で反復的にモデルを開発します。
=收集子集(人数();
using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.1 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 p值___________ __________ ________ __________(截距)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.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.3471e-20 DepTime:ArrDelay 6.4148e-05 7.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
ステップワイズ近似から生成したモデルには交互作用項が含まれています。
次に,stepwiselm
によって返された式と共にfitlm
を使用することにより,高データ用のモデルのあてはめを試します。
model3 = fitlm (dataTrain sModel.Formula)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.2 sec
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と统计和机器学习工具箱の高配列の主要な機能の一つとして,Hadoopや火花などのプラットフォームへの接続があります。MATLAB编译器™を使用すると,コードをコンパイルして火花で実行することもできます。以下の製品の使用に関する詳細については,他の製品による高配列の拡張を参照してください。
数据库工具箱™
并行计算工具箱™
MATLAB®并行服务器™
MATLAB编译器™