четверг, 28 августа 2008 г.

О программировании

Шесть мартышек, может быть, и напечатают Шекспира за миллион лет, а вот создать хороший программный код у них вряд ли получится....

четверг, 14 августа 2008 г.

Наглядная математическая статистика

Несколько глав из "Наглядной математической статистики: ch04.djvu ... ch08.djvu. Это теория. Практические главы во второй части. Я их, может быть, позже отсканирую.

вторник, 5 августа 2008 г.

.Last.value

Ну вот и пригодилось! )
Запустил hclust в top-level. Полчаса программа чего - то шуровала в свопе и затем счастливо сообщила:

Call:
hclust(d = dist(tdm), method = "ward")

Cluster method   : ward 
Distance         : euclidean 
Number of objects: 468 
От повторного запуска меня спасло .Last.value

пятница, 1 августа 2008 г.

Десятый день (string kernel)

ЗАДАЧА
Поставлена задача - сравнение слов, из - за орфографических ошибок или применения различных схем транслитерации незначительно различающихся в написании. Обычно эти слова - имена собственные, например, фамилии и имена индийских программистов / богов.

РЕШЕНИЕ
Есть идея - использовать метрический подход. Меру схожести можно задавать по - разному, но я не буду "изобретать велосипед", а проверю string subsequence kernel.

> library(kernlab)
>  sapply(1:4, function(i) 1 - stringdot(i)("Ivanov", "Ivanova"))
[1] 0.04059678 0.06617810 0.11842085 0.17463783
> sapply(1:4, function(i) 1 - stringdot(i)("Ivanov", "Iwanow"))
[1] 0.5000000 0.5938462 0.7684211 0.9487179
> sapply(1:4, function(i) 1 - stringdot(i)("Ivanov", "Ivanow"))
[1] 0.1339746 0.2118939 0.2947368 0.4358974
> sapply(1:4, function(i) 1 - stringdot(i)("Moscow", "Moscva"))
[1] 0.2783122 0.4298703 0.5800510 0.7948718
> sapply(1:4, function(i) 1 - stringdot(i)("Moscow", "Moskva"))
[1] 0.4226497 0.6327978 0.8320204 1.0000000
> sapply(1:4, function(i) 1 - stringdot(i)("Moscow", "Moskwa"))
[1] 0.2783122 0.5687790 0.7952749 0.9743590
> sapply(1:4, function(i) 1 - stringdot(i)("Vainoopuya", "Vaynopuya"))
[1] 0.1105008 0.2817140 0.4582484 0.5662287
> sapply(1:4, function(i) 1 - stringdot(i)("Vainoopuya", "Vaynoupuya"))
[1] 0.1314010 0.3545168 0.5902365 0.7399516
> sapply(1:4, function(i) 1 - stringdot(i)("Zloy", "Dobriy"))
[1] 0.5917517 0.9734512 1.0000000 1.0000000
Рассматривается несколько ядер, задаваемых подстроками с длинами от 1 до 4.

ВЫВОД
Даже в базовом варианте результаты, как и ожидалось, хорошие. Схожие слова близки - различные далеки. Результаты можно улучшить, используя различные веса (задавая их по статистическим данным или из лингвистических соображений). Кстати, насчёт лингвистики: можно ещё попробовать вероятностные грамматики.