exponenta event banner

Прогноз пробега газа

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

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

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

Данные раздела

Получение набора данных из исходного файла данных auto-gas.dat с использованием loadGasData функция.

[data,input_name] = loadGasData;

Разбиение набора данных на обучающий набор (нечетно-индексированные выборки) и набор проверки (четно-индексированные выборки).

trn_data = data(1:2:end,:);
val_data = data(2:2:end,:);

Выбор входных данных

Используйте exhaustiveSearch функция для выполнения исчерпывающего поиска в пределах имеющихся входных данных для выбора набора входных данных, которые в наибольшей степени влияют на расход топлива. Использовать первый аргумент exhaustiveSearch для указания количества входов на комбинацию (1 в данном примере). exhaustiveSearch создает модель ANFIS для каждой комбинации, обучает ее на одну эпоху и сообщает о достигнутых результатах. Во-первых, использовать exhaustiveSearch чтобы определить, какая переменная сама по себе может наилучшим образом предсказать выходные данные.

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

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

Figure contains an axes. The axes with title Error for Corresponding Inputs contains 3 objects of type line. These objects represent Training, Validation.

График показывает, что Weight переменная имеет наименьшую среднеквадратичную ошибку. Другими словами, он может наилучшим образом предсказать MPG.

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

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

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

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

Figure contains an axes. The axes with title Error for Corresponding Inputs contains 3 objects of type line. These objects represent Training, Validation.

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

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

ANFIS model 1: Cylinder Disp Power --> trn=3.4446, val=11.5329
ANFIS model 2: Cylinder Disp Weight --> trn=3.6686, val=4.8920
ANFIS model 3: Cylinder Disp Acceler --> trn=3.6610, val=5.2384
ANFIS model 4: Cylinder Disp Year --> trn=2.5463, val=4.9001
ANFIS model 5: Cylinder Power Weight --> trn=3.4797, val=9.3757
ANFIS model 6: Cylinder Power Acceler --> trn=3.5432, val=4.4804
ANFIS model 7: Cylinder Power Year --> trn=2.6300, val=3.6300
ANFIS model 8: Cylinder Weight Acceler --> trn=3.5708, val=4.8378
ANFIS model 9: Cylinder Weight Year --> trn=2.4951, val=4.0434
ANFIS model 10: Cylinder Acceler Year --> trn=3.2698, val=6.2616
ANFIS model 11: Disp Power Weight --> trn=3.5879, val=7.4977
ANFIS model 12: Disp Power Acceler --> trn=3.5395, val=3.9953
ANFIS model 13: Disp Power Year --> trn=2.4607, val=3.3563
ANFIS model 14: Disp Weight Acceler --> trn=3.6075, val=4.2308
ANFIS model 15: Disp Weight Year --> trn=2.5617, val=3.7857
ANFIS model 16: Disp Acceler Year --> trn=2.4149, val=3.2480
ANFIS model 17: Power Weight Acceler --> trn=3.7884, val=4.0474
ANFIS model 18: Power Weight Year --> trn=2.4371, val=3.2850
ANFIS model 19: Power Acceler Year --> trn=2.7276, val=3.2580
ANFIS model 20: Weight Acceler Year --> trn=2.3603, val=2.9152

Figure contains an axes. The axes with title Error for Corresponding Inputs contains 3 objects of type line. These objects represent Training, Validation.

На этом графике показан результат выбора трех входных данных. Здесь сочетание Weight, Year, и Acceler создает наименьшую ошибку обучения. Тем не менее, ошибки обучения и проверки не значительно ниже, чем у лучшей модели с двумя входами, что указывает на то, что вновь добавленная переменная Acceler не сильно улучшает прогноз. Поскольку более простые модели обычно обобщают лучше, используйте ANFIS с двумя входами для дальнейшего изучения.

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

new_trn_data = trn_data(:,[input_index, size(trn_data,2)]);
new_val_data = val_data(:,[input_index, size(val_data,2)]);

Модель технологической линии ANFIS

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

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

in_fis = genfis(new_trn_data(:,1:end-1),new_trn_data(:,end));
anfisOpt = anfisOptions('InitialFIS',in_fis,'EpochNumber',100,...
                        'StepSizeDecreaseRate',0.5,...
                        'StepSizeIncreaseRate',1.5,...
                        'ValidationData',new_val_data,...
                        'DisplayANFISInformation',0,...
                        'DisplayErrorValues',0,...
                        'DisplayStepSize',0,...
                        'DisplayFinalResults',0);
[trn_out_fis,trn_error,step_size,val_out_fis,val_error] = ...
    anfis(new_trn_data,anfisOpt);

anfis возвращает ошибки обучения и проверки. Постройте график ошибок обучения и проверки в процессе обучения.

[a,b] = min(val_error);
plot(1:100,trn_error,'g-',1:100,val_error,'r-',b,a,'ko')
title('Training (green) and validation (red) error curve')
xlabel('Epoch number')
ylabel('RMSE')

Figure contains an axes. The axes with title Training (green) and validation (red) error curve contains 3 objects of type line.

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

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

Сначала сравните производительность модели ANFIS с производительностью линейной модели с использованием соответствующих значений RMSE проверки.

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

% Perform linear regression
N = size(trn_data,1);
A = [trn_data(:,1:6) ones(N,1)];
B = trn_data(:,7);
coef = A\B; % Solve for regression parameters from training data

Nc = size(val_data,1);
A_ck = [val_data(:,1:6) ones(Nc,1)];
B_ck = val_data(:,7);
lr_rmse = norm(A_ck*coef-B_ck)/sqrt(Nc);

fprintf('\nRMSE against validation data\nANFIS : %1.3f\tLinear Regression : %1.3f\n',a,lr_rmse);
RMSE against validation data
ANFIS : 2.978	Linear Regression : 3.444

Модель ANFIS имеет более низкий RMSE проверки и поэтому превосходит модель линейной регрессии.

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

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

gensurf(val_out_fis)

Figure contains an axes. The axes contains an object of type surface.

Выходная поверхность является нелинейной и монотонной и иллюстрирует, как модель ANFIS реагирует на различные значения Weight и Year.

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

plot(new_trn_data(:,1),new_trn_data(:,2),'bo', ...
     new_val_data(:,1),new_val_data(:,2),'rx')
xlabel('Weight')
ylabel('Year')
title('Training (o) and Validation (x) Data')

Figure contains an axes. The axes with title Training (o) and Validation (x) Data contains 2 objects of type line.

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

См. также

| |

Связанные темы