Статистика и машинное обучение с большими данными с использованием длинных массивов

В этом примере показано, как выполнить статистический анализ и машинное обучение на данных , которых не помещаютсях в память, с помощью MATLAB ® и Statistics and Machine Learning Toolbox™.

Длинные массивы и таблицы предназначены для работы с данной , которой не помещаютсей в память,. Этот тип данных состоит из очень большого количества строк (наблюдений) по сравнению с меньшим количеством столбцов (переменных). Вместо записи специализированного кода, учитывающего огромный размер данных, например с помощью MapReduce, можно использовать длинные массивы для работы с большими наборами данных способом, подобным MATLAB массивам в памяти. Основным различием является то, что длинные массивы обычно остаются недооцененными, пока вы не запросите, чтобы вычисления были выполнены.

При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Чтобы запустить пример с использованием локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, измените глобальное окружение выполнения с помощью mapreducer функция.

mapreducer(0)

Этот пример работает с подмножеством данных на одном компьютере, чтобы разработать линейную регрессионую модель, и затем он масштабируется, чтобы проанализировать весь набор данных. Вы можете масштабировать этот анализ еще дальше:

  • Работа с данными, которые нельзя считать в память

  • Работайте с данными, распределенными между кластерами, используя MATLAB Parallel Server™

  • Интеграция с такими системами больших данных, как Hadoop ® и Spark ®

Введение в машинное обучение с длинными массивами

Несколько неконтролируемых и алгоритмы контролируемого обучения в Statistics and Machine Learning Toolbox доступны для работы с длинными массивами для выполнения интеллектуального анализа данных и прогнозирующего моделирования с данной , которой не помещаютсей в память,. Эти алгоритмы подходят для данных , которых не помещаютсь в память, и могут включать небольшие изменения от алгоритмов в памяти. Возможности включают в себя:

  • k-средних значений значение кластеризации

  • Линейная регрессия

  • Обобщенная линейная регрессия

  • Логистическая регрессия

  • Дискриминантный анализ

Рабочий процесс машинного обучения для данных , которых не помещаютсь в память, в MATLAB похож на данные в памяти:

  1. Предварительно обработать

  2. Исследовать

  3. Разрабатывайте модель

  4. Валидация модели

  5. Масштабирование до больших данных

Этот пример следует аналогичной структуре при разработке прогнозирующей модели для задержек авиакомпаний. Данные включают большой файл информации рейса авиакомпаний с 1987 по 2008 год. Цель примера состоит в том, чтобы предсказать задержку вылета на основе ряда переменных.

Подробная информация об основных аспектах длинные массивы содержится в примере Анализ больших данных в MATLAB Использование Длинные массивы. Этот пример расширяет анализ, чтобы включить машинное обучение с длинными массивами.

Создание Длинная таблица of Airline Data

Datastore является репозиторием для наборов данных, которые являются слишком большими, чтобы помещаться в памяти. Можно создать datastore из ряда различных форматов файлов в качестве первого шага к созданию длинный массив из внешнего источника данных.

Создайте datastore для примера файла airlinesmall.csv. Выберите интересующие переменные, обработайте 'NA' значения как отсутствующие данные и сгенерировать таблицу предварительного просмотра данных.

ds = datastore(fullfile(matlabroot,'toolbox','matlab','demos','airlinesmall.csv'));
ds.SelectedVariableNames = {'Year','Month','DayofMonth','DayOfWeek',...
    'DepTime','ArrDelay','DepDelay','Distance'};
ds.TreatAsMissing = 'NA';
pre = preview(ds)
pre=8×8 table
    Year    Month    DayofMonth    DayOfWeek    DepTime    ArrDelay    DepDelay    Distance
    ____    _____    __________    _________    _______    ________    ________    ________

    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         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          859         11          -1         954   

Создайте длинная таблица, поддерживаемый datastore, чтобы облегчить работу с данными. Базовый тип данных длинный массив зависит от типа datastore. В этом случае datastore является табличным текстом и возвращает длинная таблица. Это отображение включает предварительный просмотр данных с указанием, что размер неизвестен.

tt = tall(ds)
tt =

  Mx8 tall table

    Year    Month    DayofMonth    DayOfWeek    DepTime    ArrDelay    DepDelay    Distance
    ____    _____    __________    _________    _______    ________    ________    ________

    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         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          859         11          -1         954   
     :        :          :             :           :          :           :           :
     :        :          :             :           :          :           :           :

