M852_Antonova_1
.pdf
Рис. 1.7. Разделение скрипта на главы
Расчет кривой мощности:
••powervbins= prated*(vbins.^2-vin^2)/(vr^2-vin^2);
••powervbins(vbins<=vin)=0;
••powervbins(vbins>vout)=0;
••powervbins(vbins>=vout)=0;
••powervbins(vbins>=vr&vbins<=vout)=prated
Построение кривой мощности:
••figure; plot(vbins, powervbins, ‘*’)
••xlabel (скорость, м/с);
••ylable (мощность турбины, Вт)
Перед этим следует ввести некоторые константы, позволяющие работать формулам:
Номинальная мощность ветровой турбины: prated=1e6. Скорость включения: vin=2.
Номинальная выходная скорость: vr=14. Скорость выключения: vout=25.
Затем необходимо выполнить следующую команду, которая позволяет
рассчитать среднюю мощность турбины:
••avgPower=sum(probvbins.*powervbins)
Далее требуется вернуться к главам. Функции MATLAB позволяют сгенерировать отчет. Сгенерируйте на основании своего анализа собственный отчет, реализуя такую последовательность действий: на вкладке PUBLISH -> выбираем publish -> Edit Publishing Options -> во вкладке Output file format выбираем формат pdf -> выбираем путь сохранения и нажимаем на кнопку publish.
Далее выполняется скрипт и генерируется отчет, в содержании которого будут главы, обозначенные знаками «%%».
11
Задание
Самостоятельно сгенерировать входные данные, импортировать их в среду MATLAB. Выполнить анализ входных параметров с помощью наложения логических условий. Сделать выводы по полученным результатам.
Контрольные вопросы и задания
1.Для каких целей используется усреднение данных и каким образом оно осуществляется?
2.Вследствие чего возникает информация, искажающая результаты анализа? Как ее устранить ?
3.Что такое критический диапазон?
4.Какой командой отображаются значения, удовлетворяющие условию?
5.Сформулируйте определение КПД.
ЛАБОРАТОРНАЯ РАБОТА № 2 АЛГОРИТМЫ МАШИННОГО ОБУЧЕНИЯ В СРЕДЕ MATLAB
Цель лабораторной работы — сравнить работу алгоритмов машинного обучения и найти оптимальный из них для решения задачи классификации при самостоятельно сгенерированных начальных данных.
Теоретическая часть
Алгоритмы машинного обучения MATLAB (рис. 2.1) используются для обработки больших объемов данных и извлечения требуемых данных из них. Получение аналитической зависимости и составление уравнений – довольно длительный процесс, так как системы, которые требуется моделировать, достаточно сложные. Это обусловливает необходимость применения машинного обучения.
Рис. 2.1. Упрощенный алгоритм машинного обучения в среде MATLAB
Алгоритмы имеют широкую область применения: биология, финансовые сервисы, распознавание изображений, обработка звука и изображения.
Для выполнения данной работы сначала необходимо провести некоторое исследование данных в целях выбора метода обучения модели. Для этого могут подойти как базовые инструменты MATLAB, так и статистические, например для оценки корреляции. Далее следует выбрать модель: регрессии, классификации или кластеризации. Как правило, различные модели дают разные результаты. После этого необходимо провести обучение модели на заранее подготовленных примерах, чтобы у модели сформировалось базовое понятие о прогнозируемой информации. Затем полученную и натренированную модель можно использовать для прогнозов.
13
Наивный байесовский классификатор. Сформулированная выше задача машинного обучения относится к проблеме построения модели классификации. Задача классификации — формализованная задача, в которой имеется множество объектов (ситуаций), разделенных некоторым образом на классы. (Задано конечное множество объектов, для которых известно, к каким классам они относятся. Это множество называется выборкой. Классовая принадлежность остальных объектов неизвестна. Требуется построить алгоритм, способный классифицировать произвольный объект из исходного множества.)
Наивный байесовский классификатор — простой вероятностный классификатор, основанный на применении теоремы Байеса со строгими (наивными) предположениями о независимости. Теорема Байеса — одна из основных теорем элементарной теории вероятностей, которая позволяет определить вероятность какого-либо события при условии, что произошло другое статистически взаимозависимое с ним событие.
Формула Байеса:
P(A|B) = (P(B|A)P(A))/(P(B)),
где P(A|B) — вероятность гипотезы A при наступлении события B; P(B|A) — вероятность наступления события B при истинности гипотезы A; P(A) — априорная вероятность гипотезы A; P(B) — полная вероятность наступления события B.
Достоинство наивного байесовского классификатора — малое количество необходимых данных для обучения при оценке параметров, требуемых для классификации. Недостатком является малое количество совпадений между прогнозируемыми и реальными величинами. Это означает, что классификация недостаточно точна, т. е. данный классификатор относительно прост и примитивен.
Регрессионные деревья. Дерево принятия решений (дерево классификации, или регрессионное дерево) — средство поддержки принятия решений, применяемое в статистике и при анализе данных для прогнозных моделей. Структура дерева представляет собой «листья» и «ветки». На ребрах (ветках) дерева принятия решений записаны атрибуты, от которых зависит целевая функция, в «листьях» — значения целевой функции, а в остальных узлах — атрибуты, по которым различаются случаи. Для того чтобы классифицировать новый случай, необходимо «спуститься по дереву до листа» и выдать соответствующее значение. Подобные деревья решений широко используются в интеллектуальном анализе данных. Цель состоит в том, чтобы создать модель, которая предсказывает значение целевой переменной на основе нескольких переменных на входе.
Достоинства метода:
••прост в понимании и интерпретации; ••не требует подготовки данных;
••можно работать как с категориальными, так и с интервальными типами переменных. Прочие методы используются при работе с теми данными, где присутствует лишь один тип переменных. Например, метод отношений может быть применен только для номинальных переменных, метод нейронных сетей — только для переменных, измеренных по интервальной шкале;
••надежный;
14
Недостатки:
••принцип «черного ящика»; ••качество решения зависит от логики выбора входных данных и спо-
соба обучения.
Определение значимых переменных
В этой части работы исследуем влияние введения значимых переменных из общего массива данных на работу классификатора на примере алгоритма регрессионных деревьев TreeBagger. Аналогичным образом можно рассмотреть удаление лишних переменных и для других классификаторов.
Практическая часть
Проведем оценку энергоэффективности группы, состоящей из различных зданий. Необходимо определить по входным данным потребности зданий в нагреве и охлаждении. Эта задача относится к задаче классификации. В качестве входных данных используются: площади поверхности, площади стен, крыш, расположение окон, их распределение и т. д. В качестве выходных параметров, которые требуется определить, — нагрузка по отоплению и охлаждению. В дальнейшем после построении модели данные, которые не участвовали в обучении, следует использовать для задачи классификации.
Используя методы и инструменты MATLAB, по имеющимся данным определить потребности зданий в нагреве и охлаждении и классифицировать их в зависимости от спрогнозированной потребности.
Модель. Дан каталог, содержащий в себе численные характеристики различных моделей жилых помещений. Здания различаются по следующим параметрам (X — непосредственно характеристики, Y — вытекающие из них потребности, которые требуется прогнозировать):
••относительная компактность Х1; ••площадь поверхности Х2; ••площадь стен Х3; ••площадь крыши Х4; ••высота стен Х5; ••ориентация Х6; ••площадь остекления Х7;
••распределение площади остекления Х8; ••потребность в нагреве Y1; ••потребность в охлаждении Y2.
В качестве начальных данных использованы данные интернет-источника: archive.ics.uci.edu/ml/datasets/Energy+efficiency
Входные данные доступны в средствах Exсel.
Наивный байесовский классификатор. С помощью таблицы Excel и промежуточного *.txt-файла импортируем данные таблицы с характеристиками зданий в среду MATLAB (рис. 2.3). Предварительно следует в таблице Excel округлить значения колонок Y1 и Y2 с помощью функции «ОКРУГЛ()» (рис. 2.4).
16
Рис. 2.3. Импорт данных в среде MATLAB с помощью пункта «Generation Script» во вкладке «Import Selection»
Рис. 2.4. Округление значений в таблице Excel
Далее для использования импортированных данных необходимо сохранить (Save as) полученный скрипт в папке MATLAB, после чего вызвать из командной строки сохраненный файл командой «datascript».
Для того чтобы классифицировать помещения по потребности в отоплении, необходимо определить, сколько имеется независимых видов нагрева зданий. Для этого используем функции «length()» (возвращает размер или длину) и «unique()» (проводит сравнение) и «length(unique(_)» (возвращает количество уникальных элементов в массиве). Получаем 38 независимых классов. В таком случае задача классификации сводится к распределению тех или иных зданий по 38 классам потребностей в отоплении:
17
••Y1=data.Y1_R;
••Y2=data.Y2_R;
••u=length(unique(Y1));
••disp([‘There are’, num2str(u),‘unique output categories’]);
Далее необходимо создать выборку и разбить ее на обучающую и тестовую путем использования функции «cvpartition()» с отложенным тестом «holdout». Затем в отдельные переменные извлекается то, что относится к обучающему подмножеству и к тестовому:
••c2=cvpartition(Y1, ‘holdout’);
••X=[data.X1, data.X2, data.X3, data.X4, data.X5, data.X6, data.X7, data.X8];
••Xtrain=X(training(c2,1),:);
••Xtest=X(test c2,1),:);
••Ytrain=Y1(training(c2,1),:);
••Ytest=Y1(test c2,1),:);
В данной работе применен метод fit (подгонка) с обучающей выборкой. Для прогноза же в метод predict (прогноз) следует подставить тестовую выборку. Используем эти методы для сравнения истинных значений с прогнозными, полученными в результате работы классификатора. Просуммируем все совпадения и полученное число назовем количеством неверных ответов. При вычитании из единицы доли неправильных ответов получим количество правильных. Затем переведем все соотношения в проценты:
••baymodel = fitcnb (Xtrain, Ytrain, ‘Distribution’, kernel’);
••Ypredict = predict (baymodel, Xtest)
••pernb_0 = 100* (1- (sum (Ytest~=Y predict) /length (Ytest)));
••pernb_1 = 100* (sum(abs (Ytest - Ypredict) <=1)) /length (Ytest);
••disp([‘Naive Bayes % within 1 unit – ’, num2str(pernb_1), ‘8’]);
Далее проиллюстрируем полученные совпадения. Визуализация поможет оценить качество работы классификатора.
Для построения дерева распределения используем новые переменные (1–6) и функции:
1) confusionmat() — возвращает совпадения между прогнозируемыми и известными величинами;
2) diag() — диагональ матрицы;
3) imagesc() — обрабатывает изображение;
4) figure() — построение графика;
5) disp() — выводит в командное окно текст;
6) num2str() — преобразует число в строку;
••[C, order] = confusionmat (Ytest, Ypredict);
••C_perc = diag(sum(C, 2))\C;
••figure;
••imagesc (C_perc);
••colorbar;
••xlabel (‘Outputs’);
••ylabel (‘Outputs’);
••title ({How many responses were correctly predicted within
1 [num2str(pornb_1), ‘%’]});
18
В ходе работы получено 47,0588 % правильных ответов в пределах плюс-минус одного класса. На рис. 2.5 приведена матрица несоответствия. Если классификатор хороший, то на главной диагонали должны быть единицы, что означает, что классы по оси ординат (известные отклики, которые хотели повторить) и по оси абсцисс (предикторы) совпадают.
Регрессионные деревья. Повторим все процедуры, приведенные выше, проиллюстрируем полученные совпадения и оценим качество работы классификатора (рис. 2.6):
Рис. 2.5. Доля правильно предсказанных ответов
Рис. 2.6. Количество правильно предсказанных ответов
19
••model = TreeBagger (20, Xtrain, Ytrain, ‘Method’, ‘Classification’);
••view (model. Trees{1}, ‘mode’, ‘graph’) (% классифи-
кация относительно 1 столбца);
••Ypredict2 = str2double ((predict (model, Xtest)));
••pernt_0 = 100* (1- (sum (Ytest~=Ypredict2)/length (Ytest)));
••pernt_1 = 100* (sum (abs (Ytest - Ypredict2) <=1)) /length (Ytest);
••disp([‘Tree Bagger % within 1 unit – ’, num2str(pernt_1), ‘%’]);
Для построения дерева распределения (рис. 2.7) используем новые переменные и функции, рассмотренные выше.
Рис. 2.7. Дерево распределения
Нейронные сети. Выполняем предварительную подготовку для будущей оценки качества работы нейросети. Создаем матрицу «количество классов × количество переменных» (данная матрица будет служить для подстановки в качестве ответа):
••u = unique (Y1);
••Ytrain2 = zeros(length(Ytrain), length (u));
••for i = 1: length (u)
••a = Ytrain == u(i);
••Ytrain2 (:, i) = double (a);
••end
Затем обучаем нейросеть: «patternnet(10)» — используем 10 нейронов (оптимальное количество) и обучаем ее с помощью функции «train()»:
••net = patternnet (10);
••net = train(net, Xtrain’, Ytrain2’);
••Y3 = net (Xtest’)’;
••for i = 1: length (Y3);
••[~,m] = max(Y3(i, :));
••Ypredict3(i, :) = u(m);
20
