【问题标题】:How to recognize repeated pattern over a data and make some recommendation?如何识别数据上的重复模式并提出一些建议?
【发布时间】:2019-02-03 19:01:35
【问题描述】:

我有一个巨大的数据集,其中包含一些重复数据(用户日志文件),并希望根据用户下载进行类似的模式出现识别和推荐。模式识别完成后,我需要向用户推荐最佳价值。

例如以下是基于时间的下载日志:

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 中的 pandas 进行数据清理和模式识别,我认为 scikit-learn 可能有效(但不确定)。 有没有什么好的库或算法可以用来解决这个问题,或者有什么好的方法可以解决这个问题?

由于数据量很大,我是用Python实现的。

【问题讨论】:

  • 当这种模式有 4 次重复时,为什么 A->C = 2? C->D 也一样?
  • @VivekKumar 对不起我的错误。已编辑。谢谢。
  • 不只是这两个,其他的都有类似的错误。 D->F, F->A, D->A... 无论如何,我得到你想要的。但是您应该发布来自您的真实数据的样本,而不是 A、B、C..(除非那是您的真实数据)

标签: python scikit-learn pattern-matching bigdata data-science


【解决方案1】:

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)算法等,这将对你有更多帮助。

【讨论】:

  • 谢谢。将尝试实现这一点。
猜你喜欢
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2014-02-18
  • 2019-06-19
  • 2010-10-18
  • 2021-09-01
  • 1970-01-01
相关资源
最近更新 更多