Программа реализации метода главных компонент "МГК"
Федеральное агентство по образованию РФ
Байкальский
Государственный Университет
Факультет экономической кибернетики
Кафедра
информатики и кибернетики
КУРСОВОЙ
ПРОЕКТ
программа
реализации метода гЛАвных
компонент «МГК»
Автор: Леонов Е.Р.
ИС-07-1
Руководитель:
Пешкова О.В.
Иркутск
2009
Оглавление
Введение…………………………………………………………
Постановка задачи…………………………………
Системный анализ…………………………………………………….4
Проект программы......….………………
Тестирование и испытание ПП…………………………...………….20
Заключение………………...……………………………
Список используемой литературы…………...……………………...31
Приложение………...……………………………………
Введение
Современные компьютерные технологии постепенно укрепляют свои позиции в процессе обработки статистических данных, что позволяет предприятиям и компаниям эффективнее использовать свои средства. Метод главных компонент дает возможность оценить влияние отдельных факторов на совокупность в целом. Что в свою очередь дает данные для прогнозирования и планирование издержек.
Программный продукт рассчитан в первую очередь на системных аналитиков и на людей, занимающихся статистическим анализом. Данный программный продукт должен существенно сэкономить время для выявления существенных факторов.
Постановка задачи
Целью данной курсовой работы является создание и документирование программы реализующей «Метод главных компонент» и выявляющая признаки, вносящие наибольший вклад в исходную совокупность. Метод предназначен для автоматизации процесса факториального анализа.
Во время реализации курсового проекта необходимо:
- Провести системный анализ, включающий
- Описание предметной области
- Описание методов и алгоритмов реализации
- Анализ и выбор средств разработки
- Разработать проект программы, содержащий
- Структуру и функции программы
- Схемы, описывающие взаимосвязи объектов
- Интерфейс программы
- Разработать программу
- Провести тестирование и отладку программы
- Составить комплекты эксплуатационной и технологической документации.
Системный анализ
О сущности
задач снижения размерности
В
исследовательских и
Желание
статистика представить каждое из наблюдений
в виде вектора некоторых
- Необходимость наглядного представления исходных данных;
- стремление к лаконизму исследуемых моделей, обусловленному необходимостью упрощения счета и интерпретации полученных статистических выводов;
- необходимость существенного сжатия объемов хранимой информации без видимых потерь в ее информативности.
Метод главных
компонент
Во
многих задачах обработки многомерных
наблюдений исследователя интересуют
лишь те признаки, которые обнаруживают
наибольшую изменчивость при переходе
от одного объекта к другому.
С
другой стороны совсем необязательно
для описания состояния объекта
использовать какие-то из исходных признаков.
Так, например, для определения специфики
фигуры человека при покупке одежды
достаточно назвать значения двух признаков
– рост-размер – являющихся производными
от измерения ряда параметров фигуры.
При этом, конечно, теряется какая-то доля
информации (портной замеряет до одиннадцати
параметров). Однако к удовлетворительно
классификации людей в зависимости от
специфики фигуры приводит система, использующая
три параметра, каждый из которых является
некоторой комбинацией от большего числа
признаков, замеренных на объекте параметров
Именно
эти принципиальные установки заложены
в сущность того линейного преобразования
исходной системы признаков, которое
приводит к главным компонентам.
Определение главных компонент
Главная
компонента - нормировано-центрированная
линейная комбинация показателей исследуемой
системы.
Первая
главная компонента - нормировано-центрированная
линейная комбинация показателей исследуемой
системы, которая среди прочих нормировано-центрированных
линейных комбинаций обладает наибольшей
дисперсией.
К-ая
главная компонента – такая нормировано-
Вычисление главных компонент
Из определения главных компонент следует, что дл вычисления первой главной компоненты необходимо решить оптимизационную задачу вида:
Где l1 - первая строка матрицы L (матрицы главных компонент).
Учитывая центрированность переменной Х и то что Е(ХХТ) = Σ получаем
D (l1 X) = E (l1 X)2 = E(l1XXT ) = l1 Σ
где Σ – ковариационная матрица исходных параметров.
Исходя из этого можем переписать задачу в виде
Вводя функцию Лагранжа и дифференцируя ее по компонентам вектора-столбца , имеем:
Что
дает систему уравнений для
(Σ
– λI)
=0 , где I- единичная матрица
Для того чтобы существовало ненулевое решение (в силу ограничения l1 =1), матрица (Σ – λI) должна быть вырожденной, то есть ее определитель должен быть равен нулю
|Σ – λI|=0
Этого добиваются подбором соответствующих значений λ. Уравнение такого вида называется характеристическим для матрицы Σ. Известно, что для матрицы ковариаций Σ, построенной для центрированных и нормированных исходных параметров, в силу своей симметричности и неотрицательнности, характеристическое уравнение имеет столько вещественных неотрицательных корней, сколько было исходных признаков (m), причем сумма корней в точности равна количеству исходных признаков.
и
Полученные характеристические числа показывают величину дисперсии каждой из компонент. Выбирая наибольшее, мы получаем Первую главную компоненту и так далее.
Полагая λ1 наибольшей дисперсией из всей совокупности, подставляем значение в однородную систему уравнений (Σ – λI) =0 и решая ее, определяем компоненты вектора l1.
Таким
образом первая главная компонента
получается как линейная комбинация
z(1) (X) = l1Х
, где l1 – собственный вектор
матрицы Σ, соответствующий наибольшему
собственному числу этой матрицы.
Далее
аналогично можно показать что
z(k) (X) = lkХ
, где lk – собственный вектор
матрицы Σ, соответствующий k-му по величине
собственному числу.
Матрица нагрузок
Матрица
нагрузок А , главных компонент на
исходные признаки также является важной
характеристикой главных
Матрица нагрузок определяется соотношением
где
Свойства матрицы нагрузки
Сумма
квадратов элементов j-ого столбца
равна дисперсии j-ой главной компоненты.
Сумма
квадратов элементов любой
Приведенные
свойства используются при содержательной
интерпретации главных компонент.
Свойство
наименьшей ошибки “автопрогноза” и
наилучшей
Можно
показать, что с помощью первых
m' главных компонент исходных признаков
достигается наилучший прогноз этих
признаков среди всех прогнозов, которые
можно построить с помощью m линейных комбинаций
набора из m' произвольных признаков.
Пусть требуется заменить исходный исследуемый m-мерный вектор Х на вектор Z меньшей размерности m', теряя при этом не слишком много информации. Информативность нового вектора определим таким образом, чтобы она зависела от того, в какой степени m' введенных вспомогательных переменных дают возможность «реконструировать» m исходных признаков с помощью подходящих линейных комбинаций. Ошибка прогноза X по Z (обозначим через σ) будет определятся так называемой остаточной дисперсионной матрицей вектора Х при вычитании из него наилучшего прогноза по Z, т.е. матрицей Δ= (Δij), где
Здесь
- наилучший, в смысле метода наименьших
квадратов, прогноза x(i) по компонентам.
Ошибка σ прогноза X по Z задается как функция
от элементов матрицы Δ, f(Δ) определяет
некоторый критерий качества предсказания.
Здесь tr(Δ) и || Δ|| - соответственно след и евклидова норма матрица Δ. Доказано что f(Δ) достигает минимума (в обоих представлениях одновременно) тогда и только тогда, когда в качестве компонент выбраны первые m' главных компонент.
Описание методов и алгоритмов
Для выявления признаков, в большей мере влияющих на исходную совокупность, требуется:
- построить матрицу ковариаций
- найти собственные числа матрицы ковариации. Коэффициенты характеристического полинома находятся разложением матрицы. Корни полинома отделяются, затем уточняются по методу Ньютона.
- полученные характеристические числа упорядочим по возрастанию (они являются дисперсиями главных компонент). Подставляя характеристические числа уравнение
A - λiΕ = 0 , где 0- нулевой вектор.
Получаем систему линейных однородных уравнений с определителем равным нули и ненулевым минором меньшего порядка. Разрешая систему находим собственный вектор
- переходим к новым переменным (главным компонентам).
, – новые переменные, «главные компоненты».
- строим матрицу нагрузок главных компонент на исходную совокупность.
Выбор и обоснование средств реализации программы «Метод главных компонент»
Разрабатываемая
программа под рабочим
Выбор
конкретного языка
- скорость выполнения программы,
- возможности работы с текстовыми файлами,
- обработка исключительных ситуаций (для отслеживания ошибок выполнения программы, предупреждений о них и последующего исправления, если это возможно),
- управление памятью (для контроля загрузки оперативной памяти ПК),
- инструментарий для создания пользовательского интерфейса.
Сравнительные таблицы выбранных языков программирования:
| Builder C++ | Delphi | Java | Visual Basic | |
| Скорость выполнения программы | Выполняется быстро | Выполняется быстро | Выполняется быстро | Работает медленнее |
| Инструментарий для создания пользовательского интерфейса | Стандартные средства | Стандартные средства, возможность создания окна произвольной формы | Стандартные средства | Стандартные средства, возможность создания сложных нестандартных окон и динамического изменения формы окна |
| Управление памятью | Управляется программистом | Управляется диспетчером памяти | Автоматическое освобождение ресурсов | Самостоятельно управляет памятью |
| Обработка исключительных ситуаций | Есть необходимые средства | Есть необходимые средства, но очень трудоемка работа с ними | Есть необходимые средства | Есть необходимые средства, возможность возврата в блок, в котором исправлялась ошибка |
| Работа с текстовыми файлами | Стандартные средства | Файл можно читать лишь с начала, нет произвольного доступа | Стандартные средства | Стандартные средства |
Для выполнения поставленных задач лучше всего подходят такие языки программирования, как Java и С++, но в силу экономии памяти и улучшения быстродействия был выбран C++ на платформе Builder из-за относительной простоты построения интерфейса.
Подробный анализ выбранных языков программирования:
C++ Builder:
| Скорость выполнения программы | Инструментарий для создания пользовательско-го интерфейса | Управление памятью | Обработка исключительных ситуаций | Работа с текстовыми файлами |
| Компилируемый язык. Программа выполняется быстро, но не может исполняться на другой платформе. Машина, на которой она выполняется, должна иметь похожую конфигурацию. Например, если программа использует dll, то эта библиотека должна быть установлена и на целевой машине. | Создание пользовательско-го интерфейса приложения заключается в добавлении в окно формы элементов объектов C++ Builder, называемых компонентами. Каждый компонент C++ Builder имеет три разновидности характеристик: свойства, события и методы. C++ Builder упрощает процесс создания программ для ОС Windows с графическим интерфейсом пользователя. При этом С++ автоматически создает исходный текст для пользовательского интерфейса: создает новые классы, объекты, вводит нужные переменные и функции. | В языке C++ существуют
средства выделения и освобождения
памяти. Проблема состоит в том, что
программист сам отвечает за своевременное
освобождение блоков памяти после того,
как в них отпадает необходимость
- для этого также есть специальные
функции. Если программист забудет освободить
блок, впоследствии может возникнуть нехватка.
Частое использование указателей памяти и необходимость управления распределением памяти для программиста часто приводит к ошибкам. |
При возникновении исключительной ситуации, которая не была перехвачена, присутствует вариант с завершением программы. Существуют инструкции для обнаружения, определения ошибки и ее обработки. | Возможность открывать, закрывать, дописывать в файл. Компоненты языка позволяют удалять, вставлять и добавлять строк, содержимое строк можно получит по номеру строки. Возможно присвоить некоторой строке текст для дальнейшей манипуляции содержимым текста как единой строкой и далее перенести исправленный текст опять в компоненты. |
Проект программы
Диаграмма
классов
| Базовый класс In | |
| Данные | |
| n : целое, static | Количество строк |
| m : целое, static | Количество столбцов |
| i : целое, private | Счетчик |
| j : целое, private | Счетчик |
| x[n][m] : дробное, static | Матрица исходных признаков |
| Функции | |
| inp () : public | Функция ввода размеров и матрицу исходных данных |
| Производный класс pod | |
| Данные | |
| x[n][m] : дробное, static | Матрица исходных признаков |
| ss[m][m] | Матрица ковариаций |
| n : целое, static | Количество строк |
| m : целое, static | Количество столбцов |
| i : целое, private | Счетчик |
| j : целое, private | Счетчик |
| sr[m] : дробное, private | Вектор средних значений |
| sig [m] : дробное, private | Вектор средних квадратичных отклонений |
| d : дробное, private | Дисперсия исходных признаков |
| Функции | |
| rash() : public | Функция, центрирующая и нормирующая исходные признаки |
| covar() : public | Функция, строящая матрицу ковариаций |
| Производный класс harac | |
| Данные | |
| n : целое, static | Количество строк |
| m : целое, static | Количество столбцов |
| ss[m][m] : дробное, static | Матрица ковариаций |
| c[m+1] : дробное, static | Вектор коэффициентов характеристического уравнения |
| i : целое, private | Счетчик |
| j : целое, private | Счетчик |
| a[m][m] : дробное, private | Вспомогательная матрица-буфер |
| t[m][m] : дробное, private | Вспомогательная матрица-буфер |
| p[m] : целое, private | Вектор для вычисления перестановок |
| det : дробное, private | Определитель |
| Функции | |
| arac(): public | Функция для инициализации вспомогательных векторов и переменных |
| pril(): public | Функция, заполняющая матрицу-буфер |
| determ(): public | Функция для вычисления определителя по методу Гаусса |
| cut(int p, int u) : public | Функция для ”вырезания” указанной строки и столбца из матрицы |
| fact(int x) : public | Факториал числа х |
| xz (int tt, int i) | Функция для генерации перестановок |
| elements (): public | Функция для
вычисления коэффициентов |
| Производный класс urv | |
| Данные | |
| c[m+1] : дробное, static | Вектор коэффициентов характеристического уравнения |
| nx[m] : дробное, static | Вектор собственных чисел матрицы ковариации |
| i : целое, private | Счетчик |
| j : целое, private | Счетчик |
| fx0,fx1,xi : дробное, private | Вспомогательные
переменные для решения |
| max, zam: дробное, private | Вспомогательные переменные для сортировки |
| Функции | |
| find() : public | Функция поиска корней характеристического полинома |
| sortirovka() : public | Функция сортировки собственных чисел по возрастанию |
| Производный класс komp | |
| Данные | |
| nx[m] : дробное, static | Вектор собственных чисел матрицы ковариации |
| ss[m][m] : дробное, static | Матрица ковариаций |
| L[m][m] : дробное, static | Матрица перехода к новым переменным - компонентам |
| koo [m][m] : дробное, static | Матрица Главных компонент |
| nag[m][m] : дробное, static | Матрица нагрузок |
| may[m] : дробное, private | Собственный вектор |
| t[m][m] : дробное, private | Вспомогательная матрица-буфер |
| Функции | |
| perexod() : public | Построение матрицы перехода |
| komponent() : public | Вычисление Главных компонент |
| hard () : public | Построение матрицы нагрузок |
Диаграмма
взаимодействий
Диаграмма состояний
Диаграмма действий
Диаграмма
прецедентов
Формы входного документа
Формы выходного документа
Тестирования и испытание ПП
Введение
Программа «МГК» предназначена для реализации метода главных компонент и выявления признаков, оказывающих влияние на конкретные компоненты.
Для работы с программой пользователю необходимы базовые навыки работы с ПК.
Пользователями
являются системные аналитики, которых
интересует влияние, оказываемое факторами
на исходную совокупность. А так же ученые,
проводящие статистический анализ данных.
Исходные
данные для проведения
тестирования
Методы
тестирования программ
Для
тестирования ПП «МГК» будет использоваться
метод тестирования белого ящика, т.е.
во время теста будет доступен исходный
код программы.
Эталонные
значения и распределения
исходных и результирующих
данных
Эталонные
значения – такие значения исходных
и выходных данных, которые считаются
правильными и рассчитываются до выполнения
тестов на калькуляторе, в уме, либо с использованием
других инструментальных средств, схожих
по функциям с тестируемой программой.