Как распознать повторяющиеся шаблоны данных и дать некоторые рекомендации? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть огромный набор данных, содержащий несколько повторяющихся данных (файл журнала пользователя), и я хотел бы сделать аналогичное распознавание и рекомендацию появления шаблона на основе загрузки пользователя. После распознавания образов я должен порекомендовать пользователю наилучшее возможное значение.

Например, следующие журналы загрузки, основанные на времени:

A C D F A C D A B D A C D F A C D A B D

Я хотел бы распознать шаблон, существующий между этим набором данных, и отобразить результат в виде:

A -> C = 4
C -> D = 4 
D -> F = 2
F -> A = 2
D -> A = 3
A -> B = 1
B -> D = 1
A -> C -> D = 2
C -> D -> F = 2 
D -> F -> A = 1
F -> A -> C = 1
C -> D -> A = 1
D -> A -> B = 1
A -> B -> D = 1

Число в конце представляет номер повторения этого паттерна. Когда пользователь вводит «A», лучшая рекомендация должна быть «C», а если пользователь вводит «A -> C», то это должно быть «D».

В настоящее время я делаю очистку данных с использованием панд в Python и для распознавания образов, я думаю, что scikit-learn может работать (хотя и не уверен). Есть ли какая-нибудь хорошая библиотека или алгоритм, который я могу использовать для решения этой проблемы, или есть какой-то хороший подход для решения этой проблемы?

Поскольку размер данных очень большой, я реализую его с помощью Python.

1 Ответ

0 голосов
/ 29 августа 2018

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

from sklearn.feature_extraction.text import CountVectorizer

# Changed the token_pattern to identify only single letter words
# n_gram = (2,5), to identify from 2 upto 5-grams
cv = CountVectorizer(ngram_range=(1,5), token_pattern=r"(?u)\b\w\b",
                     lowercase=False)

# Wrapped the data in a list, because CountVectorizer requires an iterable
data = ['A C D F A C D A B D A C D F A C D A B D']

# Learn about the data
cv.fit(data)

# This is just to prettify the printing
import pandas as pd
df = pd.DataFrame(cv.get_feature_names(), columns = ['pattern'])

# Add the frequencies
df['count'] = cv.transform(data).toarray()[0]   #<== Changing to dense matrix

df

#Output

      pattern  count
          A B      2
        A B D      2
      A B D A      1
    A B D A C      1
          A C      4
        A C D      4
      A C D A      2
    A C D A B      2
      A C D F      2
    A C D F A      2
          B D      2
        B D A      1
      B D A C      1
    B D A C D      1
          C D      4
        C D A      2
      C D A B      2
    C D A B D      2
        C D F      2
      C D F A      2
    C D F A C      2
          D A      3
        D A B      2
      D A B D      2
    D A B D A      1
        D A C      1
      D A C D      1
    D A C D F      1
          D F      2
        D F A      2
      D F A C      2
    D F A C D      2
          F A      2
        F A C      2
      F A C D      2
    F A C D A      2

Но я бы порекомендовал вам попробовать рекомендации, алгоритмы поиска, алгоритмы сопоставления правил (apriori) и т. Д., Которые помогут вам больше.

...