Предварительная обработка данных

Этот пример призван исследовать время дня и день недели более подробно. Преобразуйте день недели в категориальные данные с метками и определите час дня из числовой переменной времени отправления.

tt.DayOfWeek = categorical(tt.DayOfWeek,1:7,{'Sun','Mon','Tues',...
    'Wed','Thu','Fri','Sat'});
tt.Hr = discretize(tt.DepTime,0:100:2400,0:23)
tt =

  Mx9 tall table

    Year    Month    DayofMonth    DayOfWeek    DepTime    ArrDelay    DepDelay    Distance    Hr
    ____    _____    __________    _________    _______    ________    ________    ________    __

    1987     10          21          Tues         642          8          12         308        6
    1987     10          26          Sun         1021          8           1         296       10
    1987     10          23          Thu         2055         21          20         480       20
    1987     10          23          Thu         1332         13          12         296       13
    1987     10          22          Wed          629          4          -1         373        6
    1987     10          28          Tues        1446         59          63         308       14
    1987     10           8          Wed          928          3          -2         447        9
    1987     10          10          Fri          859         11          -1         954        8
     :        :          :             :           :          :           :           :        :
     :        :          :             :           :          :           :           :        :

Включать только годы после 2000 и игнорировать строки с отсутствующими данными. Идентифицируйте интересующие данные по логическому условию.

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

Исследуйте данные по группам

Для длинные массивы доступен ряд исследовательских функций. Для примера, grpstats функция вычисляет сгруппированную статистику длинные массивы. Исследуйте данные путем определения центра и распространения данных с суммарной статистикой, сгруппированной по дням недели. Кроме того, исследуйте корреляцию между задержкой вылета и задержкой прибытия.

g = grpstats(tt(:,{'ArrDelay','DepDelay','DayOfWeek'}),'DayOfWeek',...
    {'mean','std','skewness','kurtosis'})
g =

  Mx11 tall table

    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... tall array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Эти команды создают больше длинные массивы. Команды не выполняются, пока вы явно не соберете результаты в рабочую область. The gather команда запускает выполнение и пытается минимизировать количество проходов, необходимых через данные для выполнения вычислений. gather требует, чтобы получившиеся переменные помещались в память.

[statsByDay,C] = gather(g,C)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 2.9 sec
Evaluation completed in 4.2 sec
statsByDay=7×11 table
    GroupLabel    DayOfWeek    GroupCount    mean_ArrDelay    std_ArrDelay    skewness_ArrDelay    kurtosis_ArrDelay    mean_DepDelay    std_DepDelay    skewness_DepDelay    kurtosis_DepDelay
    __________    _________    __________    _____________    ____________    _________________    _________________    _____________    ____________    _________________    _________________

     {'Fri' }       Fri           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           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

Переменные, содержащие результаты, теперь являются переменными в памяти в Рабочей области. На основе этих вычислений в данных происходит изменение, и существует корреляция между задержками, которые можно исследовать дальше.

Исследуйте эффект дня недели и часа дня и получайте дополнительную статистическую информацию, такую как стандартная ошибка среднего и 95% доверительный интервал для среднего. Можно передать вся длинная таблица и задать, по каким переменным выполнять вычисления.

byDayHr = grpstats(tt,{'Hr','DayOfWeek'},...
    {'mean','sem','meanci'},'DataVar','DepDelay');
byDayHr = gather(byDayHr);
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 2 sec
Evaluation completed in 2.6 sec

Из-за разбиения данных на разделы длинный массив выход может оказаться неупорядоченным. Переставьте данные в памяти для дальнейшего исследования.

x = unstack(byDayHr(:,{'Hr','DayOfWeek','mean_DepDelay'}),...
    'mean_DepDelay','DayOfWeek');
x = sortrows(x)
x=24×8 table
    Hr      Sun        Mon         Tues        Wed        Thu        Fri        Sat  
    __    _______    ________    ________    _______    _______    _______    _______

     0     38.519      71.914      39.656     34.667         90     25.536     65.579
     1     45.846      27.875        93.6     125.23     52.765     38.091     29.182
     2        NaN          39         102        NaN      78.25       -1.5        NaN
     3        NaN         NaN         NaN        NaN     -377.5       53.5        NaN
     4         -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.08      1.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.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
      ⋮

