2016-07-15 2 views
-1

Я работаю над проблемой, где у меня есть набор данных (анализ), как это:R: машинное обучение на основе классификации текстов

Description      Code 
---------------    ---------- 
abc def ijk     100 
def pqr      200 
abc def rst     100 
pqr mno      300 

У меня есть этот набор данные из около 200 000 записей с 150 четкие коды. Мне нужно создать рекомендательную систему ML, которая на основе текста входящего описания подскажет, в каком кодовом коде оно должно идти, основываясь на предыдущих распределениях.

Я сделал часть работы в R, используя Text Mining (tm package), чтобы очистить текст, извлеченные слова-частоты (findFreqTerms) и word-ассоциации (findAssocs) и вычислил вероятности в SQL этих слов- ассоциаций, чтобы перейти к определенному коду, тем самым я вижу, что между word-ассоциацией существует шаблон, как вы можете видеть ниже.

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%. Я попробовал Naive Bayes algo в R (поезд на 70%, тест на 30%), но точность довольно бедная, проверенная с помощью CrossTable.

Как подойти к этой проблеме с ML в R? Мне просто нужны указатели, отдых, в которые я могу копаться.

+0

Добро пожаловать на SO. Это не вопрос программирования - вам лучше советоваться с [Cross Validated] (http://stats.stackexchange.com) – Tchotchke

ответ

0

Здесь вы можете попробовать какой-нибудь байесовский подход к обучению. Из вашего описания это выглядит так, как будто вы продолжаете получать свое «описание», и вы можете захотеть объяснить какое-либо будущее отклонение от наблюдаемого поведения. Для опробования байесовского языка вы можете взять «запрос» от SQL как предварительную вероятность.

Отдохните еще до того, как вы попробуете любой другой алго, лучше поймете, почему наивные заливы - это надстройка? На простом языке это означает, что данные вашего поезда и теста различны. Можете ли вы изучить данные и попытаться найти, почему это такое поведение. Исходной точкой может быть обеспечение того, чтобы условия imp (от наивных заливов на полном наборе данных) распределялись равномерно в наборе данных поезда и теста. Наивные заливы в основном хороши в текстовых данных.

PS: Ожидать 80% + вероятность будет очень трудно, но попытаться сделать (не хотите, чтобы разрушить ваши надежды)

+0

Спасибо за ответ, я взял случайный образец (70% поезда и 30% тест) и проверили пропорцию распределения данных поезда и испытания следующим образом. { -------------------------------------- опорный стол (таблица (analysis_train_labels)) analysis_train_labels 0,07492420 0,05168699 0,07483388 0,06433133 0,35651893 prop.table (таблица (analysis_test_labels)) analysis_test_labels 0,07574435 0,05322576 0,07550351 0,06415390 0,35698588} –

+0

Я имел в виду, чтобы принять все данные , запускайте наивные заливы, изучайте большинство терминов imp (скажем, abc является одним из них), тогда вы можете сделать стратифицированную выборку, чтобы разделить тест поезда n, чтобы убедиться, что ваша модель не overfilts.eg, используя data.table 'test_ind <- analysis [ , образец (.I, round (0,3 * .N), FALSE), by = "abc, pqr, xyz"] $ V1' – abhiieor

+0

Еще раз спасибо, я понял, позвольте мне попробовать. Основываясь на слова-частотах (abc) & word-association (abc pqr), я могу видеть в своем анализе SQL, что вероятность увеличивается с помощью ассоциации слов (> 90%), но я узнал ее вручную, я хочу, чтобы мой алгоритм изучать его самостоятельно из существующих данных, а затем давать рекомендации по поступающим данным. Работая над этим ... –

Смежные вопросы