Próbowałem zebrać wiele zestawów danych adresów URL (około 1 miliona każdy), aby znaleźć oryginał i literówki każdego adresu URL. Zdecydowałem się użyć odległości levenshtein jako metryki podobieństwa, wraz z dbscan jako algorytmem grupowania, ponieważ algorytmy k-średnich nie będą działać, ponieważ nie znam liczby klastrów.Python: klastrowanie ciągów z dbscan scikit-learning, przy użyciu odległości Levenshtein jako metryki:
Mam pewne problemy przy korzystaniu z dbscan w Scikit-learning.
Poniższy fragment kodu działa na małych zestawach danych w formacie I jest używany, ale ponieważ jest to prekomputacja całej macierzy odległości, która zajmuje O (n^2) przestrzeń i czas i jest o wiele za duża dla moich dużych zbiorów danych. Uruchomiłem to przez wiele godzin, ale kończy się to zabieraniem całej pamięci mojego komputera.
lev_similarity = -1*np.array([[distance.levenshtein(w1[0],w2[0]) for w1 in words] for w2 in words])
dbscan = sklearn.cluster.DBSCAN(eps = 7, min_samples = 1)
dbscan.fit(lev_similarity)
Więc pomyślałem, że potrzebuję jakiegoś sposobu, aby obliczyć podobieństwo w locie i stąd wypróbowałem tę metodę.
dbscan = sklearn.cluster.DBSCAN(eps = 7, min_samples = 1, metric = distance.levenshtein)
dbscan.fit(words)
Ale ta metoda kończy się dając mi błąd:
ValueError: could not convert string to float: URL
Które Zdaję sobie sprawę, że jego środki próbuje konwertować wejść do funkcji podobieństwa do pływaków. Ale nie chcę tego robić. O ile rozumiem, po prostu potrzebuje funkcji, która może przyjąć dwa argumenty i zwrócić wartość zmiennoprzecinkową, którą następnie można porównać do eps, co powinna zrobić odległość od levenshtein.
Utknąłem w tym punkcie, ponieważ nie znam szczegółów implementacji dbscanu sklearna, aby znaleźć powód, dla którego próbuję go przekonwertować, i nie mam lepszego pomysłu na uniknięcie O (n^2) obliczenia macierzy.
Proszę dać mi znać, jeśli istnieje lepszy lub szybszy sposób na zgrupowanie tych wielu ciągów, które mogłem przeoczyć.
Próbowałem Elki ale utknąłem na jego formatu wejściowego. Nie mogę znaleźć wiele informacji na jej stronie internetowej. Byłoby wspaniale, gdybyś mógł wskazać mi właściwy kierunek lub podać link do pełnego samouczka na temat dbscan ELKI. Dzięki. – KaziJehangir
Istnieje wiele parserów. Skorzystaj z JavaDoc, tutaj objaśnione są formaty wejściowe. –