Визуализация данных в длинных массивах

В настоящее время можно визуализировать данные длинный массив с помощью histogram, histogram2, binScatterPlot, и ksdensity. Визуализация все запускают выполнение, подобно вызову gather функция.

Использование binScatterPlot чтобы изучить отношения между Hr и DepDelay переменные.

binScatterPlot(tt.Hr,tt.DepDelay,'Gamma',0.25)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.3 sec
Evaluation completed in 1.7 sec
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.98 sec
Evaluation completed in 1.1 sec
ylim([0 500])
xlabel('Time of Day')
ylabel('Delay (Minutes)')

Figure contains an axes and other objects of type uicontrol. The axes contains an object of type histogram2.

Как отмечается на выходном отображении, визуализация часто принимает два прохода через данные: один для выполнения раскладывания и один для выполнения связанного вычисления и получения визуализации.

Разделение данных на наборы для обучения и валидации

Чтобы разработать модель машинного обучения, полезно зарезервировать часть данных для обучения и разработки модели и другую часть данных для тестирования модели. Существует несколько способов разделить данные на наборы обучения и валидации.

Использование datasample для получения случайной выборки данных. Затем используйте cvpartition разбить данные на тестовые и наборы обучающих данных. Чтобы получить нертифицированные разбиения, установите равномерную сгруппированную переменную путем умножения выборок данных на нуль.

Для воспроизводимости установите seed генератора случайных чисел используя tallrng. Результаты могут варьироваться в зависимости от количества рабочих процессов и окружения выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление, Где Ваш Код Запуски.

tallrng('default')
data = datasample(tt,25000,'Replace',false);
groups = 0*data.DepDelay;
y = cvpartition(groups,'HoldOut',1/3);
dataTrain = data(training(y),:); 
dataTest = data(test(y),:);

Подгонка модели управляемого обучения

Создайте модель, чтобы предсказать задержку вылета на основе нескольких переменных. Функция линейной регрессионной модели fitlm ведет себя аналогично функции в памяти. Однако вычисления с длинные массивы приводят к CompactLinearModel, что более эффективно для больших наборов данных. Модель аппроксимации запускает выполнение, потому что это итеративный процесс.

model = fitlm(dataTrain,'ResponseVar','DepDelay')
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 1.3 sec
- Pass 2 of 2: Completed in 3 sec
Evaluation completed in 5 sec
model = 
Compact linear regression model:
    DepDelay ~ [Linear formula with 9 terms in 8 predictors]

Estimated Coefficients:
                       Estimate         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.91768       0.36625      2.5056      0.012234
    DayOfWeek_Sat        0.45668       0.35785      1.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

Предсказание и валидация модели

Отображение указывает информацию о подгонке, а также коэффициенты и связанную статистику коэффициентов.

The model переменная содержит информацию о подобранной модели как свойствах, к которым можно получить доступ с помощью записи через точку. Кроме того, дважды нажатие кнопки переменную в Рабочей области, чтобы исследовать свойства в интерактивном режиме.

model.Rsquared
ans = struct with fields:
    Ordinary: 0.8335
    Adjusted: 0.8334

Спрогнозируйте новые значения на основе модели, вычислите невязки и визуализируйте с помощью гистограммы. The predict функция предсказывает новые значения как для высоких, так и для данных в памяти.

pred = predict(model,dataTest);
err = pred - dataTest.DepDelay;
figure
histogram(err,'BinLimits',[-100 100],'Normalization','pdf')
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 1.8 sec
- Pass 2 of 2: Completed in 1.3 sec
Evaluation completed in 3.6 sec
title('Histogram of Residuals')

Figure contains an axes. The axes with title Histogram of Residuals contains an object of type histogram.

Оцените и скорректируйте модель

Глядя на выходные значения p на отображении, некоторые переменные могут быть ненужными в модели. Можно уменьшить сложность модели, удалив эти переменные.

Исследуйте значимость переменных в модели более внимательно, используя anova.

a = anova(model)
a=9×5 table
                    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 переменные Year, Month, и DayOfMonth не являются значимыми для этой модели, поэтому вы можете удалить их, не влияя негативно на качество модели.

