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

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

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

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

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

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

[data,input_name] = loadGasData;

Разделите набор данных в набор обучающих данных (нечетно индексированные выборки) и набор валидации (даже индексированные выборки).

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

Выберите Inputs

Используйте 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 object. The axes object 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.2983
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 object. The axes object 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.8923
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.3759
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.8380
ANFIS model 9: Cylinder Weight Year --> trn=2.4951, val=4.0433
ANFIS model 10: Cylinder Acceler Year --> trn=3.2698, val=6.2616
ANFIS model 11: Disp Power Weight --> trn=3.5879, val=7.4978
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.2326
ANFIS model 15: Disp Weight Year --> trn=2.5617, val=3.7855
ANFIS model 16: Disp Acceler Year --> trn=2.4149, val=3.2480
ANFIS model 17: Power Weight Acceler --> trn=3.7884, val=4.0476
ANFIS model 18: Power Weight Year --> trn=2.4371, val=3.2866
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 object. The axes object with title Error for Corresponding Inputs contains 3 objects of type line. These objects represent Training, Validation.

Этот график показывает результат выбора трех входных параметров. Здесь, комбинация Weightгод, и Acceler производит самую низкую учебную ошибку. Однако ошибки обучения и валидации не существенно ниже, чем та из лучшей 2D входной модели, которая указывает что недавно добавленная переменная Acceler не улучшает предсказание очень. Когда более простые модели обычно делают вывод лучше, используют 2D вход 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 object. The axes object 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 object. The axes object 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 object. The axes object with title Training (o) and Validation (x) Data contains 2 objects of type line.

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

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

| |

Похожие темы