ИТОГОВЫЙ ОТЧЕТ ОО АССОЦИАЦИИ РОДИТЕЛЕЙ ДЕТЕЙ-ИНВАЛИДОВ (АРДИ)
По 1-му проекту Сети «Усиление потенциала родителей детей с ограниченными возможностями» («Empowering parents of children with disabilities»), в партнёрстве с МСР КР, АРДИ г. Бишкек, ОФ “Семьей каждому ребенку” г. Ош и ОО “Нур-Бала” г. Талас, реализуемого при финансовой и технической поддержки ИККО Кооперейшн/Керк ин Акти.
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingTal Melamed
Testing Java client applications is not always straightforward as testing web applications. Even under experienced hands, there might be obstacles coming your way; what if you cannot use a proxy? How do you MitM? What if you just can't? How do you modify the app to your benefit?
Fortunately, Java is still Java. This lecture is based on a true story, and will follow an interesting case of pen-testing a known product; what tools and techniques can be used in order to jump over hurdles, all the way to the finish line.
The lecture aims to enrich the pentester's toolbox as well as mind, when facing Java client applications; MitM-ing, run-time manipulations and patching the code are only some of the discussed cases.
In addition, a newly developed proxy for intercepting and tampering with TCP communication over TLS/SSL and bypassing certificate-pinning protections, will be introduced during the lecture.
ИТОГОВЫЙ ОТЧЕТ ОО АССОЦИАЦИИ РОДИТЕЛЕЙ ДЕТЕЙ-ИНВАЛИДОВ (АРДИ)
По 1-му проекту Сети «Усиление потенциала родителей детей с ограниченными возможностями» («Empowering parents of children with disabilities»), в партнёрстве с МСР КР, АРДИ г. Бишкек, ОФ “Семьей каждому ребенку” г. Ош и ОО “Нур-Бала” г. Талас, реализуемого при финансовой и технической поддержки ИККО Кооперейшн/Керк ин Акти.
Java Hurdling: Obstacles and Techniques in Java Client Penetration-TestingTal Melamed
Testing Java client applications is not always straightforward as testing web applications. Even under experienced hands, there might be obstacles coming your way; what if you cannot use a proxy? How do you MitM? What if you just can't? How do you modify the app to your benefit?
Fortunately, Java is still Java. This lecture is based on a true story, and will follow an interesting case of pen-testing a known product; what tools and techniques can be used in order to jump over hurdles, all the way to the finish line.
The lecture aims to enrich the pentester's toolbox as well as mind, when facing Java client applications; MitM-ing, run-time manipulations and patching the code are only some of the discussed cases.
In addition, a newly developed proxy for intercepting and tampering with TCP communication over TLS/SSL and bypassing certificate-pinning protections, will be introduced during the lecture.
High load++2016.highlights (dropbox+clickhouse)Pavel Alexeev
Highload++ 2016 short present of 3:
Оригинальные доклады, рекомендуемые к просмотру:
* Особенности архитектуры распределённого хранилища в Dropbox. Слава Бахмутов (SRE в группе разработки стораджа в Dropbox) - http://www.highload.ru/2016/abstracts/2257.html
* ClickHouse: очень быстро и очень удобно. Виктор Тарнавский (Руководитель разработки аналитических продуктов в Яндексе), Алексей Миловидов (Главный разработчик ClickHouse) - http://www.highload.ru/2016/abstracts/2327.html
* Переезжаем на Yandex ClickHouse - Александр Зайцев (LifeStreet) - http://www.highload.ru/2016/abstracts/2297.html
High load++2016.highlights (dropbox+clickhouse)Pavel Alexeev
Highload++ 2016 short present of 3:
Оригинальные доклады, рекомендуемые к просмотру:
* Особенности архитектуры распределённого хранилища в Dropbox. Слава Бахмутов (SRE в группе разработки стораджа в Dropbox) - http://www.highload.ru/2016/abstracts/2257.html
* ClickHouse: очень быстро и очень удобно. Виктор Тарнавский (Руководитель разработки аналитических продуктов в Яндексе), Алексей Миловидов (Главный разработчик ClickHouse) - http://www.highload.ru/2016/abstracts/2327.html
* Переезжаем на Yandex ClickHouse - Александр Зайцев (LifeStreet) - http://www.highload.ru/2016/abstracts/2297.html
10. 10
Фонетические алгоритмы
● Давно известны. Легко реализуются
● Специфичны для областей созвучности (имена, названия)
● Базируются на разборе правил языка, последовательности
гласных, согласных, порядке и значимости для звучания
● Хорошо индексируются
● Требуют нормализации, разбора и порядка
● Специфичны для языка и локали
● Практически не расширяются на объёмный текст
11. 11
Алгоритмы. Редакторские
расстояния
“найти все слова, совпадающие с искомым с учетом k-
возможных различий”
Например, при запросе «Машина» с учетом двух возможных ошибок,
найти слова «Машинка», «Махина», «Малина», «Калина» и так
далее.
Алгоритмы нечеткого поиска характеризуются метрикой — функцией
расстояния между двумя словами, позволяющей оценить степень их
сходства в данном контексте. Строгое математическое определение
метрики включает в себя необходимость соответствия условию
неравенства треугольника (X — множество слов, p — метрика):
12. 12
Расстояние Левенштейна
● Наиболее популярного алгоритма
расчета — метода Вагнера-Фишера.
● Исходный вариант имеет
временную сложность O(mn) и
потребляет O(mn) памяти, где m и
n — длины сравниваемых строк.
Оптимизации до O(k min(m, n)).
● Цены операций могут зависеть от
вида операции
● Расстояние Дамерау —
Левенштейна - модификация с
добавлением операции
транспозиции (перестановки)
символов.
● Модификации Bitap (Bitshift, Shift-
13. 13
Алгоритм расширения выборки
● Если набор слов не велик
(spellchecker), cоставим заранее
возможные ошибки
● Время работы сильно зависит от
числа k ошибок и от размера
алфавита A, и в случае
использования бинарного поиска
по словарю составляет:
● Зато возможно частичное
индексирование
● Индексы достаточно объёмны
● Из простых улучшений -
вероятностные генерации ошибок
14. 14
Метод N-грамм, Хеширование по
сигнатуре
«Если слово А совпадает со словом
Б с учетом нескольких ошибок, то с
большой долей вероятности у них
будет хотя бы одна общая подстрока
длины N»
ВОТКА → ВОТ, ОТК, ТКА
15. 15
Нечёткий поиск. TF-IDF
TF (term frequency — частота слова) — отношение числа вхождения
некоторого слова к общему количеству слов документа (оценка важности
слова ti в пределах отдельного документа):
где ni есть число вхождений слова в документ, а в знаменателе — общее
число слов в данном документе.
IDF (inverse document frequency — обратная частота документа) — инверсия
частоты, с которой некоторое слово встречается в документах коллекции.
26. 26
Machine learning. Функционал качества
ROC-кривая (receiver operating
characteristic, рабочая
характеристика приёмника) —
график, позволяющий оценить
качество бинарной классификации,
27. 27
Machine learning
Логистическая регрессия или логит-регрессия (англ. logit model) — это
статистическая модель, используемая для предсказания вероятности
возникновения некоторого события путём подгонки данных к логистической
кривой.
Применяется для предсказания вероятности возникновения некоторого
события по значениям множества признаков.
● Мультиколлинеарность сильно ухудшает
качество (вводится компонент
регуляризации l1 или l2)
● Чувствительно к скалированию.
● Не переваривает категориальные признаки
● Для многоклассовой классификации
используется Softmax-регрессия,
Множественная логит-регрессия
28. >>> measurements = [
... {'city': 'Dubai', 'temperature': 33.},
... {'city': 'London', 'temperature': 12.},
... {'city': 'San Fransisco', 'temperature':
18.},
... ]
>>> from sklearn.feature_extraction import
DictVectorizer
>>> vec = DictVectorizer()
>>> vec.fit_transform(measurements).toarray()
array([[ 1., 0., 0., 33.],
[ 0., 1., 0., 12.],
[ 0., 0., 1., 18.]])
>>> vec.get_feature_names()
['city=Dubai', 'city=London', 'city=San
Fransisco', 'temperature']
>>> text = [
... 'Алё. Петя, поищи в нашей базе Адольфа Швардсенеггера',
... 'Вася Уткин, проживающий по адресу г. Санкт-Петербург...',
... 'гражданин Уткин В., регион СПб...',
... 'Разум дан человеку для того, чтобы он разумно жил, а не ...
для того только, чтобы он понимал, что он неразумно живет.'
... ]
>>> from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=1)
>>> array = vectorizer.fit_transform(text)
>>> array.toarray()
array([[ 0.37796447, 0. , 0.37796447, 0.37796447, 0. ,
0. , 0. , 0. , 0. , 0. ,
0.37796447, 0. , 0. , 0. , 0. ,
0.37796447, 0. , 0.37796447, 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
...
28
Machine learning. Векторизация
31. 31
Machine learning. Иерархическая кластеризация
● Обучение без учителя
● Заранее не известно
количество кластеров
(дублей, групп)!
Например как схожесть
видов в биологии
● Вместо числа кластеров
строим - иерархическую
кластеризацию!Типы алгоритмов:
● агломеративные - объединяют в более
крупные кластеры
● либо дивизимные - наоборот, дробят на
более мелкие
32. 32
Machine learning. Иерархическая кластеризация
● Обучение без учителя
● Заранее не известно
количество кластеров
(дублей, групп)!
Например как схожесть
видов в биологии
● Вместо числа кластеров
строим - иерархическую
кластеризацию!Типы алгоритмов:
● агломеративные - объединяют в более
крупные кластеры
● либо дивизимные - наоборот, дробят на
более мелкие
36. 36
Нужны метаалгоритмы. Правила
Нормализовали что могли, разобрали по полям:
1. “Вася Уткин, проживающий по адресу: г. Санкт-Петербург, ул. Красного
Курсанта 25Ж”
2. “гражданин Уткин В., регион СПб, адрес Красного Курсанта улитса”
Как? Это отдельный вопрос
1. {name: “Вася”, family: “Уткин”, region: “г. Санкт-Петербург”, street: “ул.
Красного Курсанта”, build: “25Ж”}
2. {name: “В”, family: “Уткин”, region: “СПб”, street: “Красного Курсанта”, build: “”}
● “В” это Василий, Виктор или Володя? Сравнивать?
● “Красного Курсанта” - “ул.” Имеет значение? А если нет улицы?
● Веса признаков?
● Категории? Справочники?
● ООО “Ромашка” =? ОАО Ромашка =? “Ромашка”
37. Opensourcesolutions
1. https://github.com/larsga/Duke - Duke is a fast and flexible deduplication
engine written in Java (based on Lucene)
2. http://dedupe.readthedocs.org/en/latest/ - dedupe is a library that uses
machine learning to perform de-duplication and entity resolution quickly
on structured data. Python.
3. https://www.tensorflow.org/ TensorFlowis an open source software library
for numerical computation using data flow graphs. By Google.
4. http://de.slideshare.net/teofili/text-categorization-with-lucene-and-solr
Lucene + Solr. Duplications.
5. https://github.com/YannBrrd/elasticsearch-entity-resolution - This project is
an interactive entity resolution plugin for Elasticsearch based on Duke. Basically, it uses Bayesian
probabilities to compute probability. You can pretty much use it as an interactive deduplication
37
38. Использованные материалы
1. https://habrahabr.ru/post/114947/ - Фонетические алгоритмы. Никита Сметанин.
2. https://habrahabr.ru/post/114997/ - Нечёткий поиск в тексте и словаре.
3. https://habrahabr.ru/post/28752/ - Фонетический поиск.
4. https://habrahabr.ru/post/116824/ - Отслеживание объектов на видео. Анатолий Ализар.
5. https://www.youtube.com/watch?v=1GhNXHCQGsM - Predator: Camera That Learns. Zdenek Kalal.
6. https://yandex.ru/support/images/loaded-image.xml Поиск по картинке.
7. https://habrahabr.ru/post/65944/ - Поиск нечетких дубликатов. Алгоритм шинглов для веб-документов. Виталий
Родненко.
8. http://www.codeisart.ru/blog/python-shingles-algorithm/ - Python: Алгоритм Шинглов — поиск нечетких
дубликатов текста. VitaliyRodnenko, 19.01.2009.
9. https://ru.wikipedia.org/wiki/TF-IDF
38
Editor's Notes
https://habrahabr.ru/post/114947/
Matching != Search
Matching - сущности те же, идентичны или похожи друг на друга до степени отождествления по какому-либо критерию.
Поиск - нахождение вхождений, упоминаний, описаний, объяснений по данному термину, теме.
Text, Structured text, Regexp, Voice, Video,
https://habrahabr.ru/post/116824/
Structured, Semistructured, Unstructured
Все требуют предобработки, упорядочивания.
http://homepage.usask.ca/~ctl271/857/affine_gap_penalties.shtml
http://rcdl2007.pereslavl.ru/papers/paper_65_v1.pdf - Сравнительный анализ методов определения нечетких дубликатов для Web-документов
Очень быстро становятся сложными. Для разбиения. Для совпадений. Не для матчинга.
https://habrahabr.ru/post/114997/ - Нечёткий поиск в тексте и словаре
https://ru.wikipedia.org/wiki/Неравенство_треугольника
Нера́венство треуго́льника в геометрии, функциональном анализе и смежных дисциплинах — это одно из интуитивных свойств расстояния. Оно утверждает, что длина любой стороны треугольника всегда не превосходит сумму длин двух его других сторон.
Между тем, в большинстве случаев под метрикой подразумевается более общее понятие, не требующее выполнения такого условия, это понятие можно также назвать расстоянием.
В числе наиболее известных метрик — расстояния Хемминга, Левенштейна и Дамерау-Левенштейна. При этом расстояние Хемминга является метрикой только на множестве слов одинаковой длины, что сильно ограничивает область его применения.
https://ru.wikipedia.org/wiki/Расстояние_Левенштейна
https://habrahabr.ru/post/114997/
Цены операций могут зависеть от вида операции (вставка, удаление, замена) и/или от участвующих в ней символов, отражая разную вероятность мутаций в биологии[3], разную вероятность разных ошибок при вводе текста и т. Д.
Расстояние Дамерау — Левенштейна (названо в честь учёных Фредерика Дамерау и Владимира Левенштейна) — это мера разницы двух строк символов, определяемая как минимальное количество операций вставки, удаления, замены и транспозиции (перестановки двух соседних символов), необходимых для перевода одной строки в другую. Является модификацией расстояния Левенштейна: к операциям вставки, удаления и замены символов, определенных в расстоянии Левенштейна добавлена операция транспозиции (перестановки) символов.
Сложность:
Если посмотреть на процесс работы алгоритма, несложно заметить, что на каждом шаге используются только две последние строки матрицы, следовательно, потребление памяти можно уменьшить до O(min(m, n)).
Но это еще не всё — можно дальше оптимизировать алгоритм, если стоит задача нахождения не более k различий. В этом случае нужно вычислять в матрице лишь диагональную полосу шириной 2k+1 (отсечение Укконена), что сводит временную сложность к O(k min(m, n)).
Bitshift:
Алгоритм Bitap и различные его модификации наиболее часто используются для нечеткого поиска без индексации.
Впервые идею этого алгоритма предложили граждане Ricardo Baeza-Yates и Gaston Gonnet, опубликовав соответствующую статью в 1992 году.
Оригинальная версия алгоритма имеет дело только с заменами символов, и, фактически, вычисляет расстояние Хемминга. Но немного позже Sun Wu и Udi Manber предложили модификацию этого алгоритма для вычисления расстояния Левенштейна, т.е. привнесли поддержку вставок и удалений, и разработали на его основе первую версию утилиты agrep.
Например, при k = 1 и слова длины 7 (например, «Крокодил») в русском алфавите множество ошибочных слов будет размером около 450, то есть будет необходимо сделать 450 запросов к словарю, что вполне приемлемо.
Но уже при k = 2 размер такого множества будет составлять более 115 тысяч вариантов, что соответствует полному перебору небольшого словаря, либо же 1 / 27 в нашем случае, и, следовательно, время работы будет достаточно велико. При этом не нужно забывать еще и о том, что для каждого из таких слов необходимо провести поиск на точное совпадение в словаре.
Особенности:
Алгоритм может быть легко модифицирован для генерации «ошибочных» вариантов по произвольным правилам, и, к тому же, не требует никакой предварительной обработки словаря, и, соответственно, дополнительной памяти.
Возможные улучшения:
Можно генерировать не всё множество «ошибочных» слов, а только те из них, которые наиболее вероятно могут встретиться в реальной ситуации, например, слова с учетом распространенных орфографических ошибок или ошибок набора.
N-граммы
Придуман довольно давно, широко используемым, так как его реализация крайне проста, и он обеспечивает весьма хорошую производительность.
Наиболее часто используемыми на практике являются триграммы — подстроки длины 3 (чтобы не накладывать ограничение на длину слов).
При его использовании остается необходимость в последовательном переборе около 15% словаря, что достаточно много для словарей большого объема.
Возможные улучшения:
Можно разбивать хеш-таблицы N-грамм по длине слов и по позиции N-граммы в слове (модификация 1). Можно еще немного уменьшить размер необходимого для просмотра множества, разбив таблицы по длине слова, и аналогичным образом просматривая только соседние 2k+1 таблицы (модификация 2).
Хеширование по сигнатуре
Этот алгоритм описан в статье Бойцова Л.М. «Хеширование по сигнатуре». Он базируется на достаточно очевидном представлении «структуры» слова в виде битовых разрядов, используемой в качестве хеша (сигнатуры) в хеш-таблице.
При индексации такие хеши вычисляются для каждого из слов, и в таблицу заносится соответствие списка словарных слов этому хешу. Затем, во время поиска, для запроса вычисляется хеш и перебираются все соседние хеши, отличающиеся от исходного не более чем в k битах. Для каждого из таких хешей производится перебор списка соответствующих ему слов.
Удаление одного символа либо не изменит значения хеша (если в слове еще остались символы из той же группы алфавита), либо же соответствующий этой группе бит изменится в 0. При вставке, аналогичным образом либо один бит встанет в 1, либо никаких изменений не будет. При замене символов всё немного сложнее — хеш может либо вовсе остаться неизменным, либо же изменится в 1 или 2 позициях. При перестановках никаких изменений и вовсе не происходит, потому что порядок символов при построении хеша, как и было замечено ранее, не учитывается. Таким образом, для полного покрытия k ошибок нужно изменять не менее 2k бит в хеше.
https://ru.wikipedia.org/wiki/TF-IDF
Основоположником данной концепцииявляется Карен Спарк Джонс[1].
Учёт IDF уменьшает вес широкоупотребительных слов. Для каждого уникального слова в пределах конкретной коллекции документов существует только одно значение IDF.
Пример
Если документ содержит 100 слов и слово[3] «заяц» встречается в нём 3 раза, то частота слова (TF) для слова «заяц» в документе будет 0,03 (3/100). Вычислим IDF как десятичный логарифм отношения количества всех документов к количеству документов содержащих слово «заяц». Таким образом, если «заяц» содержится в 1000 документов из 10 000 000 документов, то IDF будет равной 4 (log(10000000/1000)). Для расчета окончательного значения веса слова необходимо TF умножить на IDF. В данном примере, TF-IDF вес для слова «заяц» в выбранном документе будет 0,12 (0,03*4).
http://www.codeisart.ru/blog/python-shingles-algorithm/ - Python: Алгоритм Шинглов — поиск нечетких дубликатов текста. VitaliyRodnenko, 19.01.2009.
Канонизация: stop_symbols = '.,!?:;-\n\r()', stop_words = (u'это', u'как', u'так', u'и', u'в', u'над', u'к', u'до', u'не', u'на', u'но', u'за', u'то', u'с', u'ли', u'а', u'во', u'от', u'со', u'для', u'о', u'же', u'ну', u'вы', u'бы', u'что', u'кто', u'он', u'она')
Можно, например, каждое из существительных приводить к единственному числу, именительному падежу и т.д., для этого нужно подключать морфологические анализаторы русского языка (или других языков, где необходимы эти действия).
На практике часто применяются последовательности длинной в 10 слов.
Порядок позволяет не терять “смысл”, вроде “болеет” и “не болеет”. “Делает зарядку” и “Отвратительно делает зарядку”, “хорошо делает зарядку”
Чем короче последовательности - тем больше индекс, но точнее определение по малым изменениям (вписывания слов, изменение порядка).
Матрица объекты-признаки есть фактически реляциоонная таблица, в одном из столбцов которой есть результат, известный для обучающей выборки. Например группа, категория, город, соответствие.
Разумеется для восстановления функции (алгоритма для компьютера), признаки должны быть числовыми. Некоторые измерения над нашими объектами.
Классификация на 2 класса - Выиграл, проиграл (случилось или нет событие)
Несколько непересекающихся классов: Оптическое распознавание символов (OCR)
Медицинская диагностика (1 может иметь несколько болезней).
Восстановление регрессии - экономические задачи, скоринг, предсказение цены
Ищется некоторая функция, которая хорошо аппроксимирует нашу зависимость. Эксперты предлагают такие функции для предметных областей.
Θ (тетта) - искомый вектор параметров нашей модели.
В простых случаях достаточно линейных моделей регрессии. В простейшем случае линейной модели это просто взвешенная сумма всех признаков с Θj коэффициентами!
Линейная модель классификации строит разделяющую гиперплоскость в N-мерном пространстве. (см далее пример ирисов.)
Фишер известный статист. Собрал 150 цветков ириса. Каноническая задача.
Измерений всего 4. Длина и ширина чашелистника, длина и ширина лепестка.
Признаков мало (4), можно столкнуть все попарно и визуализовать. Затем смотрим, нет ли таких сочетаний признаков где задача бы решалась тривиально. Видно (next).
Один отделился хорошо. Два других тоже прилично. (next). Синими линиями и построим линейный классификатор.
Пример хадачи регрессии. Берём функцию от х. А в качестве признаков берём x, x в квадрате и т.д. Строим модель наилучшим образом приближаующу к нашим данным.
Почти всегда есть 2 стадии обучения - тренировка и применение (на тестовой, контрольной).
Фактически, задачу машинного обучения сводят к задаче оптимизации. Т.е. выбор приближающей функции и подбор её параметров для достижения оптимального результата. Но его надо померить!
Количество ошибок, расстояние, среднеквадратичное отклонение. Их сумма фактически и есть “ошибка”, её и надо минимизировать на обучении и разработке функциональной модели.
https://ru.wikipedia.org/wiki/ROC-кривая
ROC-кривая (англ. receiver operating characteristic, рабочая характеристика приёмника) — график, позволяющий оценить качество бинарной классификации, отображает соотношение между долей объектов от общего количества носителей признака, верно классифицированных, как несущих признак, (англ. true positive rate, TPR, называемой чувствительностью алгоритма классификации) и долей объектов от общего количества объектов, не несущих признака, ошибочно классифицированных, как несущих признак (англ. false positive rate, FPR, величина 1-FPR называется специфичностьюалгоритма классификации) при варьировании порога решающего правила.
Также известна как кривая ошибок. Анализ классификаций с применением ROC-кривых называется ROC-анализом.
Количественную интерпретацию ROC даёт показатель AUC (англ. area under ROC curve, площадь под ROC-кривой) — площадь, ограниченная ROC-кривой и осью доли ложных положительных классификаций. Чем выше показатель AUC, тем качественнее классификатор, при этом значение 0,5 демонстрирует непригодность выбранного метода классификации (соответствует случайному гаданию).
Вводится так называемая зависимая переменная y, принимающая лишь одно из двух значений — как правило, это числа 0 (событие не произошло) и 1 (событие произошло), и множество независимых переменных (также называемых признаками, предикторами или регрессорами) — вещественных x_1, x_2, ..., x_n, на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.
http://scikit-learn.org/stable/modules/feature_extraction.html#loading-features-from-dicts
В общем случае Matching строится поверх. Например с некоторым порогом можно сравнивать наиболее частые слова, не являющиеся паразитными. По их совпадению, можно говорить о вероятности дубля.
https://www.coursera.org/learn/vvedenie-mashinnoe-obuchenie/lecture/o4Ij7/klastierizatsiia
В общем виде не решается, нет общепризнаного подхода или алгоритма. Но есть несколько основных подходов.
Ленточные кластеры чаще всего проблема для многих алгоритмов, т.к. стандартный подход исходит из предположения что внутрикластерные расстояния меньше чем расстояния между кластерами. (надо же по каким-то критериям этот кластер выделить).
Например выделение образов на картинке. Или же, для наших примеров и задач, адреса внутри города должны быть ближе чем адрес без города, или в другом. Выбор ыункций “весов” весьма важен.
Начальные центры можно брать случайно.
Алгоритм будет “застревать в локальных экстремумах (оптимумах)” (градиентный спуск)
Первое улучшение - Мягкий вариант K-среднийх (EM-алгоритм). Считается не только близость элементов внутри кластера, но и расстояние до центра каждого кластера. Выбираем ближайший. Количество элементов дискретно. Поэтому медленее меняются центры и расстояния между ними.
Вычисляются “мощности кластеров” (доля из всей выборки).
Случайные центры не эффективно. Лучше взять изначально наиболее удалённые. Центры будут двигаться вместе с кластерами.
Наша кухня:
Может подойти для определения городов, стран, форм собственности предприятий пола и т.д...
https://www.coursera.org/learn/vvedenie-mashinnoe-obuchenie/lecture/woDpy/iierarkhichieskaia-klastierizatsiia
Издревле - кластеризауия Карла Линнея, основанная на поарной близости растений, животных и минералов.
Формула Ланса-Уильямся. До них расстояния между кластерывми высчитывались по сути как попарные расстояния между точками. Что очень долго. Они предложили высчитывать расстояния из расстояний внутри кластера.
Ближайшие соседи кажется наиболее логичным. На практике плохая идея. Может быть 2 выброса, а мы опишем кластеры как близкие.
Расстояние дальнего соседа. Также не лучшая идея. Но описывается их же формулой.
Т.к. Расстояния это векторы, мы можем их складывать и брать среднее. По величине можем найти “центр масс кластера”. Казалось бы лучший способ, но на практике оказывается едва ли не худшим!
Лучший чаще всего расстояние Уорда - оно нормированно.
Наглядно и точно.
По горизонтали отложены номера точек, по Y - расстояния между кластерами, при которых происходило объединение.
Основные характеристики:
Монотонность - не должно быть пересечений. То есть расстояния всегда увеличиваются (теорема Мелигана).
О дендрограмме всегда можно выбрать необходимый уовень детализации (количества кластеров)!
Presentation for Duke: http://de.slideshare.net/larsga/deduplication
Many thinks and usefull links: http://stackoverflow.com/questions/16381133/using-machine-learning-to-de-duplicate-data -> https://groups.google.com/forum/?fromgroups=#!searchin/elasticsearch/identity$20resolution/elasticsearch/YMNaGOxTda4/W3Y7qN94ckIJ