Я столкнулся с проблемой машинного обучения; Учебные данные состоят из числовых, категориальных и дат. Я начал тренироваться только на основе чисел и дат (которые я конвертировал в числа, используя эпоху, день недели, часы и т. Д.). Помимо плохой оценки, показатели очень хорошие (секунды обучения на миллион входов).
Проблема в категориях, у которых большинство значений до тысяч.
Значения состоят из марок оборудования, комментариев и т. Д. И вводятся по-человечески, поэтому я предполагаю, что есть много сходств. Я могу пожертвовать немного представлением о реальном мире через данные (оценка Хенсе) для возможности (время обучения).
Задача программирования: я придумал это из этого хорошего анализа производительности
import difflib
def gcm1(strings):
clusters = {}
co = 0
for string in (x for x in strings):
if(co % 10000 == 0 ):
print(co)
co = co +1
if string in clusters:
clusters[string].append(string)
else:
match = difflib.get_close_matches(string, clusters.keys(), 1, 0.90)
if match:
clusters[match[0]].append(string)
else:
clusters[string] = [ string ]
return clusters
def reduce(lines_):
clusters = gcm1(lines_)
clusters = dict( (v,k) for k in clusters for v in clusters[k] )
return [clusters.get(item,item) for item in lines_]
Пример этого похож на:
reduce(['XHSG11', 'XHSG8', 'DOIIV', 'D.OIIV ', ...]
=> ['XHSG11', 'XHSG11', 'DOIIV', 'DOIIV ', ...]
Я очень привязан к Python, поэтому не смог запустить другой реализованный код на C.
Очевидно, что функция difflib.get_close_matches в каждой итерации является самой жадной.
Есть ли лучшая альтернатива? или лучший метод моего алгоритма?
Как я уже говорил о миллионах записей, скажем, о 10 столбцах, я даже не могу оценить, когда алгоритм остановится (более 3 часов и все еще работает на моих 16 гигабайтах оперативной памяти и процессоре i7 4790k)
Данные как (извлечение):
Comments: [nan '1er rdv' '16H45-VE' 'VTE 2016 APRES 9H'
'ARM : SERENITE DV. RECUP.CONTRAT. VERIF TYPE APPAREIL. RECTIF TVA SI NECESSAIRE']
422227 different values
MODELE_CODE: ['VIESK02534' 'CMA6781031' 'ELMEGLM23HNATVMC' 'CMACALYDRADELTA2428FF'
'FBEZZCIAO3224SVMC']
10206 values
MARQUE_LIB: ['VIESSMANN' 'CHAFFOTEAUX ET MAURY' 'ELM LEBLANC' 'FR BG' 'CHAPPEE']
167 values
... more columns