我有一个巨大的数据集,其中包含一些重复的数据(用户日志文件),并希望基于用户下载进行类似的模式出现识别和推荐。模式识别完成后,我需要向用户推荐最佳的价值。
例如,以下是基于时间的下载日志:
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实现它。
答案 0 :(得分:0)
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)算法等,这将为您带来更多帮助。