我正在解决一个问题,我有这样的数据集(分析):
Description Code
--------------- ----------
abc def ijk 100
def pqr 200
abc def rst 100
pqr mno 300
我拥有大约200,000条记录的数据集,包含150个不同的代码。 我需要制作一个ML推荐系统,该系统基于传入的描述文本建议根据以前的分配在哪个代码桶中。
我使用文本挖掘(tm包)来完成R中的一些基础工作来清理文本,获取字频(findFreqTerms)和字关联(findAssocs)并计算这些字关联的SQL中的概率进入特定的代码,我可以看到在单词关联之间存在一种模式,如下所示。
SELECT description,
code,
cnt descdcnt,
sum(cnt) over (PARTITION BY description) desccnt,
cnt*100/sum(cnt) over (PARTITION BY description) perc
FROM
(
SELECT CASE
WHEN lower(description) LIKE '%abc%pqr%' THEN 'abc pqr'
WHEN lower(description) LIKE '%def%mno%' THEN 'def mno'
WHEN lower(description) LIKE '%xyz%ijk%' THEN 'xyz ijk'
................................................
ELSE 'other' END description, code, count(*) cnt
FROM analysis
GROUP BY CASE
WHEN lower(description) LIKE '%abc%pqr%' THEN 'abc pqr'
WHEN lower(description) LIKE '%def%mno%' THEN 'def mno'
WHEN lower(description) LIKE '%xyz%ijk%' THEN 'xyz ijk'
...........................................
ELSE 'other' END, code
)
ORDER BY perc DESC;
Description Code descdcnt desccnt perc
-------------------------------------------------------
abc pqr 100 988 1000 98.8
xyz mno 200 935 1000 93.5
def wqr 300 854 1000 85.4
我想开发一个可以从上述模式中学习的ML,并建议概率超过80%的建议。我在R中尝试了Naive Bayes algo(70%的火车,30%的测试),但准确度很差,用CrossTable验证。
如何用R中的ML解决这个问题?我只需要指针,休息我可以深入挖掘。
答案 0 :(得分:0)
您可以在这里尝试一些贝叶斯学习方法。从您的描述中看起来好像您将继续获取“描述”,并且您可能想要考虑将来偏离观察到的行为。对于尝试贝叶斯语,您可以将SQL中的“prec”作为先验概率。
甚至在你尝试任何其他算法之前休息一下,了解为什么天真的贝叶斯是一个过度装扮会更好?用简单的语言表示您的列车和测试数据不同。您可以查看数据并尝试找出它为什么会这样的行为。起点可以确保imp项(来自完整数据集上的朴素贝叶)在训练和测试数据集中均匀分布。朴素的贝叶斯在文本数据方面做得非常好。
PS:预计80%以上的概率会非常困难,但要尝试(不想破坏你的希望)