В этом примере показано, как предсказать расхода топлива (мили на галлон) для автомобилей, с помощью данных из ранее записанных наблюдений.
Автомобильный 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
год
, и 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)]);
Функциональный 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 может быть сравнен с моделью линейной регрессии путем сравнения их соответствующего 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 превосходит модель линейной регрессии по характеристикам.
Переменная 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 должен всегда интерпретироваться с распределением данных в памяти.