Чтобы исследовать эти параметры модели далее, используйте интерактивную визуализацию, такую как plotSlice, plotInterations, и plotEffects. Для примера используйте plotEffects чтобы изучить предполагаемый эффект, который каждая переменная предиктора оказывает на задержку вылета.

plotEffects(model)

Figure contains an axes. The axes contains 10 objects of type line.

На основе этих вычислений ArrDelay является основным эффектом в модели (он сильно коррелирует с DepDelay). Другие эффекты наблюдаемы, но оказывают гораздо меньшее влияние. В сложение, Hr был определен из DepTimeтак что для модели необходима только одна из этих переменных.

Уменьшите количество переменных, чтобы исключить все компоненты даты, а затем подгоните новую модель.

model2 = fitlm(dataTrain,'DepDelay ~ DepTime + ArrDelay + Distance')
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.3 sec
Evaluation completed in 1.5 sec
model2 = 
Compact linear regression model:
    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
    Distance       0.0012981    0.00016886     7.6875    1.5838e-14


Number of observations: 16667, Error degrees of freedom: 16663
Root Mean Squared Error: 12.4
R-squared: 0.833,  Adjusted R-Squared: 0.833
F-statistic vs. constant model: 2.77e+04, p-value = 0

Разработка модели

Даже при упрощенной модели может быть полезно дополнительно настроить отношения между переменными и включать определенные взаимодействия. Чтобы экспериментировать дальше, повторите этот рабочий процесс с меньшие длинные массивы. Для эффективности во время настройки модели можно рассмотреть возможность работы с небольшим извлечением данных в памяти перед масштабированием до весь длинный массив.

В этом примере можно использовать функциональность, подобную ступенчатой регрессии, которая подходит для итерационной разработки модели в памяти. После настройки модели можно масштабировать, чтобы использовать длинные массивы.

Соберите подмножество данных в рабочую область и используйте stepwiselm итеративно разрабатывать модель в памяти.

subset = gather(dataTest);
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.68 sec
Evaluation completed in 0.72 sec
sModel = stepwiselm(subset,'ResponseVar','DepDelay')
1. Adding ArrDelay, FStat = 42200.3016, pValue = 0
2. Adding DepTime, FStat = 51.7918, pValue = 6.70647e-13
3. Adding DepTime:ArrDelay, FStat = 42.4982, pValue = 7.48624e-11
4. Adding Distance, FStat = 15.4303, pValue = 8.62963e-05
5. Adding ArrDelay:Distance, FStat = 231.9012, pValue = 1.135326e-51
6. Adding DayOfWeek, FStat = 3.4704, pValue = 0.0019917
7. Adding DayOfWeek:ArrDelay, FStat = 26.334, pValue = 3.16911e-31
8. Adding DayOfWeek:DepTime, FStat = 2.1732, pValue = 0.042528
sModel = 
Linear regression model:
    DepDelay ~ [Linear formula with 9 terms in 4 predictors]

Estimated Coefficients:
                                Estimate          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.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 с формулой, возвращенной stepwiselm.

model3 = fitlm(dataTrain,sModel.Formula)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.8 sec
Evaluation completed in 2 sec
model3 = 
Compact linear regression model:
    DepDelay ~ [Linear formula with 9 terms in 4 predictors]

Estimated Coefficients:
                                Estimate          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       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.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.4664
    DayOfWeek_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

Можно повторить этот процесс, чтобы продолжить корректировку линейной модели. Однако в этом случае необходимо изучить различные типы регрессии, которые могут быть более подходящими для этих данных. Для примера, если вы не хотите включать задержку прибытия, то этот тип линейной модели больше не подходит. Для получения дополнительной информации см. раздел Логистическая регрессия с длинными массивами.

Шкала до искры

Ключевой возможностью длинных массивов в MATLAB и Statistics and Machine Learning Toolbox является подключение к таким платформам, как Hadoop и Spark. Можно даже скомпилировать код и запустить его на Spark с помощью MATLAB Compiler™. Дополнительные сведения об использовании этих продуктов см. в разделе Расширение длинных массивов другими продуктами:

  • Database Toolbox™

  • Parallel Computing Toolbox™

  • MATLAB ® Parallel Server™

  • MATLAB Compiler™

Похожие темы