МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САМАРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА» (САМАРСКИЙ УНИВЕРСИТЕТ) А.В. ГАЙДЕЛЬ, А.Г. ХРАМОВ ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО КУРСУ «ИНТЕЛЛЕКТУАЛЬНЫЙ АНАЛИЗ ДАННЫХ» Рекомендовано редакционно-издательским советом федерального государственного автономного образовательного учреждения высшего образования «Самарский национальный исследовательский университет имени академика С.П. Королева» в качестве практикума для обучающихся по основной образовательной программе высшего образования по направлению подготовки 01.04.02 Прикладная математика и информатика САМАРА Издательство Самарского университета 2019 УДК 004.65(075) ББК 32.973.2я7 Г14 Рецензенты: д-р техн. наук., проф. С. В. С м и р н о в, д-р техн. наук., проф. В. А. Ф у р с о в Гайдель, Андрей Викторович Г14 Лабораторный практикум по курсу «Интеллектуальный анализ данных»: практикум / А.В. Гайдель, А.Г. Храмов. – Самара: Изд-во Самарского университета, 2019. – 104 с. ISBN 978-5-7883-1415-0 Содержит учебно-методические материалы для выполнения лабораторных работ по курсу «Интеллектуальный анализ данных». Всего представлено 4 лабораторных работы, затрагивающих основные методы анализа данных. Для каждой лабораторной работы приведены необходимые теоретические сведения, примеры реализации требуемых подходов к анализу данных на языке R, а также по 30 вариантов задания, отличающихся анализируемыми наборами данных. Предназначен для подготовки магистров по направлению подготовки 01.04.02 Прикладная математика и информатика в рамках образовательных программ «Математическое моделирование и вычислительные технологии» и «Интеллектуальный анализ изображений». Подготовлен на кафедре технической кибернетики. УДК 004.65(075) ББК 32.973.2я7 ISBN 978-5-7883-1415-0 2 © Самарский университет, 2019 Оглавление Введение............................................................................................................ 4 1 Корреляционный анализ ............................................................................... 7 1.1 Язык R.................................................................................................... 7 1.2 Коэффициент корреляции .................................................................. 11 1.3 Гипотеза о некоррелированности ...................................................... 13 1.4 Доверительный интервал для коэффициента корреляции .............. 14 1.5 Ранговая корреляция .......................................................................... 15 1.6 Ввод данных из файла в языке R ....................................................... 18 1.7 Моделирование двумерного гауссовского распределения ............. 23 1.8 Визуализация двумерных данных в языке R .................................... 26 1.9 Задание на лабораторную работу № 1 .............................................. 28 1.10 Пример реализации корреляционного анализа .............................. 36 2 Регрессионный анализ ................................................................................ 37 2.1 Регрессионная модель ........................................................................ 37 2.2 Реализация регрессионного анализа в языке R ................................ 40 2.3 Задание на лабораторную работу № 2 .............................................. 43 2.4 Пример реализации регрессионного анализа ................................... 49 3 Кластерный анализ ...................................................................................... 51 3.1 Постановка задачи кластеризации .................................................... 51 3.2 Алгоритм k внутригрупповых средних ............................................ 53 3.3 Автоматический выбор начальных центров кластеров ................... 55 3.4 Реализация алгоритма k средних в языке R ..................................... 56 3.5 Иерархическая кластеризация ........................................................... 58 3.6 Задание на лабораторную работу № 3 .............................................. 61 3.7 Пример реализации кластерного анализа ......................................... 71 4 Классификация ............................................................................................ 73 4.1 Постановка задачи классификации ................................................... 73 4.2 Байесовская классификация .............................................................. 74 4.3 Классификация по ближайшим соседям .......................................... 77 4.4 Вероятность ошибки при классификации по ближайшему соседу ................................................................................................... 79 4.5 Реализация метода k ближайших соседей в языке R ....................... 80 4.6 Визуализация трёхмерных данных в языке R .................................. 82 4.7 Задание на лабораторную работу № 4 .............................................. 83 4.8 Пример классификации по ближайшему соседу ............................. 96 Заключение ..................................................................................................... 99 Список литературы ...................................................................................... 100 3 Введение Интеллектуальный анализ данных (англ. Data Mining) – это раздел информатики, изучающий процессы обработки данных с целью получения полезной информации и принятия решений. Основная польза разрабатываемых методов анализа данных заключается в некоторой предсказательной способности: проанализировав некоторый набор данных, информационная система анализа данных должна обучиться для дальнейшего распознавания или прогнозирования некоторых участков данных в ситуациях, когда часть данных утеряна или неизвестна. Кроме этого, системы анализа данных могут решать задачи редуцирования объёма данных с целью устранения избыточности, визуализации данных для их удобного восприятия человеком, моделирования новых данных по имеющимся данным и др. Впервые понятие Data Mining появилось в 1989 году. Изначально оно было связано с автоматизацией и оптимизацией запросов к крупным базам данных. Между тем понятие анализ данных (англ. Data Analysis) существовало намного раньше и означало обработку и интерпретацию данных, полученных в ходе экспериментов, в основном научных. С развитием науки и техники эти понятия расширялись и обобщались, стали очень близки друг к другу, и в настоящий момент тесно связаны как с анализом больших объёмов данных (англ. Big Data), так и с понятием машинного обучения (англ. Machine Learning). Интеллектуальный анализ данных – это во многом прикладная теория, число приложений которой к реальным промышленным задачам растёт с каждым годом. В настоящее время методы и средства интеллектуального анализа данных используются при вебразработке, в биоинформатике, в системах компьютерного зрения, в разработке компьютерных игр, в маркетинге, в медицинской диагностике, в методах оптимизации, при разработке поисковых систем, при распознавании образов, изображений, речи и сигналов и т.д. Востребованность специалистов по интеллектуальному анализу данных постоянно возрастает, как и доля финансирования разработок в этой области. Появляется всё больше программных решений для анализа данных, в том числе с открытым исходным кодом. Всё 4 это свидетельствует о необходимости включения курса интеллектуального анализа данных в учебные программы по большинству технических специальностей, связанных с информатикой. Однако изучение методов интеллектуального анализа данных невозможно без их практического применения, ведь именно приложения этой теории делают её настолько значимой и популярной. Вот почему важно самостоятельно реализовывать эти методы и исследовать их работу в рамках лабораторных занятий. В данном издании предлагается несколько заданий для лабораторных работ, включающих только базовые подходы к анализу данных. Предполагается, что выполняя эти лабораторные работы, читатель заинтересуется этой областью знаний и, возможно, продолжит исследования самостоятельно. Текст издания разбит на главы, каждая из которых соответствует одной лабораторной работе. Перед каждой лабораторной работой приведены некоторые сопутствующие теоретические сведения, а также примеры реализации. В каждой работе требуется программно реализовать какой-либо метод анализа данных и проверить его работу на заданных наборах данных. Нет требования, определяющего конкретный язык программирования или математический пакет, который необходимо использовать при реализации, но большая часть примеров приведена на языке R. В конце каждой главы приведены контрольные вопросы, знание ответов на которые позволит успешно выполнить и сдать лабораторную работу. При приёме лабораторной работы преподаватель проверяет: 1) наличие исходного кода программы, реализующего требуемый метод анализа данных; 2) правильность работы программы для заданных наборов данных; 3) понимание студентом сути проведённых исследований и правильность сделанных выводов; 4) знание студентом ответов на контрольные вопросы; 5) наличие отчёта о проделанной работе, оформленного в соответствии с требованиями к учебным текстовым документам. Отчёт о выполнении лабораторной работы должен содержать все необходимые для таких отчётов разделы, описанные в требованиях к учебным текстовым документам, а также описание методов, исполь- 5 зуемых в работе и полученных результатов. Более подробно: отчёт должен содержать следующие элементы. 1. Титульный лист с указанием места и времени выполнения работы, названия и автора работы, а также преподавателя, проверяющего работу. 2. Задание на лабораторную работу. 3. Реферат с указанием числа страниц, рисунков, таблиц и приложений, а также со списком ключевых слов и с аннотацией. 4. Содержание работы, включающее список разделов и номера страниц, на которых эти разделы расположены. 5. Введение, содержащее краткую оценку значимости и актуальности исследуемого метода. 6. Краткое описание теоретической части работы, включающее некоторые формулы и утверждения, лежащие в основе исследуемого метода. 7. Описание исходных данных для работы, их природы и происхождения. 8. Полученные результаты, включая их графическое представление в форме таблиц, диаграмм и рисунков. 9. Заключение, включающее выводы, сделанные по результатам работы. 10. Приложение А, включающее набор данных, подвергающихся исследованию описанным методом. 11. Приложение Б, включающее исходные коды разработанных программ. 6 1 Корреляционный анализ 1.1 Язык R R – это интерпретируемый язык программирования, предназначенный для статистической обработки данных. Его свободная реализация для большинства операционных систем доступна под лицензией GNU GPL. Язык R содержит множество разнообразных встроенных статистических методов, а также широкий набор расширяющих язык пакетов. R представляет собой скриптовый язык. Программа на языке R состоит из набора операторов, каждый из которых обычно располагается на отдельной строке. При запуске программы интерпретатор исполняет эти операторы один за другим в том порядке, в котором они записаны. Допускается записывать несколько операторов на одной строке. При этом их следует разделять символом «;». Листинг 1. Программа «Hello, World!» на R >print(noquote("Hello, World!")) Hello, World! В листинге 1 приведён пример исходного кода программы, выводящей на экран строку «Hello, World!», на языке R. Как видно, программа состоит из единственного оператора, вызывающего функцию print, в которую передаётся строка «Hello, World!». Вызов функции noquote необходим, чтобы строка выводилась без кавычек. При исполнении программы в консоли интерпретатора результат выполнения каждого оператора выводится сразу после исполнения этого оператора. Чтобы показать это в листинге, перед самим оператором поставлен символ «>», а перед ответом интерпретатора этого символа нет. На самом деле, этот символ не является частью программы на языке R, и его не следует записывать самостоятельно при написании программ. Выражения на языке R записываются в обычной инфиксной нотации, причём большинство операций записываются так же, как и в большинстве C-подобных языков. В листинге 2 приводится пример простейшего арифметического выражения. Все численные литералы, такие как «2», имеют тип double, то есть являются числами с плавающей запятой двойной точности, занимающими 8 байт памяти. 7 Листинг 2. Выражения в языке R >2 + 2 * 2 6 Листинг 3. Переменные и присваивание в языке R >a <- 2 >b = 2 >a + b 4 В языке R можно заводить переменные, имена которых должны быть корректными идентификаторами. Переменная считается объявленной в момент первого использования. Переменным можно присваивать значения с помощью операторов присваивания «<-» или «=». Эти операторы эквивалентны. В листинге 3 приведён пример использования переменных в языке R. Листинг 4. Комментарии в языке R >sum(1, 2, 3, 4, 5) # Сумма элементов 15 Комментарии в языке R, как и в большинстве скриптовых языков, начинаются с символа «#» и продолжаются до конца строки. Интерпретатор игнорирует комментарии при исполнении программы. В листинге 4 приведён пример использования комментариев для комментирования отдельной строки. Разумеется, можно также начинать комментарии с самого начала строки. Листинг 5. Векторы в языке R >a <- c(1, 2, 3, 4, 5) >sum(a) 15 >print(a[1]) 1 Язык R поддерживает работу с векторами и матрицами. Для создания вектора из заданных элементов используется функция с, принимающая элементы вектора. Доступ к элементам осуществляется через запись номера элемента вектора в квадратных скобках. Элементы нумеруются от единицы, как это принято в математике. В листинге 5 приведён пример работы с вектором в языке R. Нужно отметить, что настоящее издание не ставит целью изучение языка R и не позиционируется как пособие по изучению этого 8 языка. Нет требования к выполнению лабораторных работ только на языке R, но все примеры использования методов анализа данных для определённости приведены именно на этом языке. Предполагается, что даже если читатель планирует выполнять предложенные задания на языке R, большую часть информации о синтаксисе и о стандартной библиотеке этого языка ему придётся почерпнуть самостоятельно из внешних источников. Информацию о языке R и реализацию интерпретатора этого языка под различные операционные системы можно скачать с официального сайта https://www.r-project.org/. Там можно найти много вариантов руководства пользователя на английском языке для самостоятельного изучения возможностей языка R. Для удобства программирования на языке R можно использовать одну из сред разработки, поддерживающих такие расширенные возможности, как автоматическое дополнение. Например, имеется свободно распространяемая кроссплатформенная среда разработки RStudio, которую можно скачать с официального сайта https://www.rstudio.com/. На YouTube можно найти сборник лекций о языке R на английском языке: https://www.youtube.com/playlist?list=PLvhG5FRoq78otMp0WbWuJsFOarEAchMek Материалов на русском языке значительно меньше. Некоторую русскоязычную литературу по языку R можно найти в списке литературы в конце настоящего издания. Существует незаконченный на данный момент викиучебник по языку R. Многие русскоязычные публикации по анализу данных содержат примеры кода на языке R или ссылки на исходные коды программ в открытых репозиториях, таких как GitHub. При работе с командной строкой интерпретатора языка R можно использовать некоторые возможности получения справки непосредственно в процессе работы. Так функция help открывает страницу справки по заданному аргументу, функция example выводит некоторые примеры использования своего аргумента, а двойной знак вопроса перед некоторым идентификатором позволяет выполнять поиск этого идентификатора в тексте справочной системы языка R. Также можно выяснить названия большинства переменных и других хранимых объектов с помощью функции objects. Для любой переменной, литерала или выражения можно выяснить их тип данных с помощью функции typeof. Примеры использования этих функций приведены в листинге 6. 9 Листинг 6. Встроенное описание функций >help(sum) # Открыть страницу справки по функции >example(sum) # Показать примеры использования функции >??sum # Искать подстроку в тексте справочной системы >objects() # Показать все хранимые объекты >typeof(0) # Вывести тип данных литерала 0 "double" >typeof("0") # Вывести тип данных литерала "0" "character" Напоследок в листинге 7 приведено решение задачи «A+B» на языке R. В этой задаче пользователь вводит два целых числа через пробел, а программа должна считать эти числа и вывести на экран их сумму. Чтение из консоли выполняется с помощью функции readline. Функция strsplit делит строку по пробелу на список из подстрок, разделённых в исходной строке пробелом. Функция lapply используется, чтобы преобразовать каждую из строк в полученном списке в целое число путём применения функции as.integer. В результате получается список, состоящий из вектора, в свою очередь содержащего целые числа. Чтобы получить обычный одномерный список из целых чисел, используется функция unlist. Окончательно функция sum выполняет суммирование. Листинг 7. Решение задачи «A+B» на языке R >sum(unlist(lapply(strsplit(readline(), " "), >as.integer))) 2 3 5 Как видно, программа, описанная в листинге 7, выполняет не просто суммирование двух целых чисел, записанных через пробел, но и суммирование любого количества разделённых пробелом целых чисел. Также можно заметить, что эта программа в некотором роде удовлетворяет парадигме Map-Reduce. Тем не менее, нужно понимать, что чтение из консоли крайне нетипично для программ на языке R. Как правило, эти программы выполняют чтение из некоторого файла с данными, выполняют анализ этих данных, и выводят результаты обработки на экран в текстовом и в графическом виде. 10 1.2 Коэффициент корреляции Корреляция RXY между вещественными случайными величинами X и Y определяется как RXY M X M X Y M Y , (1) где оператор M означает математическое ожидание (англ. expected value) случайной величины. Корреляция характеризует уровень взаимосвязи между случайными величинами X и Y, то есть, чем сильнее корреляция отличается от нуля, тем больше при изменении одной из величин меняется другая. С учётом свойства линейности математического ожидания легко убедиться, что формула (1) может быть переписана в виде R XY M XY M X M Y . Свойства корреляции 1. Корреляция между вещественными случайными величинами коммутативна: X , Y : R XY RYX . 2. Корреляция между независимыми случайными величинами равна нулю. 3. Корреляция между случайными величинами не превосходит по модулю среднего геометрического дисперсий этих случайных величин: X , Y : RXY D X D Y . Последнее свойство приводит к идее нормировки корреляции на среднее геометрическое дисперсий, чтобы полученная характеристика не зависела от масштабов самих случайных величин. Нормированная таким образом корреляция называется коэффициентом корреляции Пирсона: M XY M X M Y RXY . (2) rXY 2 2 2 2 D X DY M X M X M Y M Y Свойства коэффициента корреляции 1. Коэффициент корреляции между вещественными случайными величинами коммутативен: X , Y : rXY rYX . 11 2. Коэффициент корреляции между независимыми случайными величинами равен нулю. 3. Коэффициент корреляции по модулю не превосходит единицы: X , Y : rXY 1 . Пусть имеется выборка xi i 1 из n значений независимых копий n некоторой случайной величины X. Известно, что состоятельной, несмещённой и эффективной статистической оценкой математического ожидания случайной величины X является выборочное среднее 1 n (3) x xi . n i 1 Таким образом, состоятельной оценкой коэффициента корреляции (2) является r где x xy x y , sx s y (4) 1 n 1 n 1 n 1 n 2 1 n 2 2 2 , , , , x y y xy x y x x y i i ii i yi , n i 1 n i 1 n i 1 n i 1 n i 1 sx x 2 x , s y y 2 y . 2 2 Чем ближе оценка (4) к нулю, тем меньше связаны признаки x и y. С другой стороны, если эта оценка по модулю близка к единице, то это означает сильную взаимосвязь между признаками. Например, они могут вообще линейно зависеть друг от друга. В этом случае, как правило, нет смысла использовать для анализа оба признака, а достаточно оставить только один из них. Такие соображения позволяют редуцировать данные, уменьшить объём выборки, устранить избыточность информации, которая может негативно влиять на качество многих других методов анализа. Кроме того, иногда наличие взаимосвязи между некоторыми признаками может быть интересно само по себе. На рис. 1 схематично приведены примеры вероятностных распределений точек на плоскости с заданными коэффициентами корреляции Пирсона. Видно, что единичный коэффициент корреляции означает линейную зависимость признаков. Также можно заметить, как знак коэффициента корреляции характеризует сторону, в которую наклонено облако точек. 12 а) r = –1 б) r = –0,5 в) r = 0 г) r = 0,5 д) r = 1 Рис. 1. Примеры вероятностных стных распределений точек на плоскости с заданным коэффициентом корреляции Пирсона При положительной корреляции между ду признаками, чем больше значение одного признака, тем обычно больше значение другого признака. При отрицательной всё наоборот: рот: чем больше значение одного признака, тем меньше обычно значение чение другого признака. В языке R для вычисления выборочного среднего (3) ( используется функция mean, а для оценки коэффициента корреляции (4) – функция cor.. Конкретные примеры использования этих функций можно найти в следующих разделах. 1.3 Гипотеза о некоррелированности Для проверки статистической гипотезы о некоррелированности признаков x и y используется статистика n2 , (5) tr 1 r2 которая имеет t-распределение Стьюдента с количеством степеней свободы n 2 . Здесь r – это оценка коэффициента корреляции Пирсона (4) между признаками x и y, а n – объём выборки. Пусть t np обозначает квантиль на уровне p t-распределения распределения Стьюдента с n степенями свободы. Вероятность того, что статистика (5) будет отличаться от нуля больше, чем на величину t n12 / 2 , при условии, что в действительности признаки x и y являются независинезавис мыми, составляет . Это значит, что можно считать признаки x и y зависимыми на уровне значимости , если выполняется неранер венство n2 r 2 1 /2 2 t1n 2 1 . (6) 13 Чем с меньшим уровнем значимости отвергается гипотеза о некоррелированности, тем меньше вероятность того, что это сделано ошибочно. Таким образом, уровень значимости статистической гипотезы – это вероятность отвергнуть эту гипотезу, при условии, что на самом деле она верна. Если решить неравенство (6) относительно , то можно найти граничный уровень значимости p, для которого гипотеза о некоррелированности всё ещё отвергается, при том, что при чуть меньшем уровне значимости она уже была бы принята: r n2 p 2 2 Ft n 2 , 1 r2 где Ft n 2 – это функция распределения t-распределения Стьюдента с n 2 степенями свободы. Это значение в западной литературе носит название p-value. В языке R для проверки гипотезы о некоррелированности используется функция cor.test из пакета stats, который подключен по умолчанию. Она принимает две последовательности числовых признаков xi i 1 и yi i 1 и выводит обширную статистику, касающуюся n n корреляционной взаимосвязи между ними. Примеры использования этих функций можно найти ниже в следующих разделах. 1.4 Доверительный интервал для коэффициента корреляции Для заданной случайной величины X доверительным интервалом (англ. confidence interval) называется интервал a, b , для которого вероятность того, что случайная величина X примет значение из интервала a, b , равна наперёд заданной доверительной вероятности p. Обычно речь идёт об интервале, серединой которого является математическое ожидание случайной величины X, то есть ab MX . 2 Важной задачей является по заданной статистической выборке значений независимых копий случайной величины xi i 1 n и заданной доверительной вероятности p определить доверительный интервал 14 a, b . Этот интервал может дать представление о значениях, которые может принимать случайная величина. Для коэффициента корреляции Пирсона доверительный интервал строится с использованием z-преобразования Фишера (англ. Fisher transformation) 1 1 r e2 z 1 z ln arcth r , r 2 z th r , 2 1 r e 1 где r – это оценка коэффициента корреляции Пирсона (4). Статистика Фишера u n 3 arcth r arcth rXY распределена по стандартному нормальному закону с нулевым математическим ожиданием и единичной дисперсией асимптотически при n . Здесь rXY – это истинное значение коэффициента корреляции Пирсона (2). Отсюда можно выразить доверительный интервал для коэффициента корреляции u p 1 /2 u p 1 / 2 P th arcth r rXY th arcth r p , n 3 n 3 где p – доверительная вероятность, u(p+1)/2 – квантиль стандартного нормального распределения на уровне (p+1)/2. 1.5 Ранговая корреляция Часто при анализе данных важны не сами значения признаков некоторых объектов, а то, как эти объекты упорядочены по этим признакам. Например, так может быть в случае, когда признаками и являются некоторые натуральные порядковые номера или другие целые числа, абсолютные значения которых несут только информацию о порядке объектов. В этом случае целесообразно вычислять корреляцию не между самими признаками, а между порядковыми номерами объектов, упорядоченных по этим признакам. Пусть имеется выборка из n объектов, каждый из которых характеризуется парой признаков xi и yi. Кроме того, известны перестановки px(k) и py(k), которые упорядочивают объекты по неубыванию соответственно первого и второго признаков. Под перестановками здесь понимаются функции 15 px k , p y k : 1; n Z 1; n Z такие, что i, j 1; n Z : i j px i px j x px i x px j , i, j 1; n Z : i j p y i p y j y p y i y py j , то есть для различных аргументов эти функции принимают различные значения и, будучи использованными в качестве номеров объектов, упорядочивают эти объекты в порядке неубывания соответствующих признаков. Перестановки px(k) и py(k) называются рангами факторов x и y. Под Z здесь понимается множество целых чисел. Ранги можно использовать в качестве признаков объектов при оценивании коэффициента корреляции Пирсона (4). В этом случае получается значение уровня взаимосвязи признаков, называемое коэффициентом ранговой корреляции Спирмена (англ. Spearman's rank correlation coefficient). При подстановке рангов вместо признаков в формулу (4) получается 1 n 6 n n2 1 p i p i i 1 x y 2 . Поскольку это тот же самый коэффициент корреляции Пирсона, для проверки гипотезы о некоррелированности признаков x и y, то есть гипотезы о том, что ρ = 0, используется та же статистика (5) в виде n2 , 1 2 которая имеет t-распределение Стьюдента с числом степеней свободы n 2 . Другой подход – считать количество пар объектов, стоящих в правильном порядке и в неправильном порядке при упорядочивании по определённому признаку. Очень популярной характеристикой взаимосвязи между признаками является коэффициент ранговой корреляции Кендалла (англ. Kendall rank correlation coefficient), который вычисляется по формуле t 16 2 P Q n n 1 , (7) где P – количество пар объектов (i, j), для которых xi ≤ xj и yi ≤ yj или xi > xj и yi > yj, а Q – это количество пар объектов (i, j), для которых xi ≤ xj и yi > yj или xi > xj и yi ≤ yj. То есть P – это количество пар объектов наблюдения, у которых признаки x и y упорядочены одинаково, а Q – это количество пар объектов наблюдения, у которых признаки x и y упорядочены по-разному. Формулу (7) можно переписать по-другому: n i 2 sgn px i px j sgn p y i p y j , n n 1 i 1 j 1 где 1, sgn x 0, 1, x 0; x 0; x 0. Для независимых признаков x и y коэффициент корреляции Кендалла (7) имеет асимптотически гауссовское распределение с нулевым математическим ожиданием и дисперсией D 2 2n 5 9n n 1 при n , то есть статистика u 9 n n 1 2 2n 5 при больших n имеет стандартное нормальное распределение с нулевым средним и единичной дисперсией. Этот факт может использоваться для процедуры проверки статистической гипотезы о некоррелированности признаков. Коэффициенты ρ и τ изменяются от –1 до +1. Если коэффициент корреляции равен +1, то это означает, что ранги px(k) и py(k) одинаковы; если он равен –1, то противоположны (px(k) и py(k) обратны друг другу). Равенство коэффициента корреляции нулю означает, что px(k) и py(k) линейно независимы (их корреляция равна нулю). На рис. 2 приведён пример множества точек (x, y), для которых координата x распределена равномерно на отрезке [–1; +1], а y = x3. Очевидно, x и y сильно зависимые случайные величины: по значе17 нию одной из них можно в точности определить значение другой. Тем не менее, коэффициент корреляции Пирсона между ними сос ставляет 0,89, что довольно много, но всё же меньше единицы, поп скольку характер зависимости нелинейный. Рис. 2. Пример множества точек, ранговая корреляция которых равна единице С другой стороны, коэффициенты ранговой корреляции Спирмена и Кендалла для этого множества точек равны единице, как и для любой монотонной зависимости. 1.6 Ввод данных из файла в языке R В большинстве случаев данныее для анализа содержатся в неконек тором файле. Даже если это не так, обычно можно записать эти данда ные в файл средствами, не связанными непосредственно с технолотехнол гиями анализа данных. Сами данные часто представляют собой опиоп сание n объектов наблюдения, каждый изз которых характеризуется заданным набором из m признаков. Таким образом, данные предпре ставляют собой некоторую матрицу A размером n×m m. Элемент этой матрицы Aij является значением j-го признака i-го го объекта наблюденаблюд ния. В этом случае данные хранятся в текстовом файле в виде таблитабл цы. Например, в файле может быть n строк по m чисел в каждой строке через пробел или какой-либо либо другой разделитель. разделитель Каждая строка в этом случае описывает признаки одного конкретного объоб екта наблюдения в некотором заданном порядке. Иногда Иног в первой строке располагается заголовок, в котором содержатся названия признаков в том порядке, в котором они представлены в следующих n строках. Нужно отметить, что в качестве разделителя целой и 18 дробной части вещественных чисел может использоваться как точка, так и запятая в зависимости от локализации файла. При таком формате хранения технически считывать данные из файла не представляет трудностей, какой бы язык программирования при этом не использовался. В языке R для считывания таблицы данных из файла используется функция read.table из пакета utils, принимающая имя файла. Сигнатура этой функции выглядит следующим образом. read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE) Эта функция считывает файл с таблицей данных и создаёт блок данных, в котором строкам соответствуют объекты наблюдения, а полям в каждой строке соответствуют признаки этих объектов. Обязательным аргументом является только имя файла, остальные аргументы имеют значения по умолчанию. Описание аргументов этой функции представлено ниже. file – имя файла, из которого требуется считать данные. Каждая строка матрицы данных должна быть отдельной строкой в файле. Имя файла может быть как абсолютным, так и относительным. В последнем случае имя считается относительно текущей директории, которую можно получить с помощью функции getwd и установить с помощью функции setwd. Также в качестве имени файла может выступать название стандартного потока (например, stdin) или URL. header – логическое значение, обозначающее, содержит ли файл имена признаков в первой строке. Если это значение не задано, то оно считается истинным, если в файле в первой строке на один признак меньше, чем во всех остальных. 19 sep – разделитель признаков в каждой строке. Если этот параметр не задан, тогда разделителем считается один или более пробелов или знаков табуляции. quote – набор символов, окружающих каждое значение признака. По умолчанию считается, что такие символы отсутствуют. dec – символ, разделяющий целую и дробную часть вещественных чисел. numerals – строка, обозначающая, как считывать числа, преобразование которых к числу с плавающей запятой двойной точности приведёт к потере точности. row.names – вектор из названий объектов наблюдения. Также это может быть единственное число или единственная строка – номер или название столбца, содержащего названия объектов наблюдения. Если в первой строке задан заголовок и в нём число признаков на один меньше, чем в других строках, то первый столбец считается столбцом имён объектов. Если явным образом задано row.names = NULL, то объекты будут занумерованы. col.names – вектор из названий признаков. По умолчанию используется строка «V» + номер столбца. as.is – значение, отвечающее за преобразование столбцов символов в факторы. По умолчанию такое преобразование происходит. Можно указать преобразование для каждого столбца, но нужно иметь в виду, что все столбцы нумеруются, включая столбец с именами объектов наблюдения и все пропускаемые столбцы. na.strings – вектор из строк, которые следует интерпретировать, как пропущенные значения признаков. Пустые поля также считаются пропусками для логических, целочисленных, вещественных и комплексных признаков. Проверка значения на пропуск происходит после того, как пробелы с каждого конца считанного значения уже обрезаны, так что пробелы не следует включать в значения этого аргумента. colClasses – вектор классов значений в каждом столбце. Возможные значения: «NA» используется по умолчанию, «NULL» используется, если столбец должен быть пропущен, иначе использу20 ется один из основных классов (logical, integer, numeric, complex, character, raw) либо «facor», «Date» или «POSIXct». Нужно отметить, что colClasses задаётся для каждого столбца, а не для каждого признака, так что учитывает и столбец с именами признаков, если такой присутствует. Чтобы не выполнять вообще никаких преобразований типов, можно указать colClasses = "character". nrows – максимальное количество строк для считывания. Отрицательные значения этого параметра игнорируются. skip – количество первых строк файла, которые нужно пропустить перед началом считывания данных. Полезный параметр, если в начале файла несколько строк занято под описание данных. check.names – логическое значение, определяющее, нужно ли проверять, что имена признаков являются корректными именами переменных и не повторяются. fill – логическое значение, определяющее, нужно ли создавать пустые поля, если число признаков в разных строках различно. strip.white – логическое значение, определяющее, нужно ли обрезать пробелы с концов считываемых значений. blank.lines.skip – логическое значение, определяющее, нужно ли игнорировать пустые строки в файле. Строка считается пустой, если содержит только пробелы и комментарии. comment.char – символ, с которого в файле начинаются комментарии, продолжающиеся до конца строки, либо пустая строка, если комментариев нет. allowEscapes – логическое значение, определяющее, нужно ли интерпретировать управляющие последовательности, начинающиеся с символа «\», или следует читать их в исходном виде. flush – логическое значение, определяющее, игнорировать ли продолжение строки, когда необходимое количество признаков уже считано. stringsAsFactors – логическое значение, определяющее, нужно ли преобразовывать строковые значения признаков в факто21 ры. Этот аргумент игнорируется, если заданы as.is или colClasses. fileEncoding – кодировка файла. encoding – кодировка полученных на выходе строк. text – используется вместо file, чтобы задать непосредственно текст, который нужно считать, прямо в коде скрипта на R. skipNul – логическое значение, определяющее, пропускать ли значения null. Функция возвращает считанный блок данных типа data.frame. В процессе работы при чтении больших файлов она может затрачивать значительные объёмы оперативной памяти. Есть способы оптимизировать работу этой функции по времени и по памяти разными путями, например, с помощью отключения чтения комментариев (comment.char = ""). Для чтения файлов с векторами и матрицами можно использовать функцию scan. Ещё один популярный формат файлов – CSV (англ. Comma-Separated Values), в котором значения признаков в строке разделяются запятыми. Для чтения файлов в таком формате используется функция read.csv, работающая аналогично функции read.table. Листинг 8. Первые пять строк файла 00-iris.txt 1 2 3 4 Sepal.Length Sepal.Width Petal.Length Petal.Width 5.1 3.5 1.4 0.2 4.9 3.0 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 Species setosa setosa setosa setosa Пусть имеется текстовый файл с данными о размерах лепестков и чашелистиков цветков ириса. Это известный пример набора данных, называемый ирисами Фишера (англ. iris flower data set). Первые пять строк этого файла представлены в листинге 8. Для чтения данных из этого файла используется код на R, представленный в листинге 9. Предполагается, что файл уже лежит в текущей директории, установленной с помощью функции setwd. Функция head выводит несколько первых строк блока данных. 22 Листинг 9. Чтение данных из файла в языке R >dat <- read.table("00-iris.txt") >head(dat) 1 2 3 4 5 6 Sepal.Length Sepal.Width Petal.Length Petal.Width Species 5.1 3.5 1.4 0.2 setosa 4.9 3.0 1.4 0.2 setosa 4.7 3.2 1.3 0.2 setosa 4.6 3.1 1.5 0.2 setosa 5.0 3.6 1.4 0.2 setosa 5.4 3.9 1.7 0.4 setosa После такого чтения в переменной dat содержится блок данных. Доступ к столбцу, то есть к значениям конкретного признака, можно получить по имени столбца через знак «$» (например, dat$Sepal.Length) или по номеру в квадратных скобках (например, dat[1]). Доступ к строке, то есть к признакам заданного объекта наблюдения, можно получить добавлением запятой после номера в квадратных скобках (например, dat[1,]). Доступ к конкретному значению признака конкретного объекта можно получить по номерам в квадратных скобах через запятую (например, dat[1, 1]). 1.7 Моделирование двумерного гауссовского распределения Гауссовское распределение, также называемое нормальным распределением, – это очень важное на практике непрерывное вероятностное распределение, определяемое своей плотностью вероятности f x 1 x a 2 2 2 , 2 где a – математическое ожидание, σ2 – дисперсия. Это распределение легко обобщается на многомерный случай. Случайный вектор X в m-мерном пространстве имеет m-мерное гауссовское распределение, если его плотность вероятности определяется как 1/ 2 n/ 2 T 1 f x 2 R exp x a R 1 x a , 2 где a – вектор математических ожиданий компонент, R – корреляционная матрица, такая что Rij – это корреляция между i-й и j-й компонентами вектора. Многие признаки объектов наблюдения распределены по такому закону, поэтому важно проверять работу методов 2 e 23 анализа данных на смоделированных в рамках гауссовского распределения данных. Для моделирования одномерных случайных величин, распределённых по гауссовскому закону, можно воспользоваться центральной предельной теоремой и сложить достаточное количество одинаково распределённых независимых случайных величин, распределённых равномерно. Другой подход состоит в использовании преобразования Бокса-Мюллера. Он более эффективен, поскольку для каждой пары сгенерированных равномерных случайных величин позволяет смоделировать пару случайных величин со стандартным нормальным распределением. Во многих математических пакетах моделирование одномерных гауссовских случайных величин уже реализовано, так что в настоящем издании подробно не рассматривается. Пусть имеется уже смоделированный m-мерный вектор X, состоящий из m независимых компонент, каждая из которых распределена по стандартному нормальному закону с нулевым математическим ожиданием и единичной дисперсией. Тогда для любой матрицы A R nm вектор Y = AX также распределён по многомерному гауссовскому закону с математическим ожиданием a M AX A M X 0 и корреляционной матрицей T T R M Y M Y Y M Y M YY T M AX AX T T T T T T M AXX A A M XX A AEA AA . Таким образом, если требуется смоделировать случайный вектор, распределённый по гауссовскому закону с математическим ожиданием a и корреляционной матрицей R по имеющемуся вектору X из независимых стандартных нормальных случайных величин, то можно просто использовать вектор Y = AX + a, где матрица A получается из разложения Холецкого матрицы R. Такое разложение возможно, поскольку матрица R положительно определена. В двумерном случае задача состоит в моделировании случайного вектора (Y1, Y2), имеющего гауссовское распределение с математическим ожиданием (a1, a2) и корреляционной матрицей R, также имеющей размер 2×2. Если уже имеется случайный вектор (X1, X2), состоящий из двух независимых стандартных нормальных случай24 ных величин, то можно получить искомый случайный вектор Y простым преобразованием: Y1 R11 X1 , Y2 R12 R11 X 1 R22 R122 X2 . R11 В языке R для моделирования многомерных случайных величин используется функция mvrnorm из пакета MASS, имеющая следующую сигнатуру. mvrnorm(n = 1, mu, Sigma, tol = 1e-6, empirical = FALSE, EISPACK = FALSE) Эта функция генерирует выборку из независимых случайных векторов, распределённых по гауссовскому закону с заданными характеристиками. Описание аргументов этой функции приведено ниже. n – объём выборки. mu – вектор математических ожиданий компонент каждого вектора из выборки. Sigma – положительно определённая симметричная корреляционная матрица. tol – относительное допустимое отклонение при численной проверки положительной определённости корреляционной матрицы (относительно самой большой дисперсии). empirical – логическое значение, определяющее, являются ли указанные математическое ожидание и корреляционная матрица эмпирическими, то есть определёнными по некоторой выборке. EISPACK – должен быть истиной, иначе функция не будет работать. Эта функция использует спектральное разложение вместо разложения Холецкого, поскольку оно обладает большей вычислительной устойчивостью. Возвращаемое значение – это матрица из n строк и m столбцов, где m – это размерность вектора mu. В листинге 10 приведён пример исходного кода на языке R, генерирующего 100 двумерных векторов, с независимыми компонентами, распределёнными по стандартному нормальному закону с нулевым средним и единичной дисперсией. Функция cbind составляет из векторов одинакового размера матрицу, столбцами которой являются эти векторы. Функция require подключает пакет MASS. 25 Листинг 10. Моделирование вание двумерных гауссовских случайных векторов в R >n <- 100 >a <- c(0, 0) >r <- cbind(c(1, 0), c(0, 1)) >require(MASS) >dat <- mvrnorm(n, a, r) >head(dat) [,1] [,2] [1,] -0.4065681 -0.07727633 [2,] -0.6088422 0.68341771 [3,] 1.3905942 1.18048634 [4,] 0.9880986 0.01271345 [5,] -1.4259751 1.40002595 [6,] -1.2612890 -0.29674239 На рис. 3 приведено изображение полученных х признаков на плоскости. плоск Рис. 3. Точки, полученные с помощью функции mvrnorm Видно, что точки, распределённые лённые нормально, концентрируются конце около своего математического ожидания. В данном примере коррекорр ляция между координатами отсутствует, так что, по сути, каждая координата генерируется независимо. 1.8 Визуализация двумерных данных в языке R В большинстве математических пакетов имеются встроенные функции для рисования графиков. Что касается обычных языков программирования, то имеется масса сторонних библиотек для этих целей. В языке R для визуализации двумерных данных используется 26 функция plot из пакета graphics.. Это довольно общая функция, предназначенная для визуализации объёктов R.. Сигнатура этой функции имеет следующий вид. plot(x, y, ...). Здесь x и y – это координаты визуализируемых точек по осям абсцисс и ординат соответственно. Кроме того, y может отсутствоотсутств вать, если x сам по себе представляет собой объект, содержащий точки на плоскости. Также в эту функцию можно передавать множество дополнидополн тельных параметров графического представления данных. НекотоНекот рые из них представлены ниже. type – тип графика, например, «p» – точки, «l» – линии, «h» – столбцы. main – название всего графика. sub – подзаголовок графика. xlab – название оси абсцисс. ylab – название оси ординат. asp – соотношение сторон. Рис. 4. Результат вызова функции plot(sin, -pi, pi, +pi) Эта функция допускает множество вариантов использования, за которыми лучше обратиться к руководству пользователя ователя или к припр мерам программ. Например, plot(sin, -pi, pi, +pi) рисует график функции sin на интервале , . График, получающийся в результате такого вызова изображён на рис. 4. Примеры использоваиспользов ния этой функции для визуализации и данных при корреляционном корреляцио анализе приведены ниже. 27 1.9 Задание на лабораторную работу № 1 Входные данные: n объектов, каждый из которых характеризуется двумя числовыми признаками: xi i 1 и yi i 1 . n n Требуется исследовать степень взаимосвязи между двумя признаками некоторых объектов. Для каждого набора данных необходимо выполнить следующие задания. 1. Визуализировать данные на плоскости в виде точек с координатами x , y n i i i 1 . 2. Статистически оценить коэффициент корреляции Пирсона между признаками x и y. 3. Проверить статистическую гипотезу о некоррелированности признаков x и y на уровне значимости 0,05. Все описанные выше задания требуется выполнить для двух наборов данных. 1. Смоделированные независимые случайные векторы X , Y , имеющие гауссовское распределение с заданным математическим ожиданием a и корреляционной матрицей R. 2. Реальные статистические данные из заданного набора (выдаются преподавателем). Отчёт кроме прочих обязательных элементов должен включать: 1) изображения данных в виде точек на плоскости; 2) статистические оценки коэффициентов корреляции Пирсона для каждого набора данных, сравнение статистической оценки коэффициента корреляции Пирсона с реальным коэффициентом корреляции Пирсона для смоделированных данных; 3) решение о принятии или отвержении статистической гипотезы о некоррелированности признаков для каждого набора данных и обоснование этого решения. Варианты заданий на лабораторную работу В табл. 1 для каждого варианта задания приведены значения объёма исследуемой выборки (n), значения вектора математических ожиданий (a) и корреляционных матриц (R) для моделируемой выборки из гауссовских случайных векторов. 28 Таблица 1. Варианты задания для моделирования данных в лабораторной работе № 1 Вариант n a 0 100 (0, 0) 1 100 (-1, -1) 2 1000 (-1, 0) 3 10000 (-1, 1) 4 100 (0, -1) 5 1000 (0, 1) 6 10000 (1, -1) 7 100 (1, 0) 8 1000 (1, 1) 9 10000 (-1, -1) 10 100 (-1, 0) 11 1000 (-1, 1) 12 10000 (0, -1) R 1 0 0 1 1 0,5 0,5 2 1 0,9 0,9 2 1 0,1 0,1 2 0,5 1 2 0,5 0,9 1 2 0,9 1 0,1 10 1 10 2 10 3 10 1 0,1 2 1 1 2 1 3 1 1 1 10 2 2 1 10 3 3 1 29 Продолжение табл. 1 Вариант n a 13 100 (0, 1) 14 1000 (1, -1) 15 10000 (1, 0) 16 100 (1, 1) 17 1000 (-1, -1) 18 10000 (-1, 0) 19 100 (-1, 1) 20 1000 (0, -1) 21 10000 (0, 1) 22 100 (1, -1) 23 1000 (1, 0) 24 10000 (1, 1) 25 100 (-1, -1) 30 R 1 1 1 2 1 3 1 10 2 10 3 10 1 1 1 10 1 2 2 10 1 3 4 1 3 10 1 9 4 2 4 3 4 4 2 9 3 9 4 9 4 5 5 9 4 1 1 9 4 2 2 9 Окончание табл. 1 Вариант n a R 4 3 3 9 4 4 4 9 4 5 5 9 26 1000 (-1, 0) 27 10000 (-1, 1) 28 100 (0, -1) 29 1000 (0, 1) 16 1 1 16 30 10000 (1, -1) 16 15 15 16 Варианты реальных наборов данных 0. Ирисы Фишера Название файла: 00-iris.txt Ссылка: https://archive.ics.uci.edu/ml/datasets/Iris Первый признак: Sepal.Length (столбец № 2) Второй признак: Sepal.Width (столбец № 3) 1. Soybean Название файла: 01-soybean.txt Первый признак: protein (столбец № 10) Второй признак: oil (столбец № 11) 2. Данные о новорожденных Название файла: 02-birth.txt Первый признак: Head (столбец № 6) Второй признак: Chest (столбец № 7) 3. Потребление пищи в Дании в 1985 году Название файла: 03-vitamina.txt Первый признак: Avit (столбец № 9) Второй признак: Cvit (столбец № 20) 4. Physical Growth of California Boys and Girls Название файла: 04-physical-growth.txt Первый признак: WT2 (столбец № 3) Второй признак: WT9 (столбец № 5) 31 5. Успеваемость студентов Название файла: 05-trp-grades.txt Первый признак: L.att (столбец № 2) Второй признак: P.att (столбец № 3) 6. Wine Название файла: 06-wine.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Wine Первый признак: alcohol (столбец № 2) Второй признак: color-intensity (столбец № 11) 7. Forest Fires Название файла: 07-forest-fires.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Forest+Fires Первый признак: ISI (столбец № 8) Второй признак: wind (столбец № 11) 8. Wisconsin Prognostic Breast Cancer Название файла: 08-wpbc.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic) Первый признак: perimeter (столбец № 6) Второй признак: area (столбец № 7) 9. Abalone Data Название файла: 09-abalone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Abalone Первый признак: Length (столбец № 2) Второй признак: Diameter (столбец № 3) 10. 1985 Auto Imports Database Название файла: 10-automobile.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Automobile Первый признак: length (столбец № 11) Второй признак: width (столбец № 12) 11. Glass Identification Database Название файла: 11-glass.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Glass+Identification Первый признак: RI (столбец № 2) Второй признак: Al (столбец № 5) 32 12. Echocardiogram Data Название файла: 12-echocardiogram.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Echocardiogram Первый признак: fractional-shortening (столбец № 5) Второй признак: wall-motion-score (столбец № 8) 13. Horse Colic Database Название файла: 13-horse-colic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Horse+Colic Первый признак: rectal temperature (столбец № 4) Второй признак: total protein (столбец № 20) 14. Pima Indians Diabetes Database Название файла: 14-pima-indians-diabetes.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes Первый признак: Body mass index (столбец № 6) Второй признак: Diabetes pedigree function (столбец № 7) 15. Auto-Mpg Data Название файла: 15-auto-mpg.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Auto+MPG Первый признак: mpg (столбец № 1) Второй признак: horsepower (столбец № 4) 16. Boston Housing Data Название файла: 16-housing.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Housing Первый признак: CRIM (столбец № 1) Второй признак: INDUS (столбец № 3) 17. Blocks Classification Название файла: 17-page-blocks.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Page+Blocks+Classification Первый признак: eccen (столбец № 4) Второй признак: mean_tr (столбец № 7) 18. Cylinder Bands Название файла: 18-bands.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Cylinder+Bands Первый признак: roughness (столбец № 26) Второй признак: press speed (столбец № 29) 33 19. Ecoli Data Set Название файла: 19-ecoli.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ecoli Первый признак: mcg (столбец № 2) Второй признак: gvh (столбец № 3) 20. Yeast Data Set Название файла: 20-yeast.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Yeast Первый признак: mcg (столбец № 2) Второй признак: gvh (столбец № 3) 21. Cardiac Arrhythmia Database Название файла: 21-arrhythmia.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Arrhythmia Первый признак: Q wave of channel DI (столбец № 161) Второй признак: R wave of channel DI (столбец № 162) 22. Spambase Data Set Название файла: 22-spambase.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Spambase Первый признак: capital_run_length_average (столбец № 55) Второй признак: capital_run_length_longest (столбец № 56) 23. Coil 1999 Competition Data Data Set Название файла: 23-coil.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Coil+1999+Competition+Data Первый признак: столбец № 4 Второй признак: столбец № 5 24. MAGIC gamma telescope data 2004 Название файла: 24-magic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/MAGIC+Gamma+Telescope Первый признак: fLength (столбец № 1) Второй признак: fWidth (столбец № 2) 25. Ozone Level Detection Data Set Название файла: 25-ozone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ozone+Level+Detection Первый признак: WSR_AV (столбец № 27) Второй признак: T_AV (столбец № 53) 34 26. Parkinsons Disease Data Set Название файла: 26-parkinsons.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Parkinsons Первый признак: MDVP:Fhi(Hz) (столбец № 3) Второй признак: MDVP:Flo(Hz) (столбец № 4) 27. LIBRAS Movement Database Название файла: 27-movement-libras.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Libras+Movement Первый признак: 1 coordinate abcissa (столбец № 1) Второй признак: 2 coordinate abcissa (столбец № 3) 28. Breast Tissue Data Set Название файла: 28-breast-tissue.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Tissue Первый признак: AREA (столбец № 7) Второй признак: MAX IP (столбец № 9) 29. Steel Plates Faults Data Set Название файла: 29-faults.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Steel+Plates+Faults Первый признак: Edges_Index (столбец № 15) Второй признак: Empty_Index (столбец № 16) 30. Banknote Authentication Data Set Название файла: 30-banknote.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/banknote+authentication Первый признак: skewness (столбец № 2) Второй признак: curtosis (столбец № 3) Контрольные вопросы 1. Что такое корреляция? 2. Каким свойствам отвечает корреляция? 3. Что такое коэффициент корреляции Пирсона? 4. Каким свойствам отвечает коэффициент корреляции? 5. Как проверить гипотезу о некоррелированности? 6. Что такое уровень значимости? 7. Как строится доверительный интервал для коэффициента корреляции Пирсона? 8. Что такое доверительная вероятность? 35 9. Что такое ранговая корреляция? 10. Как смоделировать случайный вектор, распределённый по многомерному гауссовскому закону? 1.10 Пример реализации корреляционного анализа Листинг 11. Пример корреляционного анализа данных на языке R require(MASS) analyse_cor <- function(x, y) { print(cor.test(x, y)) dev.new() plot(x, y) } dat <- read.table("00-iris.txt") analyse_cor(dat$Sepal.Length, dat$Sepal.Width) n <- 100 a <- c(0, 0) r <- cbind(c(1, 0), c(0, 1)) dat <- mvrnorm(n, a, r) analyse_cor(dat[,1], dat[,2]) В листинге 11 приведён пример выполнения нулевого варианта настоящей лабораторной работы. Синтаксис function(аргументы) {тело} задаёт анонимную функцию. Функция dev.new используется, чтобы открыть новое окно для рисования графика. Подробное описание остальных используемых функций приведено выше. 36 2 Регрессионный анализ 2.1 Регрессионная модель Пусть объекты наблюдения, характеризуются m признаками Xj, но интерес представляет другой признак этих объектов Y. Требуется научиться по набору наблюдаемых признаков Xj, научиться определять значение признака Y. Предполагается, что признак Y каким-то неизвестным образом зависит от признаков Xj. Если считать все эти признаки случайными величинами, то можно определить регрессию (англ. regression) Y на X как условное математическое ожидание y x1 , x2 , , xm M Y | X 1 x1 X 2 x2 X m xm . График функции y(x1, x2, …, xm) называется линией регрессии, признаки Xj – независимыми переменными (также регрессорами или предикторами), а признак Y – зависимой (также критериальной или выходной) переменной. Задача восстановления линии регрессии заключается в построении некоторой функции y(x1, x2, …, xm), которая наилучшим образом описывает данные из некоторой обучающей выборки U, в которой каждому вектору предикторов x ставится в соответствие зависимая переменная y. Понятно, что эту функцию следует искать в некотором конкретном классе функций. Наиболее популярным подходом является предположение, что данные отвечают линейной регрессионной модели вида y x1 , x2 , , xm a T x b , (8) где a R m и b R – это неизвестные коэффициенты в уравнении регрессии, ε – гауссовский белый шум с нулевым средним и некоторой дисперсией σ2. Белый шум (англ. white noise) – это случайный процесс с независимыми сечениями. Под R понимается множество вещественных чисел. В этом случае задача восстановления линейной регрессии состоит в определении параметров a и b. Для заданной выборки U, состоящей из пар (x, y), оптимальные коэффициенты a и b обычно определяются из условия минимума суммы квадратов отклонений 37 J a, b y yˆ x , x ,, x 1 x , y U 2 m 2 min . (9) Здесь подразумевается yˆ x aT x b . Подобный метод приближения данных с помощью кривых называется методом наименьших квадратов (англ. least squares). Очевидно, что в линейном случае функция J(a, b) является выпуклой и имеет единственный экстремум, который может быть найден из необходимого условия экстремума J a, b J a, b 0, 0. a j b После дифференцирования получается 2 x j y aT x b 0 , x , y U 2 y yˆ x , x ,, x 0 . 1 x , y U 2 m Отсюда получается (m + 1) уравнение с (m + 1) неизвестными: x j a T x b x j y; x , y U x , y U T a x b y. x , y U x , y U (10) Это система линейных алгебраических уравнений (СЛАУ), решение которой не представляет трудностей. Большинство математических пакетов включают средства для решения таких задач. Также имеется множество библиотек, с помощью которых можно решать СЛАУ в программах на большинстве языков программирования. Для оценки качества приближения данных с помощью заданной регрессионной модели используется коэффициент детерминации (англ. coefficient of determination), определяемый как J a, b R2 1 , S0 где J(a, b) – это сумма квадратов отклонений (9), S0 – это общая сумма квадратов, определяемая, как S0 38 y y x , y U 2 , где y – это выборочное среднее (3) признака y. Чем больше значение коэффициента детерминации R2, тем лучше данные описываются заданной моделью. В случае, когда R2 = 1, все точки из выборки в точности лежат на линии регрессии. В одномерном случае x – это просто один числовой признак, так что модель (8) имеет вид y x ax b , (11) и при решении системы (10) получается a x x y y x , y U x x 2 x , y U Rˆ xy , Dˆ (12) x b y ax , (13) где x и y – это выборочные средние (3) признаков x и y, Rˆxy – выборочный аналог корреляции (1) признаков x и y, Dˆ x – выборочная дисперсия признака x. В этом случае коэффициенты a и b отвечают следующим свойствам. 1. Оценки (12) и (13) коэффициентов a и b для модели (11) являются состоятельными, несмещёнными и эффективными. 2. Прямая y = ax + b проходит через точку x , y . 3. Сумма регрессионных остатков равна нулю: y y x 0 . x , y U На рис. 5 приведён пример построенной линии регрессии для некоторого набора точек, отвечающего модели (11). Как видно, эта линия описывает лишь примерное расположение точек относительно друг друга. Использование этой модели для предсказания неизбежно приведёт к ошибке, величина которой напрямую зависит от дисперсии шума. Линейная регрессия – не единственный способ оценивания зависимости между признаками. 39 Рис. 5. Линия регрессии для набора точек Например, если имеются взаимно-однозначные однозначные преобразования (например, монотонные функции) признаков x и y f(xx) и g(y), то коэффициенты для модели вида y x g 1 af ( x ) b ищутся точно так же, как и для линейной модели (11 11). На практике просто ко всем признакам x и y из выборки орки следует заранее примеприм нить преобразования f(x) и g(y),, после чего искать коэффициенты уже для получившейся линейной модели (11). ). Например, популярпопуля ной моделью является логарифмическая регрессия (14) y x a ln x b . 2.2 Реализация регрессионного анализа в языке R В языке R для построения линейных моделей, приближающих некоторые данные, используется функция lm из пакета stats. Сигнатура этой функции имеет следующий вид. lm(formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...) Описание аргументов функции lm представлено ниже. formula – объект класса «formula», », символически описыопис вающий характер зависимости переменных. 40 data – блок данных, список или матрица, содержащие значения признаков для конкретного набора данных. subset – вектор, определяющий подмножество наблюдений, которое следует использовать для построения модели. weights – вектор весов для объектов наблюдения. Если веса w(x) определены для каждой точки x из выборки, то вместо функции (9) минимизируется взвешенная сумма квадратов J w a, b w x y yˆ x , x ,, x x , y U 1 2 m 2 min . na.action – функция, определяющая действия с пропущенными данными. Некоторыми из возможных значений этого аргумента могут выступать функции na.omit, которая просто удаляет объекты, в которых некоторые значения признаков пропущены, или na.exclude, которая оставляет эти объекты, но исключает из модели признаки, которые пропущены у некоторых объектов. method – строка, определяющая метод, который следует использовать для решения СЛАУ. На данный момент поддерживается только метод «qr», основанный на QR-разложении. model, x, y, qr – логические значения, определяющие, нужно ли включать в возвращаемое значение соответствующие элементы. singular.ok – логическое значение, определяющее, вызывает ли сингулярность ошибку. contrasts – список линейных ограничений, накладываемых на признаки. С помощью этого аргумента можно указать, что некоторые линейные комбинации признаков равны нулю. offset – значения дополнительного признака для каждого объекта, коэффициент перед которым в результирующей модели должен быть равен единице. Формула в R – это специфическая синтаксическая конструкция, описывающая зависимость между переменными. Она состоит из зависимой переменной, после которой следует символ «~», после чего записываются предикторы через знак «+». На самом деле правила синтаксиса формул в R несколько сложнее, но в настоящем издании можно ограничиться этим. Дополнительные сведения можно найти в руководстве пользователя. В одномерном случае для построения линейной модели (11) регрессии переменной y на переменную x можно просто записать 41 формулу «y ~ x». Чтобы линия регрессии гарантировано проходила через начало координат, то есть чтобы коэффициент b был равен 0, можно записать формулу «y ~ 0 + x». Двумерный случай регрессионной модели (8) записывается как «y ~ x1 + x2». Допускается использовать функции, например, логарифмическая регрессия в форме (14) может быть записана как «y ~ log(x)». Функция lm возвращает объект класса lm, инкапсулирующий линейную модель. К ней применимы многие функции, предназначенные для работы с такими моделями. Например, функция summary выводит подробную информацию об этой модели. Функция coefficients выводит коэффициенты в уравнении регрессии. Функция residuals возвращает регрессионные остатки. Модель агрегирует в себе несколько других объектов. coefficients – вектор коэффициентов в уравнении регрессии. residuals – регрессионные остатки (разница выборочных значений зависимой переменной и предсказанных с помощью модели). fitted.values – средние значения признаков. rank – ранг линейной модели. weights – веса объектов наблюдения, если они были указаны. df.residual – число степеней свободы регрессионных остатков. call – каким образом функция lm была вызвана изначально. terms – предикторы. contrasts – ограничения, если они были заданы. xlevels – уровни признаков. offset – дополнительный заданный априори признак, если он был задан. y – значения зависимой переменной. x – значения предикторов. model – модель в виде блока данных. na.action – функция, определяющая действие в случае пропущенных значений. Доступ к этим значениям можно получить, записав их название в двойных квадратных скобках справа от переменной, содержащей модель. Например, «a[["coefficients"]]». Примеры использования этих функций для восстановления регрессии можно найти ниже. 42 2.3 Задание на лабораторную работу № 2 Входные данные: n объектов, каждый из которых характеризуется двумя числовыми признаками: xi i 1 и yi i 1 . n n Требуется исследовать регрессионную зависимость признака y от признака x. Для каждого набора данных необходимо выполнить следующие задания. 1. Построить модель линейной регрессии y = ax + b + ε, оценив оптимальные параметры a и b из условия минимизации суммы квадратов отклонений для заданных значений признаков xi i 1 и yi i 1 . n n 2. Вычислить коэффициент детерминации для получившейся модели. 3. Визуализировать на одном графике точки (xi, yi) и прямую y = ax + b. Все описанные выше задания требуется выполнить для двух наборов данных. 1. Смоделированные согласно модели y = ax + b + ε точки (xi, yi). В качестве ε нужно использовать гауссовский белый шум с нулевым математическим ожиданием и заданной дисперсией σ2. Значения xi выбираются через равные промежутки на отрезке [0; 1]. 2. Реальные статистические данные из заданного набора (выдаются преподавателем). Отчёт кроме прочих обязательных элементов должен включать: 1) изображения точек и линий регрессии на плоскости; 2) модель линейной регрессии в явном виде с определёнными коэффициентами; 3) коэффициенты детерминации для моделей. Варианты заданий на лабораторную работу В табл. 2 представлены варианты параметров для моделирования данных: n – это количество точек, a и b – коэффициенты в линейной функции y = ax + b + ε, а σ2 – дисперсия гауссовского белого шума ε. Сами значения x задаются в виде равномерной сетки на отрезке [0; 1]. 43 Таблица 2. Варианты задания для моделирования данных в лабораторной работе № 2 Вариант 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 44 n 100 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 100 1000 10000 a 1 2 -2 0,5 -0,5 10 -10 0,1 -0,1 2 -2 0,5 -0,5 10 -10 0,1 -0,1 2 -2 0,5 -0,5 10 -10 0,1 -0,1 2 -2 0,5 -0,5 10 -10 b 0 0,1 0,5 1 2 10 -0,1 -0,5 -1 -2 -10 0,1 0,5 1 2 10 -0,1 -0,5 -1 -2 -10 0,1 0,5 1 2 10 -0,1 -0,5 -1 -2 -10 σ2 0,001 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 0,01 0,1 1 Варианты реальных наборов данных 0. Ирисы Фишера Название файла: 00-iris.txt Ссылка: https://archive.ics.uci.edu/ml/datasets/Iris Предиктор: Sepal.Length (столбец № 2) Зависимая переменная: Sepal.Width (столбец № 3) 1. Soybean Название файла: 01-soybean.txt Предиктор: protein (столбец № 10) Зависимая переменная: oil (столбец № 11) 2. Данные о новорожденных Название файла: 02-birth.txt Предиктор: Head (столбец № 6) Зависимая переменная: Chest (столбец № 7) 3. Потребление пищи в Дании в 1985 году Название файла: 03-vitamina.txt Предиктор: Avit (столбец № 9) Зависимая переменная: Cvit (столбец № 20) 4. Physical Growth of California Boys and Girls Название файла: 04-physical-growth.txt Предиктор: WT2 (столбец № 3) Зависимая переменная: WT9 (столбец № 5) 5. Успеваемость студентов Название файла: 05-trp-grades.txt Предиктор: L.att (столбец № 2) Зависимая переменная: P.att (столбец № 3) 6. Wine Название файла: 06-wine.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Wine Предиктор: alcohol (столбец № 2) Зависимая переменная: color-intensity (столбец № 11) 7. Forest Fires Название файла: 07-forest-fires.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Forest+Fires Предиктор: ISI (столбец № 8) Зависимая переменная: wind (столбец № 11) 45 8. Wisconsin Prognostic Breast Cancer Название файла: 08-wpbc.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic) Предиктор: perimeter (столбец № 6) Зависимая переменная: area (столбец № 7) 9. Abalone Data Название файла: 09-abalone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Abalone Предиктор: Length (столбец № 2) Зависимая переменная: Diameter (столбец № 3) 10. 1985 Auto Imports Database Название файла: 10-automobile.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Automobile Предиктор: length (столбец № 11) Зависимая переменная: width (столбец № 12) 11. Glass Identification Database Название файла: 11-glass.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Glass+Identification Предиктор: RI (столбец № 2) Зависимая переменная: Al (столбец № 5) 12. Echocardiogram Data Название файла: 12-echocardiogram.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Echocardiogram Предиктор: fractional-shortening (столбец № 5) Зависимая переменная: wall-motion-score (столбец № 8) 13. Horse Colic Database Название файла: 13-horse-colic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Horse+Colic Предиктор: rectal temperature (столбец № 4) Зависимая переменная: total protein (столбец № 20) 14. Pima Indians Diabetes Database Название файла: 14-pima-indians-diabetes.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes Предиктор: Body mass index (столбец № 6) Зависимая переменная: Diabetes pedigree function (столбец № 7) 46 15. Auto-Mpg Data Название файла: 15-auto-mpg.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Auto+MPG Предиктор: mpg (столбец № 1) Зависимая переменная: horsepower (столбец № 4) 16. Boston Housing Data Название файла: 16-housing.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Housing Предиктор: CRIM (столбец № 1) Зависимая переменная: INDUS (столбец № 3) 17. Blocks Classification Название файла: 17-page-blocks.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Page+Blocks+Classification Предиктор: eccen (столбец № 4) Зависимая переменная: mean_tr (столбец № 7) 18. Cylinder Bands Название файла: 18-bands.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Cylinder+Bands Предиктор: roughness (столбец № 26) Зависимая переменная: press speed (столбец № 29) 19. Ecoli Data Set Название файла: 19-ecoli.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ecoli Предиктор: mcg (столбец № 2) Зависимая переменная: gvh (столбец № 3) 20. Yeast Data Set Название файла: 20-yeast.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Yeast Предиктор: mcg (столбец № 2) Зависимая переменная: gvh (столбец № 3) 21. Cardiac Arrhythmia Database Название файла: 21-arrhythmia.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Arrhythmia Предиктор: Q wave of channel DI (столбец № 161) Зависимая переменная: R wave of channel DI (столбец № 162) 47 22. Spambase Data Set Название файла: 22-spambase.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Spambase Предиктор: capital_run_length_average (столбец № 55) Зависимая переменная: capital_run_length_longest (столбец № 56) 23. Coil 1999 Competition Data Data Set Название файла: 23-coil.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Coil+1999+Competition+Data Предиктор: столбец № 4 Зависимая переменная: столбец № 5 24. MAGIC gamma telescope data 2004 Название файла: 24-magic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/MAGIC+Gamma+Telescope Предиктор: fLength (столбец № 1) Зависимая переменная: fWidth (столбец № 2) 25. Ozone Level Detection Data Set Название файла: 25-ozone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ozone+Level+Detection Предиктор: WSR_AV (столбец № 27) Зависимая переменная: T_AV (столбец № 53) 26. Parkinsons Disease Data Set Название файла: 26-parkinsons.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Parkinsons Предиктор: MDVP:Fhi(Hz) (столбец № 3) Зависимая переменная: MDVP:Flo(Hz) (столбец № 4) 27. LIBRAS Movement Database Название файла: 27-movement-libras.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Libras+Movement Предиктор: 1 coordinate abcissa (столбец № 1) Зависимая переменная: 2 coordinate abcissa (столбец № 3) 28. Breast Tissue Data Set Название файла: 28-breast-tissue.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Tissue Предиктор: AREA (столбец № 7) Зависимая переменная: MAX IP (столбец № 9) 48 29. Steel Plates Faults Data Set Название файла: 29-faults.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Steel+Plates+Faults Предиктор: Edges_Index (столбец № 15) Зависимая переменная: Empty_Index (столбец № 16) 30. Banknote Authentication Data Set Название файла: 30-banknote.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/banknote+authentication Предиктор: skewness (столбец № 2) Зависимая переменная: curtosis (столбец № 3) Контрольные вопросы 1. Что такое регрессия одной случайной величины на другую? 2. Что такое линейная модель регрессии? 3. Как можно интерпретировать коэффициенты a и b в одномерной линейной регрессионной модели y = ax + b + ε? 4. Каким методом оцениваются коэффициенты в линейной регрессионной модели? 5. Каким свойствам отвечают статистические оценки коэффициентов a и b в одномерном случае? 6. Каким методом решается СЛАУ для нахождения коэффициентов в уравнении регрессии? 7. Что такое белый шум? 8. Что такое коэффициент детерминации? 9. Что такое регрессионные остатки? 10. Что такое логарифмическая регрессия? 2.4 Пример реализации регрессионного анализа В листинге 12 приведён пример выполнения этой лабораторной работы на языке R. Для наложения линии регрессии на имеющийся график с точками из обучающей выборки используется функция abline. Для создания равномерной одномерной сетки на отрезке [0; 1] используется функция seq, принимающая начало и конец отрезка, а также количество точек в виде именованного аргумента. Для моделирования белого шума с необходимым количеством сечений 49 используется функция rnorm, принимающая количество сечений, а также среднее значение и дисперсию каждого сечения. Операции над векторами по умолчанию выполняются поэлементно. Листинг 12. Пример регрессионного анализа данных на языке R analyse_regression <- function(x, y) { model <- lm(y ~ x) print(summary(model)) dev.new() plot(x, y) abline(model) } dat <- read.table("00-iris.txt") analyse_regression(dat$Sepal.Length, dat$Sepal.Width) n <- 100 a <- 1 b <- 0 s2 <- 0.001 x <- seq(0.0, 1.0, length=n) y <- a * x + b + rnorm(n, 0, s2) analyse_regression(x, y) 50 3 Кластерный анализ 3.1 Постановка задачи кластеризации Пусть имеется выборка U из n объектов наблюдения, каждый из которых характеризуется m числовыми признаками Xj. Известно, что каждый из этих объектов на самом деле относится к одному из k классов, причём признаки объектов из одного класса не слишком сильно различаются, а признаки объектов из разных классов различаются более существенно. Мера различия между признаками объектов может быть определена как расстояние ρ(x, y) между векторами признаков в соответствующем признаковом пространстве. Требуется разбить множество объектов наблюдения U на k подмножеств Ul, так чтобы 1) множества не пересекались, то есть i, j 1; k Z : i j U i U j ; 2) каждый объект относился к одному из множеств, то есть k U U ; l l 1 3) при этом некоторый показатель ошибки кластеризации J был минимален. Сами подмножества Ul и называются кластерами. Показатель ошибки кластеризации может выбираться по-разному. Допустим, он представляет собой сумму квадратов расстояний от каждого объекта до центра соответствующего кластера: k J 2 x, xl , (15) l 1 xU k где xl – это центр l-го кластера: xl 1 Ul x. (16) xUl Здесь под U l понимается количество объектов, отнесённых к l-у кластеру. При этом сама метрика ρ(x, y) также может быть выбрана поразному. Некоторые примеры метрик приведены ниже. 51 1. Манхэттенское расстояние (расстояние асстояние городских кварталов): кварталов m 1 x, y x j y j . j 1 2. Евклидово расстояние: 2 x, y m x j 1 yj . 2 j (17) 3. Максимальное различие по координатам: x, y max x j y j . j1;mZ Рис. 6. Задача кластеризации на плоскости: требуется разбить множество точек на два кластера На рис. 6 приведён пример задачи кластеризации точек на плоспло кости. В действительности представленные точки относятся к одноодн му из двух гауссовских распределений с одинаковыми корреляцикорреляц онными матрицами, но различными математическими ожиданиями. о На рисунке видно, как точки концентрируются вокруг каждого из двух центров. В такой постановке эта задача отличается высокой вычислительвычислител ной сложностью. Можно показать справедливость следующих уту верждений относительно класса её вычислительной сложности. сло 1. Задача кластеризации является NP-сложной сложной в евклидовом пропр странстве даже для двух кластеров. 2. Задача кластеризации является NP-сложной для произвольнопроизвольн го числа кластеров даже на плоскости. 52 3. Задача кластеризации может быть точно решена с помощью алгоритма, вычислительная сложность которого O(nmk+1). Тем не менее, существует ряд эвристических алгоритмов, решающих эту задачу с некоторыми допущениями. Самый популярный из них – алгоритм k внутригрупповых средних. 3.2 Алгоритм k внутригрупповых средних Идея алгоритма k внутригрупповых средних (англ. k-means) заключается в последовательном пересчёте внутригрупповых средних (16). Пусть вначале для каждого из k кластеров имеется некоторое начальное внутригрупповое среднее xl(0) . Если внутригрупповые средние заданы, то каждый кластер Ul очевидным образом определяются, как множество объектов наблюдения, вектора признаков для которых ближе к центру xl(0) , чем к центрам других кластеров. После этого внутригрупповое среднее можно пересчитать по формуле (16), после чего снова пересчитать кластеры, пока средние не перестанут меняться. Таким образом, любую s-ю итерацию алгоритма можно описать тремя шагами. 1. Распределить объекты наблюдения по кластерам: U l( s ) x U | j 1; k Z : x, xl( s 1) x, x j( s 1) x, xl( s 1) x, x j( s 1) l j . При этом объекты просто относятся к тому кластеру, до центра которого расстояние от этого объекта меньше, а в случае равенства наименьших расстояний – в кластер с меньшим номером. 2. Пересчитать центры кластеров: 1 xl( s ) ( s ) x . U l xUl( s ) Они считаются, как обычные выборочные средние. 3. Если ничего не поменялось с прошлой итерации, то есть l 1; k Z : xl( s ) xl( s 1) , то закончить выполнение алгоритма, иначе перейти к шагу 1 на следующей итерации (s + 1). Этот алгоритм всегда сходится за конечное количество итераций, поскольку значение ошибки кластеризации (15) не увеличива53 ется в процессе работы алгоритма, а число возможных возможн разбиений конечного множества на подмножества конечно. Тем не менее, этот алгоритм имеет экспоненциальную сложность в худшем случае, хох тя на практике обычно сходится довольно быстро. Кроме того, этот алгоритм может сойтись не к глобальному, а к локальному локально минимуму функции (15). Ещё одной особенностью является тот факт, что количество клакл стеров k должно быть известно заранее. В некоторых прикладных задачах оно действительно известно. Если же это не так, так то всегда можно перебирать это количество, оценивая результат в каждом случае. Тем не менее, нужно понимать, что этот алгоритм не преднапредн значен для случая, когда количество кластеров не известно. Рис. 7. Результат кластеризации с помощью алгоритма k внутригрупповых средних На рис. 7 приведён пример результата кластеризации некоторого некотор набора точек на плоскости с помощью алгоритма k внутригрупповых средних. Кругами и треугольниками отмечены точки, отнесёнотнесё ные к двум различным ным кластерам. Крестами помечены окончательокончател ные центры кластеров. Описанный алгоритм иногда называют алгоритмом Ллойда (англ. Lloyd) или Ллойда-Форджи (англ. Lloyd-Forgy Forgy). Существуют альтернативные реализации описанного подхода. Так реализация Маккуина (англ. MacQueen) по-другому другому подходит к пересчёту ценце тров кластеров. Она пересчитывает центры всякий раз, как очередочере ной объект наблюдения меняет свой кластер, прямо в процессе пеп рераспределения объектов по кластерам. 54 На практике очень часто используется реализация ХартиганаВонга (англ. Hartigan-Wong). В ней для каждого объекта наблюдения вычисляется не только ближайший центр кластеров, но и второй по удалённости от него. На каждой итерации алгоритма дополнительно выполняется стадия быстрого перехода, на которой каждая точка перераспределяется во второй по удалённости кластер, если это уменьшит сумму всех расстояний между парами точек, лежащих в одном и том же кластере. Многое зависит от выбора начальных центров xl(0) . Как видно, единственное требование к ним – ни один кластер изначально не должен быть пустым. Один из простых способов выбора начальных центров, который гарантирует выполнение этого условия, – взять в качестве них любые k различных объектов наблюдения из множества U: xl(0) U i, j 1; k Z : i j xi(0) x j(0) . Тогда, по крайней мере, сами объекты, выбранные в качестве центров, изначально попадут в соответствующие кластеры. Кроме того, существуют некоторые более эффективные способы автоматического выбора изначальных центров кластеров. 3.3 Автоматический кластеров выбор начальных центров Две основные проблемы, возникающие при неудачном выборе в качестве центров кластеров нескольких случайных объектов наблюдения, состоят в большом количестве итераций алгоритма k внутригрупповых средних и в достижении локального минимума функции (15) вместо глобального минимума. Использование специфического алгоритма автоматического выбора начальных центров кластеров (англ. k-means++) может решить эти проблемы. Классический алгоритм автоматического выбора начальных центров кластеров состоит из k итераций, на каждой из которых определяется очередной начальный центр. Этот алгоритм можно описать в виде последовательности шагов следующим образом. 1. Первый начальный центр x1(0) выбирается равновероятно среди имеющихся в выборке U объектов наблюдения: x1(0) U . 55 2. Пусть ранее уже определено s начальных центров кластеров из k. Объекты наблюдения распределяются по имеющимся кластерам, в соответствии с текущими центрами, как это делается на шаге 1 алгоритма k внутригрупповых средних. Каждый объект наблюдения относится к тому кластеру, к центру которого он ближе. Для каждого объекта сохраняется расстояние до центра кластера, к которому он относится. 3. Очередной центр x s(01) выбирается случайно среди всех объектов наблюдения. При этом каждый объект x, относящийся к кластеру Ul, выбирается с вероятностью 2 x, xl(0) p x s , 2 (0) y, x j j 1 yU j то есть вероятность выбора конкретного объекта наблюдения в качестве очередного начального центра кластера прямо пропорциональна квадрату расстояния от этого объекта наблюдения до ближайшего к нему ранее выбранного начального центра кластера. 4. Если все k начальных центров кластеров уже выбраны, закончить выполнение алгоритма, иначе перейти к шагу 2. В стандартных библиотеках, входящих в изначальную поставку среды R, не содержится реализации описанного алгоритма выбора начальных центров кластеров, но при желании его можно реализовать самостоятельно. Для его реализации не придётся прилагать значительных усилий, поскольку многие промежуточные шаги, такие как случайный выбор объекта из выборки с заданной вероятностью, уже реализованы в R. 3.4 Реализация алгоритма k средних в языке R В языке R для кластеризации методом k внутригрупповых средних используется функция kmeans из пакета stats. Она позволяет производить кластеризацию данных различными методами. Ниже приведена сигнатура этой функции. kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"), trace=FALSE) x – матрица данных, каждая строка которой является вектором признаков очередного объекта наблюдения. 56 centers – количество кластеров k или набор начальных центров кластеров. Если набор начальных центров не задан, то в качестве начальных центров выбираются k случайных объектов наблюдения. iter.max – максимальное количество итераций алгоритма. nstart – количество наборов случайных начальных центров кластеров в случае, если центры выбираются случайно. algorithm – реализация алгоритма k внутригрупповых средних, с помощью которой будет производиться кластеризация. Допустимые значения: «Lloyd» или «Forgy» – алгоритм ЛлойдаФорджи, «MacQueen» – алгоритм Маккуина, «Hartigan-Wong» – алгоритм Хартигана-Вонга. trace – уровень протоколирования для алгоритма ХартиганаВонга. Чем выше значение, тем больше сопроводительной информации выводится. Функция возвращает объект класса kmeans, который имеет методы print и fitted. Этот объект представляет собой список, содержащий следующие элементы. cluster – вектор из n целых положительных чисел, обозначающих номер кластера соответствующего объекта наблюдения. centers – матрица, строки которой представляют собой центры соответствующих кластеров. totss – сумма квадратов расстояний от объектов наблюдения до соответствующих центров кластеров. withinss – вектор внутрикластерных сумм квадратов расстояний между объектами одного кластера для каждого кластера. tot.withinss – общая сумма внутрикластерных сумм квадратов расстояний между объектами, то есть сумма элементов вектора withinss . betweenss – междукластерная сумма квадратов расстояний, то есть разница между totss и tot.withinss. size – количество объектов наблюдения, попавших в каждый из кластеров. iter – количество внешних итераций, совершённых в ходе работы алгоритма. ifault – код ошибки, возникшей в ходе работы алгоритма. 57 Доступ к этим значениям можно получить путём записи их названия в двойных квадратных скобках справа от переменной, содержащей модель, либо через знак доллара. Например, «a[["cluster"]]» или «a$cluster». Примеры использования функции kmeans приведены в последующих разделах. 3.5 Иерархическая кластеризация Часто задача кластеризации, описанная в разделе 3.1, возникает в несколько более сложной постановке: точное число кластеров k может быть не известно. В этом случае использование алгоритма k внутригрупповых средних не представляется возможным. Конечно, можно просто перебирать значения k и для каждого из них использовать этот алгоритм, но сравнение среднеквадратических расстояний до центров кластеров (15) для различных количеств кластеров лишено смысла. Вместо этого используются алгоритмы иерархической кластеризации (англ. hierarchical clustering), которые разбивают множество объектов наблюдения на кластеры, которые в свою очередь также разбиваются на кластеры и так далее. Получившийся граф, вершинами которого являются кластеры, а дуги направлены от кластеров более высокого уровня к соответствующим кластерам более низкого уровня, называется дендрограммой. Построенная дендрограмма содержит информацию о близости между отдельными подмножествами объектов наблюдения, что позволяет подбирать число кластеров и производить более тщательный кластерный анализ в отдельных случаях. Иерархическая кластеризация, как и обыкновенная, производится на основе расстояний ρ(x, y) между объектами наблюдения из заданной выборки. Эти расстояния также могут быть определены поразному. На их основе строятся более сложные показатели качества кластеризации, которые допускают сравнение для различного числа кластеров. Далее с помощью различных методов, основанных на последовательном объединении и разбиении имеющихся кластеров, строится дендрограмма. Существует ряд различных методов иерархической кластеризации, детальное описание принципов работы которых лежит за рамками настоящего издания. Ниже приведены названия некоторых из этих методов. 1. Метод Уорда (англ. Ward’s method). 58 2. Метод одиночной связи (англ. single linkage). 3. Метод полной связи (англ. complete linkage). 4. Метод средней связи (англ. pair-group method using arithmetic averages). 5. Метод МакКуитти (англ. McQuitty’s method). 6. Метод медиан. 7. Центроидный метод (англ. pair-group method using the centroid average). В языке R для вычисления расстояния между всеми парами объектов наблюдения из заданного блока данных используется функция dist из пакета stats. Эта функция возвращает нижнюю треугольную матрицу расстояний между всеми соответствующими парами объектов. Сигнатура этой функции описана ниже. dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2) x – числовая матрица или блок данных. method – метрика, используемая для вычисления расстояния. Может принимать одно из значений, указанных в табл. 3. Таблица 3. Метрики, используемые для вычисления расстояний в R Название Евклидово расстояние Название в R eucliden Формула 2 x, y m x j 1 j yj 2 Максимум разницы компонент Манхэттенское расстояние maximum x, y max x j y j manhattan 1 x, y x j y j Для неотрицательных значений canberra Бинарное расстояние binary Расстояние Минковского j1;mZ m j 1 minkowski m xj yj j 1 xj yj c x, y b x , y j 1, m Z | x j 1, m Z | x j j y j y j 1/ p m p p x, y x j y j j 1 59 diag – логическое значение, определяющие, выводить ли диади гональ матрицы при выводе матрицы на экран. upper – логическое значение, определяющие, выводить ли верхний треугольник матрицы при выводе матрицы атрицы на экран p – степень в расстоянии Минковского. Для иерархической кластеризации в R предназначена функция hclust из пакета stats.. Она принимает блок данных и возвращавозвращ ет объект класса hclust,, содержащий информацию о результатах кластеризации. Сигнатура этой функции приведена ниже. ниже hclust(d, method = "complete", members = NULL) d – матрица расстояний, полученная с помощью функции dist. method – используемый метод иерархической кластеризации. Может принимать одно из значений «ward.D» – метод Уорда, «ward.D2» – другой метод Уорда, «single» – метод етод одиночной связи, «complete» – метод полной связи, «average average» – метод средней связи, «mcquitty» – метод МакКуитти, «median median» – метод медиан или «centroid» – центроидный метод. members – NULL или вектор того же размера, ра, что и d, позволяющий отдельно начать иерархическую кластеризацию конкретноконкретн го участка дендрограммы. Рис. 8. Иерархическая кластеризация штатов США по уровню преступности 60 Для графического изображения дендрограммы можно просто передать результат, возвращаемый функцией hclust, в функцию plot. Например, для кластеризации штатов США по уровню преступности можно использовать команду plot(hclust(dist(USArrests))). На рис. 8 приведена дендрограмма, получающаяся в результате выполнения такой команды. 3.6 Задание на лабораторную работу № 3 Входные данные: n объектов, каждый из которых характеризуется двумя числовыми признаками xi i 1 и n yi i 1 , а также номером n класса ci i 1 . n Требуется исследовать работу алгоритмов кластеризации объектов наблюдения по двум признакам. Для каждого набора данных требуется выполнить следующие задания. 1. Провести кластеризацию объектов наблюдения с помощью алгоритма k внутригрупповых средних. 2. Графически изобразить на плоскости разбиения объектов наблюдения в соответствии с кластерами и в соответствии с классами ci. Также отметить центры каждого кластера. Количество кластеров должно соответствовать количеству классов. 3. Для разбиения на кластеры вычислить сумму квадратов расстояний (15) от каждого объекта наблюдения до центра соответствующего кластера. Все описанные задания требуется выполнить для двух наборов данных. 1. Смоделированные независимые случайные векторы (X, Y), n1 из которых относятся к первому классу, а n2 – ко второму классу. Векторы, относящиеся к первому классу, распределены по гауссовскому закону с математическим ожиданием a1 и корреляционной матрицей R1, а векторы, относящиеся ко второму классу, – по гауссовскому закону с математическим ожиданием a2 и корреляционной матрицей R2. 2. Реальные статистические данные из заданного набора (выдаются преподавателем). Отчёт кроме прочих обязательных элементов должен включать: 61 1) изображения данных в виде точек на плоскости, причём данные из разных классов должны изображаться отличающимися друг от друга; 2) изображения результатов кластеризации данных в виде точек на плоскости, причём данные из разных кластеров должны изображаться отличающимися друг от друга, кроме того, требуется отметить центры кластеров; 3) значения суммы квадратов расстояний (15) от каждого объекта наблюдения до центра соответствующего кластера. Варианты заданий на лабораторную работу В табл. 4 для каждого варианта задания приведены значения количеств объектов наблюдения для каждого класса (n1 и n2), значения векторов математических ожиданий для каждого класса (a1 и a2) и корреляционные матрицы для каждого класса (R1 и R2) для моделируемой выборки из гауссовских случайных векторов. Таблица 4. Варианты задания для моделирования данных в лабораторной работе № 3 № n1 a1 R1 n2 a2 R2 0 100 0 0 1 0 0 1 100 2 2 1 0 0 1 1 100 1 1 1 0,5 0,5 2 200 2 2 2 0,5 0,5 1 2 1000 1 0 1 0,9 0,9 2 2000 2 3 2 0,9 0,9 1 3 100 1 1 1 0,1 0,1 2 50 2 4 2 0,1 0,1 1 4 1000 0 1 0,5 1 2 0,5 500 3 2 0,5 2 1 0,5 62 Продолжение табл. 4 5 100 0 1 0,9 1 2 0,9 1000 3 4 0,9 2 1 0,9 6 1000 1 1 0,1 1 0,1 2 100 4 2 0,1 2 0,1 1 7 100 1 0 2 1 1 1 200 4 3 2 0,5 0,5 1 8 1000 1 1 2 1 1 1 2000 4 4 2 0,1 0,1 1 9 100 1 1 2 1 1 1 50 4 4 2 1 1 1 10 1000 1 0 2 1 1 1 500 4 3 0,5 2 1 0,5 11 100 1 1 2 1 1 1 1000 4 2 0,1 2 0,1 1 12 1000 0 1 2 1 1 1 100 3 4 2 0,1 0,1 1 13 100 0 1 1 1 1 2 200 3 2 1 0,5 0,5 2 14 1000 1 1 1 1 1 2 2000 2 4 1 0,1 0,1 2 15 100 1 0 1 1 1 2 50 2 3 1 1 1 2 63 Продолжение табл. 4 16 1000 1 1 1 1 1 2 500 2 2 0,5 1 2 0,5 17 100 1 1 1 1 1 2 1000 2 4 0,1 1 0,1 2 18 1000 1 0 1 1 1 2 100 2 3 1 0,1 0,1 2 19 100 1 1 2 1 1 1 200 2 2 2 0,1 0,1 1 20 1000 0 1 2 1 1 1 2000 3 4 2 1 1 1 21 100 0 1 2 1 1 1 50 3 2 0,5 2 1 0,5 22 1000 1 1 2 1 1 1 500 4 4 0,1 2 0,1 1 23 100 1 0 2 1 1 1 1000 4 3 2 0,1 0,1 1 24 1000 1 1 2 1 1 1 100 4 2 1 0,5 0,5 2 25 100 1 1 1 1 1 2 200 4 2 1 0,1 0,1 2 26 1000 1 0 1 1 1 2 2000 4 3 1 1 1 2 64 Окончание табл. 4 27 100 1 1 1 1 1 2 50 4 4 0,5 1 2 0,5 28 1000 0 1 1 1 1 2 500 3 2 0,1 1 0,1 2 29 100 0 1 1 1 1 2 1000 3 4 1 0,1 0,1 2 30 1000 1 1 1 1 1 2 100 2 2 2 0,5 0,5 1 Варианты реальных наборов данных 0. Ирисы Фишера Название файла: 00-iris.txt Ссылка: https://archive.ics.uci.edu/ml/datasets/Iris Первый признак: Sepal.Length (столбец № 2) Второй признак: Sepal.Width (столбец № 3) Класс: Species (столбец № 6) 1. Soybean Название файла: 01-soybean.txt Первый признак: protein (столбец № 10) Второй признак: oil (столбец № 11) Класс: loc (столбец № 3) 2. Данные о новорожденных Название файла: 02-birth.txt Первый признак: Head (столбец № 6) Второй признак: Chest (столбец № 7) Класс: Sex (столбец № 2) 3. Потребление пищи в Дании в 1985 году Название файла: 03-vitamina.txt Первый признак: Avit (столбец № 9) Второй признак: Cvit (столбец № 20) Класс: sex (столбец № 4) 65 4. Physical Growth of California Boys and Girls Название файла: 04-physical-growth.txt Первый признак: WT2 (столбец № 3) Второй признак: WT9 (столбец № 5) Класс: Sex (столбец № 2) 5. Успеваемость студентов Название файла: 05-trp-grades.txt Первый признак: L.att (столбец № 2) Второй признак: P.att (столбец № 3) Класс: Exam (столбец № 8) 6. Wine Название файла: 06-wine.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Wine Первый признак: alcohol (столбец № 2) Второй признак: color-intensity (столбец № 11) Класс: cultivar (столбец № 1) 7. Forest Fires Название файла: 07-forest-fires.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Forest+Fires Первый признак: ISI (столбец № 8) Второй признак: wind (столбец № 11) Класс: month (столбец № 3) 8. Wisconsin Prognostic Breast Cancer Название файла: 08-wpbc.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic) Первый признак: perimeter (столбец № 6) Второй признак: area (столбец № 7) Класс: Outcome (столбец № 2) 9. Abalone Data Название файла: 09-abalone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Abalone Первый признак: Length (столбец № 2) Второй признак: Diameter (столбец № 3) Класс: Sex (столбец № 1) 66 10. 1985 Auto Imports Database Название файла: 10-automobile.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Automobile Первый признак: length (столбец № 11) Второй признак: width (столбец № 12) Класс: num-of-doors (столбец № 6) 11. Glass Identification Database Название файла: 11-glass.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Glass+Identification Первый признак: RI (столбец № 2) Второй признак: Al (столбец № 5) Класс: Type of glass (столбец № 11) 12. Echocardiogram Data Название файла: 12-echocardiogram.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Echocardiogram Первый признак: fractional-shortening (столбец № 5) Второй признак: wall-motion-score (столбец № 8) Класс: still-alive (столбец № 2) 13. Horse Colic Database Название файла: 13-horse-colic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Horse+Colic Первый признак: rectal temperature (столбец № 4) Второй признак: total protein (столбец № 20) Класс: outcome (столбец № 23) 14. Pima Indians Diabetes Database Название файла: 14-pima-indians-diabetes.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes Первый признак: Body mass index (столбец № 6) Второй признак: Diabetes pedigree function (столбец № 7) Класс: Class variable (столбец № 9) 15. Auto-Mpg Data Название файла: 15-auto-mpg.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Auto+MPG Первый признак: mpg (столбец № 1) Второй признак: horsepower (столбец № 4) Класс: cylinders (столбец № 2) 67 16. Boston Housing Data Название файла: 16-housing.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Housing Первый признак: CRIM (столбец № 1) Второй признак: INDUS (столбец № 3) Класс: CHAS (столбец № 4) 17. Blocks Classification Название файла: 17-page-blocks.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Page+Blocks+Classification Первый признак: eccen (столбец № 4) Второй признак: mean_tr (столбец № 7) Класс: class (столбец № 11) 18. Cylinder Bands Название файла: 18-bands.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Cylinder+Bands Первый признак: roughness (столбец № 26) Второй признак: press speed (столбец № 29) Класс: band type (столбец № 40) 19. Ecoli Data Set Название файла: 19-ecoli.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ecoli Первый признак: mcg (столбец № 2) Второй признак: gvh (столбец № 3) Класс: localization site (столбец № 9) 20. Yeast Data Set Название файла: 20-yeast.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Yeast Первый признак: mcg (столбец № 2) Второй признак: gvh (столбец № 3) Класс: localization site (столбец № 10) 21. Cardiac Arrhythmia Database Название файла: 21-arrhythmia.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Arrhythmia Первый признак: Q wave of channel DI (столбец № 161) Второй признак: R wave of channel DI (столбец № 162) Класс: Sex (столбец № 2) 68 22. Spambase Data Set Название файла: 22-spambase.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Spambase Первый признак: capital_run_length_average (столбец № 55) Второй признак: capital_run_length_longest (столбец № 56) Класс: spam (столбец № 58) 23. Coil 1999 Competition Data Data Set Название файла: 23-coil.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Coil+1999+Competition+Data Первый признак: столбец № 4 Второй признак: столбец № 5 Класс: season (столбец № 1) 24. MAGIC gamma telescope data 2004 Название файла: 24-magic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/MAGIC+Gamma+Telescope Первый признак: fLength (столбец № 1) Второй признак: fWidth (столбец № 2) Класс: class (столбец № 11) 25. Ozone Level Detection Data Set Название файла: 25-ozone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ozone+Level+Detection Первый признак: WSR_AV (столбец № 27) Второй признак: T_AV (столбец № 53) Класс: class (столбец № 74) 26. Parkinsons Disease Data Set Название файла: 26-parkinsons.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Parkinsons Первый признак: MDVP:Fhi(Hz) (столбец № 3) Второй признак: MDVP:Flo(Hz) (столбец № 4) Класс: status (столбец № 18) 69 27. LIBRAS Movement Database Название файла: 27-movement-libras.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Libras+Movement Первый признак: 1 coordinate abcissa (столбец № 1) Второй признак: 2 coordinate abcissa (столбец № 3) Класс: class (столбец № 91) 28. Breast Tissue Data Set Название файла: 28-breast-tissue.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Tissue Первый признак: AREA (столбец № 7) Второй признак: MAX IP (столбец № 9) Класс: Class (столбец № 2) 29. Steel Plates Faults Data Set Название файла: 29-faults.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Steel+Plates+Faults Первый признак: Edges_Index (столбец № 15) Второй признак: Empty_Index (столбец № 16) Класс: Pastry (столбец № 28) 30. Banknote Authentication Data Set Название файла: 30-banknote.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/banknote+authentication Первый признак: skewness (столбец № 2) Второй признак: curtosis (столбец № 3) Класс: class (столбец № 5) Контрольные вопросы 1. В чём состоит задача кластеризации данных? 2. Какие существуют различные способы определения расстояния между объектами наблюдения по их признакам? 3. К какому классу сложности относится задача кластеризации в классической постановке? 4. Как работает классическая реализация алгоритма k внутригрупповых средних? 5. Что можно сказать о сходимости алгоритма k внутригрупповых средних? 6. Какую функцию минимизирует алгоритм k внутригрупповых средних? 70 7. Какие существуют альтернативные варианты реализации алгоритма k внутригрупповых средних? 8. Какие существуют методы автоматического выбора начальных центров кластеров для алгоритма k внутригрупповых средних? 9. Как работает алгоритм автоматического выбора начальных центров кластеров kmeans++? 10. Что такое иерархическая кластеризация? 3.7 Пример реализации кластерного анализа В листинге 13 приведён пример выполнения нулевого варианта настоящей лабораторной работы на языке R. Листинг 13. Пример кластерного анализа данных на языке R require(MASS) analyse_clust <- function(x, y, clazz) { k <- length(unique(clazz)) clust <- kmeans(cbind(x, y), k) print(clust$totss) dev.new() plot(x, y, col=as.factor(clazz)) dev.new() plot(x, y, col=as.factor(clust$cluster)) points(clust$centers, col=1:length(clust$centers), pch=4, cex=2) } dat <- read.table("00-iris.txt") analyse_clust(dat$Sepal.Length, dat$Sepal.Width, as.factor(dat$Species)) n1 <- 100 a1 <- c(0, 0) r1 <- cbind(c(1, 0), c(0, 1)) n2 <- 100 a2 <- c(2, 2) r2 <- cbind(c(1, 0), c(0, 1)) dat <- rbind(mvrnorm(n1, a1, r1), mvrnorm(n2, a2, r2)) analyse_clust(dat[,1], dat[,2], c(rep(1, n1), rep(2, n2))) Для определения количества различных классов используется функция unique, возвращающая вектор из уникальных значений, содержащихся во входном векторе. Функции cbind и rbind 71 используются для конструирования больших матриц из подматриц: cbind объединяет матрицы по столбцам, rbind – по строкам. При рисовании графиков с помощью функции plot можно передавать именованный параметр col, отвечающий за цвет каждой отображаемой точки. Функция points используется для наложения центров кластеров на уже имеющийся график. Она принимает, кроме всего прочего, форму точек pch (4 означает кресты), и модификатор размера cex. Синтаксическая конструкция a:b в R возвращает вектор из последовательных целых чисел от a до b включительно. Векторы из нескольких одинаковых элементов получаются с помощью функции rep. Функция as.factor представляет объект в виде фактора, то есть занумерованного набора данных. Если он состоял из строк, то эти строки нумеруются в том порядке, в котором они встречались в наборе, причём одинаковые строки получают одинаковый номер. 72 4 Классификация 4.1 Постановка задачи классификации Пусть Ω – множество объектов, подлежащих распознаванию. Каждый объект характеризуется m признаками, так что Ω Rm . Это множество разбито на L подмножеств Ω l , называемых классами объектов, так что 1) эти подмножества не пересекаются, то есть i, j 1; L Z : i j Ωi Ω j , 2) каждый объект относится к какому-нибудь классу, то есть L Ω l Ω. l 1 Предполагается, что множество объектов, подлежащих распознаванию, образует вероятностное пространство Ω , B , P , в котором B 2 Ω означает некоторую сигма-алгебру на пространстве Ω , определяющую множество допустимых событий, а P : B 0;1 – это вероятностная мера. Например, для каждого класса объектов Ω l B определена априорная вероятность P Ω l появления объекта из соответствующего класса. В этом случае объекты распознавания представляют собой случайные векторы признаков, которые имеют некоторое вероятностное распределение, поддающееся анализу. Также можно вести речь об условных распределениях объектов из каждого класса. Вероятностный эксперимент здесь представляет собой предъявление некоторого объекта системе распознавания. Можно обозначить за x : Ω Ω l идеальный классификатор, переводящий объект x Ω l в его класс Ω l . Задача классификации заключается в построении другого классификатора x : Ω Ω , максимально похожего на x . Критерии каче l ства построенного классификатора могут отличаться, но обычно связаны с вероятностью ошибочной классификации 73 x . P x Ω | x (18) К сожалению, в большинстве случаев система распознавания не владеет информацией ни об идеальном классификаторе x , ни о вероятностных распределениях векторов признаков внутри классов. Даже априорные вероятности P Ω l появления объектов из определённых классов остаются неизвестными. Обычно всё, что допускается использовать при решении задачи классификации, – это конечная обучающая выборка U Ω , в которой для каждого объекта известен его класс. Если имеется также контрольная выборка U Ω , предназначенная для проверки качества построенного алгоритма распознавания, то вероятность ошибочной классификации (18) можно оценить как долю неверно классифицированных объектов из контрольной выборки: x x U | x . (19) U Эта оценка является несмещённой, состоятельной и эффективной. 4.2 Байесовская классификация Если все распределения объектов известны, то можно в явном виде построить классификатор, который минимизирует вероятность ошибочной классификации (18). Предполагается, что распределения векторов признаков внутри каждого класса непрерывны, то есть определены плотности вероятности f x | Ω l . Также известны априорные вероятности P Ω l появления объектов из каждого класса. Для заданного объекта x Ω можно определить риск отнесения этого объекта к классу j, как L j x 1 ij P Ωi | x , (20) i 1 где PΩl | x – вероятность того, что заданный вектор признаков относится к классу Ω l при условии, что он принял значение x, а δij – это символ Кронекера: 74 1, i j; ij 0, i j. Таким образом, εj(x) – это вероятность совершить ошибку, отнеся объект x к классу j. Очевидно, если все функции εj(x) известны, то наименее рискованно отнести данный объект x к тому классу j, для которого значение εj(x) меньше. Легко видеть, что такое решение минимизирует вероятность ошибочной классификации (18), поскольку выбирается именно тот класс, для которого вероятность ошибки классификации минимальна. Основная идея заключается в том, чтобы воспользоваться формулой Байеса, связывающей априорную вероятность и апостериорную вероятность. Из неё следует, что P Ω l f x | Ωl P Ωl | x , f x где f(x) – безусловная плотность вероятности распределения вектора признаков безотносительно его класса. Решение об отнесении объекта x к классу l следует принять, если для всех остальных классов j εl(x) ≤ εj(x), то есть L L 1 P Ω | x 1 P Ω | x , il i 1 i ij i 1 i P Ω f x | Ω P Ω f x | Ω , 1 1 f x f x L i L i il i 1 i i ij i 1 L 1 1 L 1 il P Ω i f x | Ω i 1 ij P Ω i f x | Ω i , f x i 1 f x i 1 L L 1 P Ω f x | Ω 1 P Ω f x | Ω , i 1 L il i i ij i 1 i i P Ω f x | Ω P Ω f x | Ω i 1 i i l l L P Ωi f x | Ωi P Ω j f x | Ω j , i 1 f x P Ω l f x | Ωl f x P Ω j f x | Ω j , P Ω l f x | Ωl P Ω j f x | Ω j . (21) 75 Это и есть основное правило, согласно которому работает байесовский классификатор. Его можно переписать в виде j 1; L Z : lj x P Ω j P Ωl , где Λlj(x) – это отношение правдоподобия: lj x f x | Ωl f x |Ωj . Таким образом, байесовский классификатор относит объект x к классу l, если для любого другого класса отношение правдоподобия превышает обратное отношение априорных вероятностей. В простейшем случае, если все априорные вероятности для всех классов равны друг другу, то есть i, j 1; L Z : P Ωi P Ω j , условие (21) переписывается в виде j 1; L Z : f x | Ωl f x | Ω j , иными словами объект x следует относить к тому классу, у которого условная плотность вероятности в точке x больше. С введением некоторых дополнительных предположений о независимости признаков можно получить популярный байесовский классификатор, называемый в литературе наивным байесовским классификатором (англ. Naive Bayes classifier). На самом деле, даже в описанном общем случае байесовский классификатор весьма наивен, и его наивность заключается в предположении о том, что все условные распределения признаков внутри классов известны. На практике это не так, и напрямую воспользоваться подобного рода классификатором невозможно, поскольку нет возможности проверить условие (21). Конечно, можно оценить условные распределения признаков внутри классов, воспользовавшись какими-нибудь оценками плотностей вероятности f x | Ωl . Именно здесь существенно помогает предположение о независимости признаков, которое, правда, на практике обычно не выполняется. Популярной оценкой плотности 76 вероятности является оценка Парзена. Однако существуют и другие подходы к классификации. Какими бы они ни были, в указанных предположениях именно байесовский классификатор является оптимальным в смысле минимизирования вероятности ошибочной классификации (18). 4.3 Классификация по ближайшим соседям Наиболее простой и распространённый способ классификации объектов называется методом k ближайших соседей (англ. k-nearest neighbors, k-NN). Он основан на идее отнесения объекта к тому классу, к которому относится наибольшее количество ближайших к нему объектов из обучающей выборки. Распространено мнение, что это чисто эвристический метод, хотя на самом деле под ним лежит определённая теория, позволяющая связать вероятность ошибочной классификации с помощью метода k ближайших соседей и байесовскую вероятность ошибочной классификации. Пусть имеется конечная обучающая выборка U Ω , состоящая из n объектов, для каждого из которых известен его класс Φ. Для заданного вектора признаков x Ω можно определить k ближайших к нему объектов из обучающей выборки U и определить функцию k 1 fn x , n V x, k , n (22) где V(x, k, n) – это объём m-мерного гипершара наименьшего радиуса с центром в точке x, такого что все k ближайших соседей точки x лежат внутри этого гипершара. Если 1) lim k n , n k n 0, n то функция (22) является состоятельной оценкой безусловной плотности вероятности векторов признаков. Например, подходящими зависимостями k от n являются k n ln n и k n n . Аналогичным образом оцениваются условные плотности вероятности распределения векторов признаков внутри классов. 2) lim n 77 Если обозначить множество из k ближайших соседей вектора x, лежащих в обучающей выборке U, за ηk(x), то функция f n x | Ωl k x Ωl U Ωl 1 V x, k , n является состоятельной оценкой условной плотности вероятности f x | Ωl для распределения вектора x внутри класса Ω l . Также очевидно, что состоятельными, несмещёнными и эффективными оценками априорных вероятностей P Ωl появления объекта из класса l являются p l U Ωl . n Учитывая всё это, можно переписать байесовское решающее правило (21) в виде j 1; L Z : p l f n x | Ωl p j f n x | Ω j , то есть U Ωl k x Ωl n U Ωl U Ω j k x Ω j 1 1 , V x, k , n n V x, k , n U Ωj откуда сразу же следует j 1; L Z : k x Ωl k x Ω j . (23) Таким образом, объект x следует относить к классу l, если среди k ближайших к нему соседей из обучающей выборки больше всего принадлежит именно к этому классу. Это правило было получено не эвристически: это аналог байесовского классификатора, получаемый при оценивании плотности вероятности по ближайшим соседям. В случае бинарной классификации на один из двух возможных классов целесообразно выбирать нечётные k, чтобы не допустить равенства числа соседей каждого класса. Для оценки близости между заданными объектами используется одна из метрик ρ(x, y), примеры которых приведены в табл. 3. Например, часто используется обычное евклидово расстояние (17). В простейшем случае k = 1 правило (23) переписывается в виде 78 x arg min x, y , yU то есть объект x следует относить к тому классу, к которому относится его ближайший сосед из обучающей выборки. Это решающее правило называется правилом ближайшего соседа. 4.4 Вероятность ошибки по ближайшему соседу при классификации Рассмотрим задачу бинарной классификации, то есть ситуацию, когда число классов L = 2. Пусть классификатору на вход предъявили объект x, выбранный случайным образом. Ближайшим соседом для объекта x из выборки U, содержащей n элементов, оказался объект y. Вероятность ошибочной классификации в этом случае – это вероятность того, что объекты x и y относятся к разным классам: P x y | y arg min x, y yU P Ω1 | x P Ω2 | y P Ω2 | x P Ω1 | y . Очевидно, с увеличением объёма выборки n для заданного объекта x будет находиться объект y всё ближе и ближе к нему, то есть ρ(x, y) будет стремиться к нулю. Таким образом, можно считать, что P Ωl | x P Ωl | y , откуда P Ω1 | x P Ω 2 | x P Ω 2 | x P Ω1 | x 2 P Ω1 | x P Ω 2 | x 2 P Ω1 | x 1 P Ω1 | x . (24) Без потери общности можно положить, что байесовский классификатор относит объект x ко второму классу (в противном случае аналогичные рассуждения дают тот же результат), то есть P Ω 1 | x 1 P Ω1 | x . Тогда байесовская вероятность ошибочной классификации (20) ˆ P Ω1 | x . Но с учётом (24) это означает, что 2 ˆ 1 ˆ 2 ˆ . 79 Отсюда следует важный вывод: вероятность ошибки при классификации по ближайшему соседу не более чем в два раза превышает вероятность ошибки при классификации байесовским классификатором. Учитывая, что вероятность ошибки байесовского классификатора минимальна для широкого круга классификаторов, это весьма неплохой результат. Надо признать, что здесь приводится далеко не самое строгое доказательство этого факта. Существуют другие более строгие способы доказать указанную связь ошибок классификации, но и они часто вводят массу всевозможных предположений и гипотез. К тому же утверждается лишь, что это неравенство начинает выполняться с ростом объёма выборки, и не более того. Тем не менее, на практике вероятность ошибочной классификации по ближайшему соседу зачастую и правда не превышает две вероятности ошибочной классификации байесовским классификатором. 4.5 Реализация метода k ближайших соседей в языке R В языке R для классификации по ближайшим соседям предназначена функция knn из пакета class. Она принимает обучающую и контрольную выборки и возвращает результат классификации. Сигнатура этой функции приведена ниже. knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE) train – матрица или блок данных с обучающей выборкой. test – матрица или блок данных с контрольной выборкой. cl – вектор классов объектов из обучающей выборки. k – количество соседей. l – минимальное количество соседей одного класса, необходимых для принятия решения. prob – логическое значение, обозначающее, нужно ли возвращать долю соседей наиболее популярного класса для каждого объекта. use.all – логическое значение, обозначающее, нужно ли включать в число соседей несколько объектов, имеющих одинаковое k-ое по величине расстояние до данного объекта. В листинге 14 приведён пример классификации ирисов Фишера по двум первым признакам. Этот блок данных содержится в R изначально и называется iris3. Функция rbind объединяет подматри80 цы как строки одной большой матрицы. Тип данных factor отвечает за признак, имеющий порядковый номер. Функция rep создаёт вектор из нескольких одинаковых значений. Функция unclass используется для перевода строк в их порядковые номера. Листинг 14. Пример классификации по ближайшему соседу в двумерном случае require(class) require(graphics) train <- rbind(iris3[1:25, 1:2, 1], iris3[1 1:25, 1:2, 2], iris3[1:25, 1:2, 3]) test <- rbind(iris3[26:50, 1:2, 1], iris3[26 26:50, 1:2, 2], iris3[26:50, 1:2, 3]) cl <- factor(c(rep("s", 25), rep("c", 25), , rep("v", 25))) cl.knn <- knn(train, test, cl) dev.new() plot(test, pch=unclass(cl), cex=1.5) dev.new() plot(train, pch=unclass(cl), cex=0.7) points(test, pch=unclass(cl.knn), cex=1.5) а) б) Рис. 9. Пример классификации поо ближайшему соседу в двумерном случае: исходная контрольная выборка (а)) и результат классификации (б) ( На рис. 9 приведён результат работы листинга 14. Слева показапоказ ны исходные объекты из контрольной выборки в признаковом пропр странстве из двух первых признаков. Объекты из разных классов отмечены разными геометрическими фигурами. На правом рисунке 81 большие геометрические фигуры означают, к какому классу данный объект отнёс классификатор по ближайшему соседу, а маленькие – это объекты из обучающей выборки. 4.6 Визуализация трёхмерных данных в языке R Функции для построения трёхмерных графиков реализованы во многих пакетах языка R. Для примера можно рассмотреть функцию plot3d из пакета rgl. Она принимает координаты точек в каждом из трёх пространственных измерений и изображает эти точки на графике. В полученном графическом окне график можно вращать и масштабировать. Сигнатура этой функции приведена ниже. plot3d(x, y, z, xlab, ylab, zlab, type = "p", col, size, lwd, radius, add = FALSE, aspect = !add, ...) x, y, z – векторы координат точек по каждому измерению. xlab, ylab, zlab – названия координатных осей. type – способ отображения точек на графике. Поддерживаемые значения: «p» для точек, «s» для сфер, «l» для линий, «h» для отрезков, перпендикулярных плоскости z = 0, и «n» для отсутствия графического представления. col – вектор цветов для каждой точки. size – размер изображаемых точек. lwd – толщина линий для соответствующего способа представления точек. radius – радиус сфер для соответствующего способа представления точек. add – логическое значение, означающее, добавлять ли точки на уже имеющийся график, или же создать новый. aspect – логическое значение, означающее, подбирать ли масштаб автоматически. Листинг 15. Пример визуализации трёхмерных данных на языке R require(rgl) n <- 1000 x <- sort(rnorm(n)) y <- rnorm(n) z <- rnorm(n) + atan2(x, y) plot3d(x, y, z, col=rainbow(n)) 82 Рис. 10. Пример визуализации трёхмерных данных на языке R В листинге 15 приведён пример использования функции plot3d для визуализации трёхмерных данных. Для красоты используется сортировка значений по первой координате с помощью операции sort и их раскрашивание в цвета радуги с помощью функции rainbow. К третьей координате с помощью функции atan2 прибавляется полярный угол точки (x, y) в соответствующей плоскости. Получившийся график приведён на рис. 10. 83 4.7 Задание на лабораторную работу № 4 Входные данные: n объектов, каждый из которых характеризуется тремя числовыми признаками xi i 1 , yi i 1 и zi i 1 , а также ноn n n мером класса ci i 1 . n Требуется исследовать работу алгоритма классификации объектов по ближайшему соседу. Для каждого набора данных требуется выполнить следующие задания. 1. Случайным образом разделить имеющуюся выборку примерно пополам на обучающую выборку и контрольную выборку. 2. Произвести классификацию объектов контрольной выборки, используя данные о классах объектов из обучающей выборки, с помощью алгоритма классификации по ближайшему соседу. 3. Изобразить объекты графически в трёхмерном пространстве. Для объектов разных классов и разных выборок следует использовать разные обозначения. Отдельно представить графики, на одном из которых объекты из контрольной выборки имеют свои настоящие классы, а на другом – классы, к которым их отнёс классификатор. 4. Оценить вероятность ошибочной классификации (18) по формуле (19). Все описанные задания требуется выполнить для двух наборов данных. 1. Смоделированные независимые случайные векторы (X, Y, Z), n1 из которых относятся к первому классу, а n2 – ко второму классу. Векторы, относящиеся к первому классу, распределены по гауссовскому закону с математическим ожиданием a1 и корреляционной матрицей R1, а векторы, относящиеся ко второму классу, – по гауссовскому закону с математическим ожиданием a2 и корреляционной матрицей R2. 2. Реальные статистические данные из заданного набора (выдаются преподавателем). Отчёт кроме прочих обязательных элементов должен включать: 1) изображения данных в виде точек на плоскости, причём данные из разных классов и из разных выборок должны изображаться отличающимися друг от друга; 84 2) изображения результатов классификации данных в виде точек на плоскости, причём данные из разных классов и из разных выборок должны изображаться отличающимися друг от друга; 3) значения оценок вероятности ошибочной классификации для каждого из случаев. Варианты заданий на лабораторную работу В табл. 5 для каждого варианта задания приведены значения количеств объектов для каждого класса (n1 и n2), значения векторов математических ожиданий для каждого класса (a1 и a2) и корреляционные матрицы для каждого класса (R1 и R2) для моделируемой выборки из гауссовских случайных векторов. Таблица 5. Варианты задания для моделирования данных в лабораторной работе № 4 № 0 1 2 3 4 n1 a1 R1 100 0 0 0 1 0 0 0 1 0 0 0 1 100 2 2 2 2 1 0, 2 1 4 1 0, 2 1 2 1000 2 0 2 1 2 1 1 4 1, 4 1 1, 4 2 100 2 2 2 2 0, 2 0, 4 0, 2 4 0, 4 0, 4 0, 4 2 1000 0 2 2 2 1 1 1 4 1 1 1 2 n2 a2 R2 100 2 2 2 1 0 0 0 1 0 0 0 1 200 4 4 4 1 0, 2 4 2 0, 2 1 0, 2 0, 2 2 2000 4 6 8 1 2 1 1 2 1, 4 1 1, 4 4 50 4 8 8 4 0, 2 0,3 0, 2 2 0, 4 0,3 0, 4 2 500 4 2 2 2 1 1 1 3 1 1 1 3 85 Продолжение табл. 6 5 6 7 8 9 10 11 12 86 100 0 2 2 1 0, 5 2 1 4 0, 5 0, 5 0,5 2 1000 2 2 0 2 1 0,1 1 4 1 0,1 1 2 100 2 0 2 4 1 1 1 2 1 1 1 2 1000 3 1 3 4 1 1 1 2 1 1 1 2 100 1 1 1 1 4 1 1 2 0,1 1 0,1 2 1000 2 0 2 3 1 1 1 3 1 1 1 2 100 3 3 3 2 1 0, 2 1 4 1 0, 2 1 2 1000 3 3 5 2 0, 2 0, 4 0, 2 4 0, 4 0, 4 0, 4 2 1000 4 6 2 4 1 1 1 2 1 1 1 2 100 4 2 4 2 0,1 1 0,1 2 1 1 1 4 200 6 4 6 2 1 1 1 2 1 1 1 4 2000 1 4 1 4 0,1 1 0,1 2 0,1 1 0,1 2 50 3 3 3 4 1 1 1 2 0,1 1 0,1 2 500 2 4 2 2 1 1 1 2 1 1 1 4 1000 1 1 1 1 2 1 1 4 1, 4 1 1, 4 2 100 1 1 9 2 1 1 1 4 1 1 1 2 Продолжение табл. 7 13 14 15 16 17 18 19 20 100 3 3 7 1 0, 5 2 1 4 0, 5 0, 5 0,5 2 1000 3 5 3 4 1 1 1 2 1 1 1 2 100 3 5 5 1 4 1 1 2 0,1 1 0,1 2 1000 3 5 7 1 0, 2 4 2 0, 2 1 0, 2 0, 2 2 100 3 7 3 4 0, 2 0, 3 0, 2 2 0, 4 0,3 0, 4 2 1000 3 7 5 4 1 1 1 2 1 1 1 2 100 3 7 7 2 1 1 1 2 1 1 1 4 1000 5 3 3 4 1 1 1 2 0,1 1 0,1 2 200 1 7 3 2 1 0,1 1 4 1 0,1 1 2 2000 1 9 7 4 1 1 1 2 1 1 1 2 50 7 1 1 3 1 1 1 3 1 1 1 2 500 7 1 11 1 2 1 1 2 1, 4 1 1, 4 4 1000 7 11 1 2 1 1 1 3 1 1 1 3 100 7 11 9 2 0,1 1 0,1 2 1 1 1 4 200 1 3 3 4 0,1 1 0,1 2 0,1 1 0,1 2 2000 1 1 7 2 1 1 1 2 1 1 1 4 87 Продолжение табл. 8 21 22 23 24 25 26 27 88 100 5 3 5 2 1 0, 2 1 4 1 0, 2 1 2 1000 5 3 7 1 2 1 1 4 1, 4 1 1, 4 2 100 5 5 3 2 0, 2 0, 4 0, 2 4 0, 4 0, 4 0, 4 2 1000 5 5 5 2 1 1 1 4 1 1 1 2 100 5 5 7 1 0, 5 2 1 4 0, 5 0, 5 0,5 2 1000 5 7 3 2 1 0,1 1 4 1 0,1 1 2 100 5 7 5 4 1 1 1 2 1 1 1 2 50 1 7 1 1 2 1 1 2 1, 4 1 1, 4 4 500 1 7 11 1 0, 2 4 2 0, 2 1 0, 2 0, 2 2 1000 9 1 1 2 1 1 1 3 1 1 1 3 100 9 1 9 4 0, 2 0, 3 0, 2 2 0, 4 0,3 0, 4 2 200 9 9 3 2 0,1 1 0,1 2 1 1 1 4 2000 9 11 7 4 1 1 1 2 1 1 1 2 50 1 3 1 4 0,1 1 0,1 2 0,1 1 0,1 2 Окончание табл. 9 28 29 30 1000 5 7 7 4 1 1 1 2 1 1 1 2 100 7 3 3 1 4 1 1 2 0,1 1 0,1 2 1000 7 7 7 3 1 1 1 3 1 1 1 2 500 1 3 11 2 1 1 1 2 1 1 1 4 1000 3 7 7 2 1 1 1 2 1 1 1 4 100 10 4 10 4 1 1 1 2 0,1 1 0,1 2 Варианты реальных наборов данных 0. Ирисы Фишера Название файла: 00-iris.txt Ссылка: https://archive.ics.uci.edu/ml/datasets/Iris Первый признак: Sepal.Length (столбец № 2) Второй признак: Sepal.Width (столбец № 3) Третий признак: Petal.Length (столбец № 4) Класс: Species (столбец № 6) 1. Soybean Название файла: 01-soybean.txt Первый признак: protein (столбец № 10) Второй признак: oil (столбец № 11) Третий признак: size (столбец № 9) Класс: loc (столбец № 3) 2. Данные о новорожденных Название файла: 02-birth.txt Первый признак: Head (столбец № 6) Второй признак: Chest (столбец № 7) Третий признак: Length (столбец № 5) Класс: Sex (столбец № 2) 89 3. Потребление пищи в Дании в 1985 году Название файла: 03-vitamina.txt Первый признак: Avit (столбец № 9) Второй признак: Cvit (столбец № 20) Третий признак: E_bmr (столбец № 7) Класс: sex (столбец № 4) 4. Physical Growth of California Boys and Girls Название файла: 04-physical-growth.txt Первый признак: WT2 (столбец № 3) Второй признак: WT9 (столбец № 5) Третий признак: WT18 (столбец № 9) Класс: Sex (столбец № 2) 5. Успеваемость студентов Название файла: 05-trp-grades.txt Первый признак: L.att (столбец № 2) Второй признак: P.att (столбец № 3) Третий признак: Tst (столбец № 6) Класс: Exam (столбец № 8) 6. Wine Название файла: 06-wine.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Wine Первый признак: alcohol (столбец № 2) Второй признак: color-intensity (столбец № 11) Третий признак: optical-density (столбец № 13) Класс: cultivar (столбец № 1) 7. Forest Fires Название файла: 07-forest-fires.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Forest+Fires Первый признак: ISI (столбец № 8) Второй признак: wind (столбец № 11) Третий признак: temp (столбец № 9) Класс: month (столбец № 3) 90 8. Wisconsin Prognostic Breast Cancer Название файла: 08-wpbc.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Diagnostic) Первый признак: perimeter (столбец № 6) Второй признак: area (столбец № 7) Третий признак: fractal dimension (столбец № 13) Класс: Outcome (столбец № 2) 9. Abalone Data Название файла: 09-abalone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Abalone Первый признак: Length (столбец № 2) Второй признак: Diameter (столбец № 3) Третий признак: Height (столбец № 4) Класс: Sex (столбец № 1) 10. 1985 Auto Imports Database Название файла: 10-automobile.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Automobile Первый признак: length (столбец № 11) Второй признак: width (столбец № 12) Третий признак: height (столбец № 13) Класс: num-of-doors (столбец № 6) 11. Glass Identification Database Название файла: 11-glass.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Glass+Identification Первый признак: RI (столбец № 2) Второй признак: Al (столбец № 5) Третий признак: Fe (столбец № 10) Класс: Type of glass (столбец № 11) 12. Echocardiogram Data Название файла: 12-echocardiogram.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Echocardiogram Первый признак: fractional-shortening (столбец № 5) Второй признак: wall-motion-score (столбец № 8) Третий признак: lvdd (столбец № 7) Класс: still-alive (столбец № 2) 91 13. Horse Colic Database Название файла: 13-horse-colic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Horse+Colic Первый признак: rectal temperature (столбец № 4) Второй признак: total protein (столбец № 20) Третий признак: packed cell volume (столбец № 19) Класс: outcome (столбец № 23) 14. Pima Indians Diabetes Database Название файла: 14-pima-indians-diabetes.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes Первый признак: Body mass index (столбец № 6) Второй признак: Diabetes pedigree function (столбец № 7) Третий признак: Age (столбец № 8) Класс: Class variable (столбец № 9) 15. Auto-Mpg Data Название файла: 15-auto-mpg.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Auto+MPG Первый признак: mpg (столбец № 1) Второй признак: horsepower (столбец № 4) Третий признак: acceleration (столбец № 6) Класс: cylinders (столбец № 2) 16. Boston Housing Data Название файла: 16-housing.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Housing Первый признак: CRIM (столбец № 1) Второй признак: INDUS (столбец № 3) Третий признак: NOX (столбец № 5) Класс: CHAS (столбец № 4) 17. Blocks Classification Название файла: 17-page-blocks.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Page+Blocks+Classification Первый признак: eccen (столбец № 4) Второй признак: mean_tr (столбец № 7) Третий признак: p_black (столбец № 5) Класс: class (столбец № 11) 92 18. Cylinder Bands Название файла: 18-bands.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Cylinder+Bands Первый признак: roughness (столбец № 26) Второй признак: press speed (столбец № 29) Третий признак: ink temperature (столбец № 24) Класс: band type (столбец № 40) 19. Ecoli Data Set Название файла: 19-ecoli.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ecoli Первый признак: mcg (столбец № 2) Второй признак: gvh (столбец № 3) Третий признак: lip (столбец № 4) Класс: localization site (столбец № 9) 20. Yeast Data Set Название файла: 20-yeast.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Yeast Первый признак: mcg (столбец № 2) Второй признак: gvh (столбец № 3) Третий признак: alm (столбец № 4) Класс: localization site (столбец № 10) 21. Cardiac Arrhythmia Database Название файла: 21-arrhythmia.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Arrhythmia Первый признак: Q wave of channel DI (столбец № 161) Второй признак: R wave of channel DI (столбец № 162) Третий признак: S wave of channel DI (столбец № 163) Класс: Sex (столбец № 2) 22. Spambase Data Set Название файла: 22-spambase.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Spambase Первый признак: capital_run_length_average (столбец № 55) Второй признак: capital_run_length_longest (столбец № 56) Третий признак: capital_run_length_total (столбец № 57) Класс: spam (столбец № 58) 93 23. Coil 1999 Competition Data Data Set Название файла: 23-coil.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Coil+1999+Competition+Data Первый признак: столбец № 4 Второй признак: столбец № 5 Третий признак: столбец № 6 Класс: season (столбец № 1) 24. MAGIC gamma telescope data 2004 Название файла: 24-magic.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/MAGIC+Gamma+Telescope Первый признак: fLength (столбец № 1) Второй признак: fWidth (столбец № 2) Третий признак: fSize (столбец № 3) Класс: class (столбец № 11) 25. Ozone Level Detection Data Set Название файла: 25-ozone.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Ozone+Level+Detection Первый признак: WSR_AV (столбец № 27) Второй признак: T_AV (столбец № 53) Третий признак: SLP (столбец № 71) Класс: class (столбец № 74) 26. Parkinsons Disease Data Set Название файла: 26-parkinsons.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Parkinsons Первый признак: MDVP:Fhi(Hz) (столбец № 3) Второй признак: MDVP:Flo(Hz) (столбец № 4) Третий признак: DFA (столбец № 20) Класс: status (столбец № 18) 27. LIBRAS Movement Database Название файла: 27-movement-libras.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Libras+Movement Первый признак: 1 coordinate abcissa (столбец № 1) Второй признак: 2 coordinate abcissa (столбец № 3) Третий признак: 3 coordinate abcissa (столбец № 5) Класс: class (столбец № 91) 94 28. Breast Tissue Data Set Название файла: 28-breast-tissue.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Breast+Tissue Первый признак: AREA (столбец № 7) Второй признак: MAX IP (столбец № 9) Третий признак: P (столбец № 11) Класс: Class (столбец № 2) 29. Steel Plates Faults Data Set Название файла: 29-faults.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/Steel+Plates+Faults Первый признак: Edges_Index (столбец № 15) Второй признак: Empty_Index (столбец № 16) Третий признак: Square_Index (столбец № 17) Класс: Pastry (столбец № 28) 30. Banknote Authentication Data Set Название файла: 30-banknote.txt Ссылка: http://archive.ics.uci.edu/ml/datasets/banknote+authentication Первый признак: skewness (столбец № 2) Второй признак: curtosis (столбец № 3) Третий признак: variance (столбец № 1) Класс: class (столбец № 5) Контрольные вопросы 1. В чём состоит задача классификации? 2. Как вероятность ошибочной классификации оценивается по контрольной выборке? Каким свойствам отвечает её оценка? 3. Какую функцию минимизирует байесовский классификатор? 4. Как записывается формула Байеса? Что такое априорная и апостериорная вероятности и где они фигурируют в этой формуле? 95 5. В чём достоинства и недостатки байесовского классификатора? Почему он редко используется на практике? 6. Как работает байесовский классификатор для случая двух классов и одинаковых априорных вероятностей появления объектов? 7. Как работает классификация методом k ближайших соседей? 8. Как плотность вероятности оценивается по k ближайшим соседям? 9. Из каких соображений следует выбирать число соседей при классификации по k ближайшим соседям? 10. Какова связь между вероятностью ошибочной классификации по ближайшему соседу и вероятностью ошибочной классификации с помощью байесовского классификатора? 4.8 Пример классификации по ближайшему соседу В листинге 16 приведён пример выполнения нулевого варианта настоящей лабораторной работы на языке R. Для этого используется функция knn, описанная выше. Она возвращает вектор из классов для каждого объекта контрольной выборки. Для создания нового графического окна, подходящего для функции plot3d, используется функция rgl.open. Функции nrow и ncol служат для получения соответственно числа строк и столбцов матрицы. Функция sample используется для перемешивания вектора из n первых натуральных чисел и генерации случайной перестановки. Для целочисленного деления в R существует операция «%/%». В качестве индекса элемента матрицы может выступать целый вектор индексов, тогда получится матрица, содержащая строки с соответствующими номерами. Функция unclass нужна, чтобы перевести вектор строк в вектор чисел, являющихся их порядковыми номерами. 96 Листинг 16. Пример классификации по ближайшему соседу в R require(class) require(MASS) require(rgl) plot_points <- function(train, test, clazz.train, clazz.test) { rgl.open() plot3d(train[, 1], train[, 2], train[, 3], col=clazz.train, type='p', size=5, add=FALSE) plot3d(test[, 1], test[, 2], test[, 3], col=clazz.test, type='s', size=1, add=TRUE) } analyse_knn <- function(dat, clazz) { n <- nrow(dat) rnd.num <- sample(1 : n) train.num <- rnd.num[1 : (n %/% 2)] test.num <- rnd.num[(n %/% 2 + 1) : n] train <- dat[train.num,] test <- dat[test.num,] clazz.train <- clazz[train.num] clazz.test <- clazz[test.num] clazz.knn <- knn(train, test, clazz.train) print(sum(clazz.test != clazz.knn) / n) plot_points(train, test, clazz.train, clazz.test) plot_points(train, test, clazz.train, clazz.knn) } dat <- read.table("00-iris.txt") analyse_knn(cbind(dat$Sepal.Length, dat$Sepal.Width, dat$Petal.Length), unclass(dat$Species)) n1 <- 100 a1 <- c(0, 0, 0) r1 <- cbind(c(1, 0, 0), c(0, 1, 0), c(0, 0, 1)) n2 <- 100 a2 <- c(2, 2, 2) r2 <- cbind(c(1, 0, 0), c(0, 1, 0), c(0, 0, 1)) dat <- rbind(mvrnorm(n1, a1, r1), mvrnorm(n2, a2, r2)) analyse_knn(dat, c(rep(1, n1), rep(2, n2))) 97 Заключение Стремительность развития методов и технологий анализа данных в современной научной и социальной среде сложно переоценить. Фраза «Кто владеет информацией, тот владеет миром», брошенная ещё в XIX веке английским банкиром Натаном Ротшильдом, приводится теперь во многих научно-популярных изданиях. В 2007 году компанией Яндекс была основана Школа анализа данных, ставшая на сегодняшний день популярным учебным заведением среди выпускников многих престижных вузов. В настоящем издании предлагается ряд несложных заданий для лабораторных работ по анализу данных. Самостоятельное выполнение этих заданий способно помочь в освоении базовых навыков извлечения полезной информации из наборов данных разнообразной природы. Несмотря на то, что все примеры приведены на языке R, предполагается, что задания достаточно просты, чтобы их можно было выполнить на любом языке программирования, даже если в нём нет стандартных реализаций описанных методов и алгоритмов. Конечно, чтобы стать специалистом в области интеллектуального анализа данных, требуется значительно больше умений, чем можно почерпнуть из этих лабораторных работ. Речь идёт и о знании передовых теоретических открытиях в этой области, и о большом объёме практики. Только через многолетний опыт решения задач анализа данных можно выяснить для себя множество всевозможных нюансов и тонкостей, характерных для каждой конкретной прикладной задачи. Тем не менее, настоящее издание ставит своей целью обеспечить базу и подогреть интерес для дальнейшего профессионального развития в этой области знаний. 98 Список литературы 1. Agresti, A. An Introduction to Categorical Data Analysis / A. Agresti. – Wiley, 2007. – 400 p. 2. Cox, T. An Introduction to Multivariate Analysis / T. Cox. – Wiley, 2009. – 242 p. 3. Forgy, E. W. Cluster analysis of multivariate data: efficiency vs interpretability of classifications / E. W. Forgy // Biometrics. – 1965. – Vol. 21. – P. 768–769. 4. Gnanadesikan, R. Methods for Statistical Data Analysis of Multivariate Observations / R. Gnanadesikan. – Wiley, 1997. – 384 p. 5. Hair J. F. Multivariate Data Analysis / J. F. Hair Jr, W. C. Black, B. J. Babin. – Pearson Printice Hall, 2006. – 816 p. 6. Hartigan, J. A. A K-means clustering algorithm / J. A. Hartigan, M. A. Wong // Applied Statistics. – 1979. – Vol. 28. – P. 100–108. 7. Lloyd, S. P. Least squares quantization in PCM / S. P. Lloyd // IEEE Transactions on Information Theory. – 1982. – Vol. 28. – P. 128– 137. 8. MacQueen, J. Some methods for classification and analysis of multivariate observations / J. MacQueen // Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability. – 1967. – Vol. 1. – P. 281–297. 9. Mirkin, B. G. Core Concepts in Data Analysis: Summarization, Correlation and Visualization / B. G. Mirkin. – Springer, 2011. – 410 p. 10. Tabachnik, B. G. Using Multivariate Statistics / B. G. Tabachnick, L. S. Fidell. – Pearson, 2012. – 1024 p. 11. Weisberg, S. Applied Linear Regression / S. Weisberg. – New York: Wiley, 2013. – 384 p. 12. Айвазян, С. А. Прикладная статистика: Классификация и снижение размерности / С. А. Айвазян, В. М. Бухштабер, 99 И. С. Енюков, Л. Д. Мешалкин. – М.: Финансы и статистика, 1989. – 607 с. 13. Бендат, Дж. Применения корреляционного и спектрального анализа / Дж. Бендат, А. Пирсол. – М.: Мир, 1983. – 312 с. 14. Буховец, А. Г. Статистический анализ данных в системе R: учебное пособие / А. Г. Буховец, П. В. Москалев, В. П. Богатова, Т. Я. Бирючинская. – Воронеж: ВГАУ, 2010. – 124 с. 15. Вапник, В. Н. Восстановление зависимостей по эмпирическим данным / В. Н. Вапник. – М.: Наука, 1979. – 448 с. 16. Вапник, В. Н. Теория распознавания образов (статистические проблемы обучения) / В. Н. Вапник, А. Я. Червоненкис. – М.: Наука, 1974. – 416 с. 17. Гайдышев, И. Анализ и обработка данных: специальный справочник / И. Гайдышев. – С.-Пб.: Питер, 2001. – 752 с. 18. Дубров, А. М. Многомерные статистические методы для экономистов и менеджеров: Учебник для вузов / А. М. Дубров, В. С. Мхитарян, Л. И. Трошин. – М.: Финансы и статистика, 2000. – 350 с. 19. Ермаков, С. М. Математическая теория оптимального эксперимента / С. М. Ермаков, А. А. Жиглявский. – М.: Наука, 1987. – 320 с. 20. Лагутин, М. Б. Наглядная математическая статистика / М. Б. Лагутин. – М.: Бином. Лаборатория знаний, 2009. – 472 с. 21. Малов, С. В. Регрессионный анализ. Теоретические основы и практические рекомендации / С. В. Малов. – С.-Пб.: Издательство СПбГУ, 2013. – 276 с. 22. Мандель, И. Д. Кластерный анализ / М.: Финансы и статистика, 1988. – 176 с. И. Д. Мандель. – 23. Такахаси, С. Занимательная статистика. С. Такахаси. – М.: Додэка-XXI, 2010. – 224 с. 100 Манга / 24. Ту, Дж. Принципы распознавания образов: пер. с англ. / Дж. Ту, Р. Гонсалес. – М.: Мир, 1978. – 411 с. 25. Фукунага, К. Введение в статистическую теорию распознавания образов: пер. с англ. / К. Фукунага. – М.: Наука, 1979. – 368 с. 26. Шипунов, А. Б. Наглядная статистика. Используем R! / А. Б. Шипунов, Е. М. Балдин, П. А. Волкова, А. И. Коробейников, С. А. Назарова, С. В. Петров, В. Г. Суфиянов. – М.: ДМК Пресс, 2014. – 298 с. 101 Учебное издание Андрей Викторович Гайдель, Александр Григорьевич Храмов ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО КУРСУ «ИНТЕЛЛЕКТУАЛЬНЫЙ АНАЛИЗ ДАННЫХ» Практикум Редактор И.И. Спиридонова Компьютерная верстка И.И. Спиридоновой Подписано в печать 22.08.2019. Формат 60×84 1/16. Бумага офсетная. Печ. л. 6,5. Тираж 25 экз. Заказ . Арт. – 12(Р2П)/2019. ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САМАРСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА» (САМАРСКИЙ УНИВЕРСИТЕТ) 443086, САМАРА, МОСКОВСКОЕ ШОССЕ, 34. Изд-во Самарского университета. 443086, Самара, Московское шоссе, 34. 102 103 104