Прогноз расхода бензина

Этот пример показывает, как предсказать расхода топлива (мили на галлон) для автомобилей, с помощью данных из ранее записанных наблюдений.

Введение

Автомобильный MPG (мили на галлон) прогноз является типичной нелинейной проблемой регрессии, в которой несколько атрибутов информации о профиле автомобиля используются, чтобы предсказать другой непрерывный атрибут, расход топлива в MPG. Данные тренировки доступны в UCI (Унив Калифорнии в Ирвине) Репозиторий Машинного обучения и содержат данные, собранные от автомобилей различных, делает и модели.

Таблица, показанная выше, является несколькими наблюдениями или выборками от набора данных MPG. Шесть входных атрибутов нет. из цилиндров, смещения, лошадиной силы, веса, ускорения, и модельный год. Выходная переменная, которая будет предсказана, является расходом топлива в MPG. (Производители автомобиля и модели в первом столбце таблицы не используются для прогноза).

Разделение данных

Набор данных получен из исходного файла данных 'auto-gas.dat'. Набор данных затем разделен в набор обучающих данных (нечетно индексированные выборки) и набор проверки (даже индексированные выборки).

[data,input_name] = loadgas;
trn_data = data(1:2:end,:);
chk_data = data(2:2:end,:);

Введите выбор

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

exhsrch(1,trn_data,chk_data,input_name);
Train 6 ANFIS models, each with 1 inputs selected from 6 candidates...

ANFIS model 1: Cylinder --> trn=4.6400, chk=4.7255
ANFIS model 2: Disp --> trn=4.3106, chk=4.4316
ANFIS model 3: Power --> trn=4.5399, chk=4.1713
ANFIS model 4: Weight --> trn=4.2577, chk=4.0863
ANFIS model 5: Acceler --> trn=6.9789, chk=6.9317
ANFIS model 6: Year --> trn=6.2255, chk=6.1693

Рисунок 1: влияние Каждой входной переменной на расход топлива

Крайняя левая входная переменная в рисунке 1 имеет наименьшее количество ошибки или другими словами большую часть уместности относительно вывода.

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

Интуитивно, мы можем просто выбрать Weight и Disp непосредственно, поскольку у них есть наименьшее количество ошибок как показано в графике. Однако это не обязательно будет оптимальной комбинацией двух входных параметров, которые приводят к минимальной учебной ошибке. Чтобы проверить это, мы можем использовать exhsrch, чтобы искать оптимальную комбинацию 2 входных атрибутов.

input_index = exhsrch(2,trn_data,chk_data,input_name);
Train 15 ANFIS models, each with 2 inputs selected from 6 candidates...

ANFIS model 1: Cylinder Disp --> trn=3.9320, chk=4.7920
ANFIS model 2: Cylinder Power --> trn=3.7364, chk=4.8683
ANFIS model 3: Cylinder Weight --> trn=3.8741, chk=4.6763
ANFIS model 4: Cylinder Acceler --> trn=4.3287, chk=5.9625
ANFIS model 5: Cylinder Year --> trn=3.7129, chk=4.5946
ANFIS model 6: Disp Power --> trn=3.8087, chk=3.8594
ANFIS model 7: Disp Weight --> trn=4.0271, chk=4.6350
ANFIS model 8: Disp Acceler --> trn=4.0782, chk=4.4890
ANFIS model 9: Disp Year --> trn=2.9565, chk=3.3905
ANFIS model 10: Power Weight --> trn=3.9310, chk=4.2976
ANFIS model 11: Power Acceler --> trn=4.2740, chk=3.8738
ANFIS model 12: Power Year --> trn=3.3796, chk=3.3505
ANFIS model 13: Weight Acceler --> trn=4.0875, chk=4.0095
ANFIS model 14: Weight Year --> trn=2.7657, chk=2.9953
ANFIS model 15: Acceler Year --> trn=5.6242, chk=5.6481

Рисунок 2: Все две комбинации входной переменной и их влияние на расход топлива

Результаты exhsrch указывают, что Weight и Year формируют оптимальную комбинацию двух входных атрибутов. Ошибки обучения и проверки становятся выдающимися, указывая на начало сверхподбора кривой. Не может быть благоразумно использовать больше чем два входных параметров для того, чтобы создать модель ANFIS. Мы можем протестировать эту предпосылку, чтобы проверить, что это - валидность.

exhsrch(3,trn_data,chk_data,input_name);
Train 20 ANFIS models, each with 3 inputs selected from 6 candidates...

ANFIS model 1: Cylinder Disp Power --> trn=3.4446, chk=11.5329
ANFIS model 2: Cylinder Disp Weight --> trn=3.6686, chk=4.8922
ANFIS model 3: Cylinder Disp Acceler --> trn=3.6610, chk=5.2384
ANFIS model 4: Cylinder Disp Year --> trn=2.5463, chk=4.9001
ANFIS model 5: Cylinder Power Weight --> trn=3.4797, chk=9.3761
ANFIS model 6: Cylinder Power Acceler --> trn=3.5432, chk=4.4804
ANFIS model 7: Cylinder Power Year --> trn=2.6300, chk=3.6300
ANFIS model 8: Cylinder Weight Acceler --> trn=3.5708, chk=4.8379
ANFIS model 9: Cylinder Weight Year --> trn=2.4951, chk=4.0435
ANFIS model 10: Cylinder Acceler Year --> trn=3.2698, chk=6.2616
ANFIS model 11: Disp Power Weight --> trn=3.5879, chk=7.4942
ANFIS model 12: Disp Power Acceler --> trn=3.5395, chk=3.9953
ANFIS model 13: Disp Power Year --> trn=2.4607, chk=3.3563
ANFIS model 14: Disp Weight Acceler --> trn=3.6075, chk=4.2318
ANFIS model 15: Disp Weight Year --> trn=2.5617, chk=3.7866
ANFIS model 16: Disp Acceler Year --> trn=2.4149, chk=3.2480
ANFIS model 17: Power Weight Acceler --> trn=3.7884, chk=4.0480
ANFIS model 18: Power Weight Year --> trn=2.4371, chk=3.2852
ANFIS model 19: Power Acceler Year --> trn=2.7276, chk=3.2580
ANFIS model 20: Weight Acceler Year --> trn=2.3603, chk=2.9152

