R:基于文本分类的机器学习

时间:2016-07-15 04:26:45

标签: r machine-learning text-classification

我正在解决一个问题,我有这样的数据集(分析):

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解决这个问题?我只需要指针,休息我可以深入挖掘。

1 个答案:

答案 0 :(得分:0)

您可以在这里尝试一些贝叶斯学习方法。从您的描述中看起来好像您将继续获取“描述”,并且您可能想要考虑将来偏离观察到的行为。对于尝试贝叶斯语,您可以将SQL中的“prec”作为先验概率。

甚至在你尝试任何其他算法之前休息一下,了解为什么天真的贝叶斯是一个过度装扮会更好?用简单的语言表示您的列车和测试数据不同。您可以查看数据并尝试找出它为什么会这样的行为。起点可以确保imp项(来自完整数据集上的朴素贝叶)在训练和测试数据集中均匀分布。朴素的贝叶斯在文本数据方面做得非常好。

PS:预计80%以上的概率会非常困难,但要尝试(不想破坏你的希望)