我有一个庞大的数据集,其中包含一些重复的数据(用户日志文件(,并希望根据用户下载进行类似的模式发生识别和建议。一旦模式识别完成,我需要向用户推荐最佳值。
例如,以下是基于时间的下载日志:
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实现它。
当前的问题可以通过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)bwb",
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
但我建议您尝试推荐器,模式查找,关联规则挖掘(先验(算法等,这将对您有所帮助。