Житель пригорода модели, коммутирующийся Используя отнимающую кластеризацию

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

Загрузите и отобразите данные на графике.

mytripdata
subplot(2,1,1)
plot(datin)
ylabel('input')
subplot(2,1,2)
plot(datout)
ylabel('output')

mytripdata команда создает несколько переменных в рабочей области. Из исходных 100 точек данных используйте 75 точек данных в качестве обучающих данных (datin и datout) и 25 точек данных как проверка данных (а также для тестовых данных, чтобы подтвердить модель). Вводом данных проверки / выходные переменные пары является chkdatin и chkdatout.

Сгенерируйте модель из данных с помощью отнимающей кластеризации с помощью genfis команда.

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

opt = genfisOptions('SubtractiveClustering','ClusterInfluenceRange',0.5);

Сгенерируйте модель FIS с помощью обучающих данных и заданных опций.

fismat = genfis(datin,datout,opt);

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

Проверьте модель. Здесь, trnRMSE среднеквадратическая ошибка системы, сгенерированной обучающими данными.

fuzout = evalfis(fismat,datin);
trnRMSE = norm(fuzout-datout)/sqrt(length(fuzout))
trnRMSE = 0.5276

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

chkfuzout = evalfis(fismat,chkdatin);
chkRMSE = norm(chkfuzout-chkdatout)/sqrt(length(chkfuzout))
chkRMSE = 0.6179

Постройте выход модели, chkfuzout, против данных о валидации, chkdatout.

figure
plot(chkdatout)
hold on
plot(chkfuzout,'o')
hold off

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

На данном этапе можно использовать возможность оптимизации anfis улучшить модель. Во-первых, попытайтесь использовать относительно короткий период подготовки (20 эпох), не используя данные о валидации, и затем протестируйте получившуюся модель FIS против данных о тестировании.

anfisOpt = anfisOptions('InitialFIS',fismat,'EpochNumber',20,...
                        'InitialStepSize',0.1);
fismat2 = anfis([datin datout],anfisOpt);
ANFIS info: 
	Number of nodes: 44
	Number of linear parameters: 18
	Number of nonlinear parameters: 30
	Total number of parameters: 48
	Number of training data pairs: 75
	Number of checking data pairs: 0
	Number of fuzzy rules: 3


Start training ANFIS ...

   1 	 0.527607
   2 	 0.513727
   3 	 0.492996
   4 	 0.499985
   5 	 0.490585
   6 	 0.492924
   7 	 0.48733
Step size decreases to 0.090000 after epoch 7.
   8 	 0.485036
   9 	 0.480813
  10 	 0.475097
Step size increases to 0.099000 after epoch 10.
  11 	 0.469759
  12 	 0.462516
  13 	 0.451177
  14 	 0.447856
Step size increases to 0.108900 after epoch 14.
  15 	 0.444356
  16 	 0.433904
  17 	 0.433739
  18 	 0.420408
Step size increases to 0.119790 after epoch 18.
  19 	 0.420512
  20 	 0.420275

Designated epoch number reached --> ANFIS training completed at epoch 20.

Minimal training RMSE = 0.420275

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

fuzout2 = evalfis(fismat2,datin);
trnRMSE2 = norm(fuzout2-datout)/sqrt(length(fuzout2))
trnRMSE2 = 0.4203
chkfuzout2 = evalfis(fismat2,chkdatin);
chkRMSE2 = norm(chkfuzout2-chkdatout)/sqrt(length(chkfuzout2))
chkRMSE2 = 0.5894

Модель улучшилась много относительно обучающих данных, но только немного относительно данных о валидации. Постройте улучшенный выход модели, полученный с помощью anfis против данных о тестировании.

figure
plot(chkdatout)
hold on
plot(chkfuzout2,'o')
hold off

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

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

Чтобы проверять модель на сверхподбор кривой, используйте anfis с данными о валидации, чтобы обучить модель в течение 200 эпох.

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

anfisOpt.EpochNumber = 200;
anfisOpt.ValidationData = [chkdatin chkdatout];
anfisOpt.DisplayANFISInformation = 0;
anfisOpt.DisplayErrorValues = 0;
anfisOpt.DisplayStepSize = 0;
anfisOpt.DisplayFinalResults = 0;

Обучите FIS.

[fismat3,trnErr,stepSize,fismat4,chkErr] = anfis([datin datout],anfisOpt);

Здесь,

  • fismat3 объект FIS, когда учебная ошибка достигает минимума.

  • fismat4 объект FIS снимка состояния, когда ошибка данных о валидации достигает минимума.

  • stepSize история учебных размеров шага.

  • trnErr RMSE использование обучающих данных

  • chkErr RMSE использование данных о валидации в течение каждой учебной эпохи.

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

fuzout4 = evalfis(fismat4,datin);
trnRMSE4 = norm(fuzout4-datout)/sqrt(length(fuzout4))
trnRMSE4 = 0.3393
chkfuzout4 = evalfis(fismat4,chkdatin);
chkRMSE4 = norm(chkfuzout4-chkdatout)/sqrt(length(chkfuzout4))
chkRMSE4 = 0.5834

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

Просмотрите улучшенный выход модели. Постройте выход модели против данных о проверке.

figure
plot(chkdatout)
hold on
plot(chkfuzout4,'o')
hold off

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

Затем постройте учебную ошибку, trnErr.

figure
plot(trnErr)
title('Training Error')
xlabel('Number of Epochs')
ylabel('Training Error')

Этот график показывает, что учебная ошибка обосновывается приблизительно в 60-й точке эпохи.

Постройте ошибку проверки, chkErr.

figure
plot(chkErr)
title('Checking Error')
xlabel('Number of Epochs')
ylabel('Checking Error')

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

Можно также сравнить выход fismat2 и fistmat4 против данных о валидации, chkdatout.

figure
plot(chkdatout)
hold on
plot(chkfuzout4,'ob')
plot(chkfuzout2,'+r')

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

|

Похожие темы