ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 201
Скачиваний: 8
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
73 ный», 1 – «зелёный», 2 – «синий». Или «зима» – «январь», «весна» –
«апрель», «лето» – «июль», «осень» - «октябрь». Для каждого значения исходного набора данных ищется соответствие среди исходных значе- ний таблицы подстановки. Если соответствие найдено, то значение меняется на соответствующее выходное значение из таблицы подста- новки. Если значение не найдено в таблице, оно может быть либо за- менено значением, указанным для замены «по умолчанию», либо оставлено без изменений (если такое значение не указано). Кроме того, можно указать значения, которые нужно вставить вместо пустых яче- ек.
Описание программного обеспечения
Данная лабораторная работа должна выполняться при помощи
ПО Deductor Academic 5.3.
Домашнее задание студентам для подготовки к выполнения лабо- раторной работы
Изучить по лекциям и учебной литературе особенности выявле- ния дубликатов и противоречий.
Задание №1. Выявление дубликатов и противоречий
Пусть есть следующая таблица
Табл.12
Поле 1
Поле 2
Поле 3
Поле 4 01.01.2014 2
1000 1500 21.05.2014 3
1000 1500 21.05.2014 3
700 1500 21.05.2014 3
700 1500 01.09.2014 4
1200 1700 01.09.2014 4
1200 1700 1. Скопируйте её в txt-файл.
2. Импортируйте данные из файла в Deductor.
74 3. При помощи обработчика «Настройка набора данных», изме- ните названия полей на более информативные (проявите фан- тазию). Измените тип «Поля 2» на строковый.
4. Отсортируйте данные по убыванию (первый столбец).
5. Выполните преобразование даты. Добавьте столбец «Дата
(Год+Месяц)» в строковом формате.
6. Замените значения второго столбца на какие-либо другие при помощи обработчика «Замена данных».
7. Проведите поиск дубликатов и противоречий.
8. Сделайте скриншот полученных результатов.
Содержание отчёта:
1. Титульный лист.
2. Цель лабораторной работы.
3. Задание №1: Результаты выполнения пунктов 3-8.
Контрольные вопросы
1. Для чего используется настройка набора данных?
2. Для чего используется сортировка?
3. Для чего используется обработчик «Дата и время»?
4. Для чего используется замена данных?
5. Что такое дубликаты и противоречия?
Список литературы
1. Сайт basegroup.ru.
2. Руководство пользователя ПО Deductor Academic.
3. Описание демопримеров ПО Deductor Academic.
75
Лабораторная работа №9. Выработка рекомендаций
Цель работы: Ознакомиться с методами искусственного интеллекта, используемыми для формирования рекомендаций
Введение
Формирование рекомендаций на основе предпочтений других людей используется в различных ситуациях: рекомендование товаров на сайте электронной торговли, указание интересных сайтов или по- мощь в поиске нужной музыки и фильмов.
Информацию о предпочтениях можно собирать по-разному. Ино- гда данными являются купленные посетителем товары, а мнения об этих товарах представляются в виде голосования «да/нет» или оценки по пятибалльной шкале.
Коллаборативная фильтрация
С нетехнологичным способом получить рекомендацию о товаре, фильме или развлекательном сайте вы знакомы. Достаточно спросить у друзей. Знаете вы и о том, что у некоторых ваших друзей вкус луч- ше, чем у других; вы имели возможность убедиться в этом, поскольку не раз оказывалось, что им нравится то же, что и вам. Но по мере уве- личения количества предложений становится все менее практично ос- новывать решение на опросе небольшой группы людей, поскольку они могут просто не знать обо всех имеющихся вариантах. Тут-то и прихо- дит на помощь то, что принято называть коллаборативной фильтраци- ей.
Обычно алгоритм коллаборативной фильтрации работает следу- ющим образом: просматривает большую группу людей и отыскивает в ней меньшую группу с такими же вкусами, как у вас. Он смотрит, ка- кие ещё вещи им нравятся, объединяет предпочтения и создаёт ранжи- рованный список предложений. Есть несколько способов решить, ка- кие люди похожи, и объединить их предпочтения в список.
Сначала нужно представить информацию о предпочтениях лю- дей. В данной работе для этого будет использоваться вложенный сло- варь. Он удобен для экспериментов с алгоритмами и иллюстрации их возможностей. Большой объём информации, конечно, удобнее хранить в базе данных.
Собрав данные о том, что нравится людям, нужно определить схожесть их вкусов. Для этого каждый человек сравнивается со всеми
76 другими и вычисляется коэффициент (или оценка) правдоподобия. Для этого можно использовать разные способы. В данной лабораторной работе речь пойдёт о двух из них: евклидовом расстоянии и коэффи- циенте корреляции Пирсона.
Один из самых простых способов вычисления оценки подобия – это евклидово расстояние. В этом случае предметы, которые люди оценивали сообща, представляются в виде координатных осей. Теперь в этой системе координат можно расположить точки, соответствую- щие людям, и посмотреть, насколько они оказались близки (рис)
На этом рисунке показаны люди, представленные точками в про- странстве предпочтений. Toby имеет координату 4,5 по оси Snakes и координату 1,0 по оси Dupree. Чем ближе два человека в пространстве предпочтений, тем более схожи их предпочтения. Поскольку эта диа- грамма двумерная, то одновременно можно смотреть только на два показателя, но принцип остаётся тем же самым и для большего числа показателей.
Рис.31. Люди в пространстве предпочтений
Коэффициент корреляции Пирсона
Чуть более сложный способ определить степень схожести интере- сов людей даёт коэффициент корреляции Пирсона. Коэффициент кор- реляции – это мера того, насколько хорошо два набора данных ложат-
77 ся на прямую. Формула сложнее, чем для вычисления евклидова рас- стояния, но она даёт лучшие результаты, когда данные плохо нормали- зованы, например, если некоторый критик устойчиво выставляет фильмам более низкие оценки, чем в среднем.
Для визуализации этого метода можно нанести на диаграмму оценки, выставленные двумя критиками, как показано на рис. . Mick
LaSalle оценил фильм «Superman» на 3, а Gene Seymour – на 5, поэтому мы наносим точку (3,5).
Рис. 32. Сравнение двух кинокритиков на точечной диаграмме
На диаграмме также изображена прямая линия. Она называется линией наилучшего приближения, поскольку проходит настолько близко ко всем точкам на диаграмме, насколько возможно. Если бы оба критика выставили всем фильмам одинаковые оценки, то эта ли- ния оказалась бы диагональной и прошла бы через все точки. В этом случае получилась бы идеальная корреляция с коэффициентом 1. Но в нашем случае критики разошлись в оценках, поэтому коэффициент корреляции равен 0,4. На рис. показан пример с гораздо более высо- ким коэффициентом корреляции 0,75.
78
Рис. 33. Два критика с высоким коэффициентом корреляции
У коэффициента корреляции Пирсона есть одно интересное свой- ство, которое можно наблюдать на рисунке – он корректирует обесце- нивание оценок.
Видно, что Jack Matthews систематически выставляет более высо- кие оценки, чем Lisa Rose, но линия всё равно проходит близко к точ- кам, поскольку их предпочтения схожи. Если один критик склонен выставлять более высокие оценки, чем другой, то идеальная корреля- ция всё равно возможна при условии, что разница в оценках постоян- на. Метод евклидова расстояния в этом случае выдал бы результат, что критики не похожи, поскольку один всегда оказывается строже друго- го, несмотря на то, что их вкусы, по существу, очень сходны. В зави- симости от конкретного приложения такое поведение может вас устраивать или нет.
Программа для вычисления коэффициента корреляции Пирсона сначала находит фильмы, оценённые обоими критиками, и вычисляет сумму и сумму квадратов выставленных ими оценок, а также сумму произведений оценок. На последнем этапе (строки 65 – 69) найденные значения используются для вычисления коэффициента корреляции. В отличие от евклидовой метрики, эта формула интуитивно не так оче- видна.
79
Эта функция возвращает значение от -1 до 1. Значение 1 означает, что два человека выставили каждому предмету в точности одинаковые оценки. В отличие от евклидовой метрики, масштабировать возвра- щённое значение для приведения к нужному диапазону не требуется.
Описание программного обеспечения
Данная лабораторная работа должна выполняться при помощи
Python 2.7.
Домашнее задание студентам для подготовки к выполнения лабо- раторной работы
Изучить по учебной литературе особенности работы с Python.
Задание №1. Использование оценки по евклидову расстоянию для определения подобия между парами критиков.
1. Скопируйте файл recommendations.py в какую-нибудь новую папку.
2. Откройте его в Notepad++. Изучите его структуру (до строки
39).
Структура файла recommendations.py (до строки 39):
Строки 3–19 – вложенный словарь. Он содержит имена критиков и перечень оценок, которые они выставили соответствующим фильмам.
Строки 22-38 – функция оценки подобия по евклидову расстоянию.
3. Найти оценку подобия между следующими парами критиков:
Lisa Rose и Gene Seymour, Michael Phillips и Claudia Puig, Mick
LaSalle и Jack Matthews, Lisa Rose и Jack Matthews, Michael
Phillips и Mick LaSalle.
Нахождение оценки подобия:
А) Запустите IDLE (Python GUI). Откройте в нём recommendations.py
(File -> Open)
Б) Откроется новое окно с текстом программного кода. Запустите файл на выполнение (Run -> Run Module или нажмите F5).
В) В появившемся окне введите: import recommendations
80 нажмите «Enter» recommendations.sim_distance(recommendations.critics,'X','Y'), где X – имя первого критика, а Y – второго. Нажмите «Enter». Скопируйте в отчёт полученное значение оценки. Повторите процедуру необходимое количество раз.
4. Сделайте выводы относительно полученных результатов.
Задание №2. Использование оценки по евклидову расстоянию для определения подобия между парами критиков (другие данные).
1. Сделайте копию файла recommendations.py. Назовите её recommendations1.py.
2. Откройте его в Notepad++. Удалите строки 3-19. Создайте свой вложенный словарь (по образу словаря из задания 1).
В качестве критиков могут выступать, например, Ваши друзья. Фильмы – на Ваше усмотрение. Формат оценок – как в recommendations.py. Язык – английский (транслит).
3. Найдите оценку подобия между 5 парами критиков.
4. Сделайте выводы относительно полученных результатов.
Задание №3. Определите степень схожести интересов людей при помощи коэффициента корреляции
Пирсона
(для файла recommendations.py)
Описание структуры файла recommendations.py.
Строки 41 – 71 – возвращает коэффициент корреляции Пирсона:
# Возвращает коэффициент корреляции Пирсона между p1 и p2 def sim_pearson(prefs,p1,p2):
# Получить список предметов, оценённых обоими si={} for item in prefs[p1]: if item in prefs[p2]: si[item]=1
# Найти число элементов n=len(si)
81
# Если нет ни одной общей оценки, вернуть 0 if n==0: return 0
# Вычислить сумму всех предпочтений sum1=sum([prefs[p1][it] for it in si]) sum2=sum([prefs[p2][it] for it in si])
# Вычислить сумму квадратов sum1Sq=sum([pow(prefs[p1][it],2) for it in si]) sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
# Вычислить сумму произведений pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
# Вычислить коэффициент Пирсона num=pSum-(sum1*sum2/n) den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n)) if den==0: return 0 r=num/den return r
1. Определите степень схожести интересов пар критиков (взять из задания №1).
2. Запустите IDLE (Python GUI). Откройте в нём recommenda- tions.py (File -> Open).
3. Откроется новое окно с текстом программного кода. Запусти- те файл на выполнение (Run -> Run Module или нажмите F5).
4. В появившемся окне введите: import recommendations нажмите «Enter» print recommendations.sim_pearson(recommendations.critics, 'Li- sa Rose','Gene Seymour').
5. Повторите процедуру необходимое количество раз.
6. Сделайте выводы.
Задание №4. Определите степень схожести интересов людей при помощи коэффициента корреляции Пирсона (другие данные)
82
Определите степень схожести интересов людей при помощи ко- эффициента корреляции Пирсона (для файла recommendations1.py).
1. Определите степень схожести для Ваших данных (аналогично заданию №3).
2. Сделайте выводы.
Задание №5. Ранжирование критиков
Имея функции для сравнения двух людей, можно написать функ- цию, которая будет вычислять оценку подобия всех имеющихся людей с данным человеком и искать наилучшее соответствие. Допустим, нас интересуют кинокритики с таким же вкусом, как у Lisa Rose. За реали- зацию этой возможности в recommendations.py отвечает следующий фрагмент программного кода:
# Возвращает список наилучших соответствий для человека из слова-
ря prefs.
# Количество результатов в списке и функция подобия – необязатель-
ные
# параметры.
def topMatches(prefs,person,n=5,similarity=sim_pearson): scores=[(similarity(prefs,person,other),other) for other in prefs if other!=person]
# Отсортировать список по убыванию оценок
scores.sort( ) scores.reverse( ) return scores[0:n]
Эта функция сравнивает выбранного критика со всеми остальны- ми хранящимися в словаре пользователями с помощью одной из ранее определённых метрик, применяя для этого трансформацию списка (list comprehension). И возвращает первые n элементов отсортированного списка результатов.
Если вызвать её, передав соответствующее имя, то она вернёт список кинокритиков и оценку подобия выбранного человека для каж- дого из них.
83 1. Выполните ранжирование критиков (для всех, имеющихся в словаре).
2. Запустите IDLE (Python GUI). Откройте в нём recommenda- tions.py (File -> Open).
3. Откроется новое окно с текстом программного кода. Запусти- те файл на выполнение (Run -> Run Module или нажмите F5).
4. В появившемся окне введите: import recommendations нажмите «Enter» recommendations.topMatches(recommendations.critics,'X',n=3), где Х – имя критика.
5. Скопируйте результаты в отчёт.
6. Выполните вышеуказанную процедуру необходимое количе- ство раз.
7. Сделайте выводы.
Задание №6. Ранжирование критиков (другие данные)
1. Выполните ранжирование критиков для Ваших данных (ана- логично заданию №5).
2. Сделайте выводы.
Задание №7. Рекомендование предметов
Найти подходящего критика – это, конечно, неплохо, но в дей- ствительности-то хочется получить рекомендацию, какой фильм по- смотреть. И прямо сейчас. Можно было бы посмотреть, какие фильмы понравились человеку с похожими вкусами, и выбрать из них те, что ещё не просмотрены.
Но при таком подходе можно было бы случайно наткнуться на критиков, ничего не писавших о фильмах, которые могли бы мне по- нравиться. Можно также отобрать критика, которому почему-то по- нравился фильм, получивший отрицательные отзывы от всех осталь- ных критиков, вошедших в список topMatches.
Чтобы разрешить эти проблемы, необходимо ранжировать сами фильмы, вычислив взвешенную сумму оценок критиков. Для примера возьмём критика Toby. Берём каждого из отобранных критиков и умножаем его оценку подобия с Toby на оценку, которую он выставил каждому фильму. В табл. показан результат вычислений.
84
В этой таблице приведены коэффициенты корреляции для каждо- го критика и оценки, поставленные ими трём фильмам («The Night
Listener», «Lady in the Water» и «Just My Luck»), которые Toby не оце- нивал. В столбцах «П.x» находится произведение коэффициента подо- бия на оценку, выставленную критиком. Смысл в том, чтобы мнение критика с похожими на Toby вкусами вносило больший вклад в общую оценку, чем мнение критика, не похожего него. В строке «Итого» при- ведены суммы, вычисленных таким образом величин. Можно было бы использовать для ранжирования сами эти суммы, но тогда фильм, ко- торый просмотрело больше людей, получил бы преимущество. Чтобы исправить эту несправедливость, необходимо разделить полученную величину на сумму коэффициентов подобия для всех критиков, кото- рые рецензировали фильм (строка «S подоб» в таблице).
Табл.13
Критик
Подобие Night П.х
Night
Lady П.х
Lady
Luck П.х
Luck
Rose
0.99 3.0 2.97 2.5 2.48 3.0 2.97
Seymour
0.38 3.0 1.14 3.0 1.14 1.5 0.57
Puig
0.89 4.5 4.02 3.0 2.68
LaSalle
0.92 3.0 2.77 3.0 2.77 2.0 1.85
Matthews 0.66 3.0 1.99 3.0 1.99
Итого
12.89 8.38 8.07
S подоб
3.84 2.95 3.18
Итого /
S подоб.
3.35 2.83 2.53
Поскольку фильм «The Night Listener» рецензировали все, вели- чина «Итого» для него делится на сумму всех коэффициентов подобия.
Напротив, фильм «Lady in the Water» критик Puig не рецензировал, следовательно, в этом случае величина «Итого» делится на сумму ко- эффициентов подобия всех критиков, кроме Puig. В последней строке показано частное от деления.
Всё вышеперечисленное реализуется добавлением следующего кода:
# Получить рекомендации для заданного человека, пользуясь взвешен-
ным средним
# оценок, данных всеми остальными пользователями
def getRecommendations(prefs,person,similarity=sim_pearson):
85 totals={} simSums={} for other in prefs:
# сравнивать заданного человека (Toby, в данном случае) с собой же не нужно if other==person: continue sim=similarity(prefs,person,other)
# игнорировать нулевые и отрицательные оценки
if sim<=0: continue for item in prefs[other]:
# оценивать только фильмы, которые заданный человек ещё не смот-
рел
if item not in prefs[person] or prefs[person][item]==0:
# Коэффициент подобия * Оценка
totals.setdefault(item,0) totals[item]+=prefs[other][item]*sim
# Сумма коэффициентов подобия
simSums.setdefault(item,0) simSums[item]+=sim
# Создать нормализованный список
rankings=[(total/simSums[item],item) for item,total in totals.items( )]
# Вернуть отсортированный список
rankings.sort( ) rankings.reverse( ) return rankings
Код, реализующий этот алгоритм, абсолютно прямолинеен и мо- жет работать как с евклидовым расстоянием, так и с коэффициентом корреляции Пирсона.
В цикле осуществляется обход всех людей, присутствующих в словаре prefs.
Для каждого вычисляется коэффициент подобия с заданным че- ловеком person. Далее обходятся все фильмы, которым текущий кри- тик выставил оценку. В строке, выделенной полужирным шрифтом,