Рисунок 3: Все три комбинации входной переменной и их влияние на расход топлива

График показывает результат выбора трех входных параметров, в которых Weight, Year и Acceler выбраны как лучшая комбинация трех входных переменных. Однако минимальное обучение (и проверяющий) ошибка значительно не уменьшает из той из лучшей 2D входной модели, которая указывает, что недавно добавленный атрибут Acceler не улучшает прогноз очень. Для лучшего обобщения мы всегда предпочитаем модель с простой структурой. Поэтому мы будем придерживаться 2D входа ANFIS для дальнейшего исследования.

Мы затем извлекаем выбранные входные атрибуты от исходного обучения и проверяющий наборы данных.

close all;
new_trn_data = trn_data(:,[input_index, size(trn_data,2)]);
new_chk_data = chk_data(:,[input_index, size(chk_data,2)]);

Учебная модель ANFIS

Функциональный exhsrch только обучает каждый ANFIS в течение одной эпохи в порядке смочь быстро найти правильные входные параметры. Теперь, когда входные параметры фиксируются, мы можем провести больше времени на обучении ANFIS (100 эпох).

Функция genfis генерирует начальный FIS от данных тренировки, который затем подстраивается ANFIS, чтобы сгенерировать итоговую модель.

in_fismat = genfis(new_trn_data(:,1:end-1),new_trn_data(:,end));
anfisOpt = anfisOptions('InitialFIS',in_fismat,'EpochNumber',100,...
                        'StepSizeDecreaseRate',0.5,...
                        'StepSizeIncreaseRate',1.5,...
                        'ValidationData',new_chk_data,...
                        'DisplayANFISInformation',0,...
                        'DisplayErrorValues',0,...
                        'DisplayStepSize',0,...
                        'DisplayFinalResults',0);
[trn_out_fismat,trn_error,step_size,chk_out_fismat,chk_error] = ...
    anfis(new_trn_data,anfisOpt);

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

[a,b] = min(chk_error);
plot(1:100,trn_error,'g-',1:100,chk_error,'r-',b,a,'ko')
title('Training (green) and checking (red) error curve','fontsize',10)
xlabel('Epoch numbers','fontsize',10)
ylabel('RMS errors','fontsize',10)

Рисунок 4: обучение ANFIS и ошибки проверки

График выше показов кривые ошибок в течение 100 эпох обучения ANFIS. Зеленая кривая дает учебные ошибки, и красная кривая дает ошибки проверки. Минимальная ошибка проверки происходит приблизительно в эпоху 45, который обозначается кругом. Заметьте, что кривая ошибок проверки повышается после 50 эпох, указывая, что дальнейшее обучение по подгонкам данные и производит худшее обобщение

ANFIS по сравнению с линейной регрессией

Хорошее осуществление в этой точке должно было бы проверять производительность модели ANFIS с моделью линейной регрессии.

Прогноз ANFIS может быть сравнен с моделью линейной регрессии путем сравнения их соответствующего RMSE (Среднеквадратичное значение) значения против проверки данных.

% Performing Linear Regression
N = size(trn_data,1);
A = [trn_data(:,1:6) ones(N,1)];
B = trn_data(:,7);
coef = A\B; % Solving for regression parameters from training data

Nc = size(chk_data,1);
A_ck = [chk_data(:,1:6) ones(Nc,1)];
B_ck = chk_data(:,7);
lr_rmse = norm(A_ck*coef-B_ck)/sqrt(Nc);
% Printing results
fprintf('\nRMSE against checking data\nANFIS : %1.3f\tLinear Regression : %1.3f\n',a,lr_rmse);
RMSE against checking data
ANFIS : 2.980	Linear Regression : 3.444

Это видно, что модель ANFIS превосходит модель линейной регрессии по характеристикам.

Анализ модель ANFIS

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

chk_out_fismat.Inputs(1).Name = "Weight";
chk_out_fismat.Inputs(2).Name = "Year";
chk_out_fismat.Outputs(1).Name = "MPG";

% Generating the FIS output surface plot
gensurf(chk_out_fismat);

Рисунок 5: поверхность ввода - вывода для обученного FIS

Поверхность ввода - вывода, показанная выше, является нелинейной и монотонной поверхностью и иллюстрирует, как модель ANFIS ответит на переменные значения 'веса' и 'год'.

Ограничения и предостережения

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

plot(new_trn_data(:,1),new_trn_data(:, 2),'bo', ...
     new_chk_data(:,1),new_chk_data(:, 2),'rx')
xlabel('Weight','fontsize',10)
ylabel('Year','fontsize',10)
title('Training (o) and checking (x) data','fontsize',10)

Рисунок 6: Вес по сравнению с графиком года, показывающим отсутствие данных в верхнем правом углу

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

Смотрите также

| |

Похожие темы