2

약 6200 개의 카테고리에 대해 약 44 백만 개의 교육 사례가 있습니다. 훈련 후, 모델은 ~ Mahout - Naive Bayes Model 매우 느립니다.

그리고 테스트하는 동안, 4백50메가바이트

나옵니다 5 병렬 매퍼 (각각의 주어진 충분한 RAM)와, 너무 느린 ~ 4 개 항목 두 번째의 속도로 분류 진행됩니다.

어떻게 속도를 높일 수 있습니까? 내가 생각할 수있는 한 가지 방법은 단어 코퍼스를 줄이는 것이지만 정확성을 잃을 까봐 두려워합니다. 나는 maxDFPercent를 80으로 설정했다.

또 다른 방법으로는 클러스터링 알고리즘을 통해 항목을 실행하고 경험적으로 클러스터 수를 최대화하면서 각 범주 내의 항목을 단일 클러스터로 제한했다. 이렇게하면 각 클러스터마다 별도의 모델을 구축 할 수 있으므로 교육 및 테스트 시간이 단축 될 수 있습니다.

다른 의견은 있습니까?

편집 : 아래의 몇 가지 답변 후

, 난 하나 "매우"가까운 항목의 그룹을 식별, 클러스터링 알고리즘을 실행하여 다운 샘플링의 형태를하고 고민 시작 또 다른 하나는 그 밀접하게 서로 가깝지 않은 "매우"근접한 그룹과 다른 샘플로부터 몇 개의 샘플 조합을 취하는 것입니다.

는 또한 N-g ( http://lucene.apache.org/core/4_1_0/suggest/org/apache/lucene/search/spell/NGramDistance.html)

나는 또한 ML 라이브러리의 일부를 활용하기 위해 하둡 스트리밍 API를 사용하여 고려 중이을 사용하는 동안 편집 거리를 통합 관련 데이터 정규화 기술의 형태를 사용하는 방법에 대해 생각하기 시작 파이썬에서 사용할 수는 http://scikit-learn.org/stable/modules/svm.html#svm는 가능한 한 빨리

답변

1

"하지만 정확도가 떨어지는 것을 두려워합니다. 실제로 적은 기능이나 적은 문서를 사용해 보았습니까? 두려움만큼 정확성을 잃을 수는 없습니다. 여기에 몇 가지 놀이가있을 수 있습니다 :

  • 같은 수의 문서는 같은 기간에있을 가능성이 없습니다.시간이 지남에 따라 스트림의 내용은 필연적으로 표류 할 것이고 하나의 클래스를 나타내는 단어는 다른 클래스를 나타낼 수 있습니다. 올해의 데이터를 작년 데이터에 대해 교육 한 분류 기준에 추가하는 것은 단지 혼란스러운 일입니다. 적은 양의 데이터로 훈련하면 훨씬 더 나은 성능을 얻을 수 있습니다.
  • @ Anony-Mousse가 이미 말했듯이 대부분의 기능은 도움이되지 않습니다. 분류자를 훈련시키기 전에 일부 기능 선택을 수행 할 수 있습니다. 이것은 또한 훈련을 가속화 할 것입니다. 과거에는 상호 정보로 좋은 결과를 얻었습니다.

비슷한 척도의 데이터 세트에 대해 이전에 분류자를 훈련했고 시스템이 200k 기능만으로 가장 잘 작동한다는 것을 알았고 교육을 위해 10 %를 초과하는 데이터를 사용해도 정확도가 향상되지 않았습니다.

추신 : 귀하의 문제 및 데이터 세트에 대해 더 자세히 알려주십시오. 클러스터링 대표 문서를 선택하는 좋은 방법이지만 시간이 오래 걸릴 것 : 질문 후


편집이 업데이트되었습니다. 새로운 데이터가 들어 오면 주기적으로 다시 실행해야합니다.

편집 거리가 길은 아닌 것 같습니다. 일반적인 알고리즘은 입력 문자열의 길이가 2 차적이기 때문에 코퍼스의 각 단어 쌍에 대해 실행해야 할 수 있습니다. 그것은 오랜 시간이다!

나는 무작위 표본 추출을 한 번 제안합니다. 당신은 정확성에 대해 염려하지만 Naive Bayes를 사용한다고 말합니다. 최고의 모델 돈을 사기 원한다면 비선형 SVM을 사용하게 될 것이며 훈련을 끝내고 살 수는 없을 것입니다. 사람들은 알려진 이슈를 가진 분류 자에게 의지합니다. Naive Bayes는 Naive라고 불리는 이유가 있습니다. 왜냐하면 대안보다 훨씬 빠르기는하지만 성능은 종종 조금만 악화되기 때문입니다. 교육 시간 ~ 월

  • 선형 SVM- 83 % F1 점수 - - 교육 시간 ~ 하루
  • 나이브 Bayes- 82

    • RBF SVM- 85 % F1 점수 : 내 경험에서 당신에게 예를 들게 % F1 점수 - 훈련 시간 - 일

    paper과 동일한 내용을 찾을 수 있습니다. 호기심에서 당신은 어떤 정확성을 얻고 있습니까?

  • +0

    글쎄, 솔직하게 말해서, 정확도를 왜곡하지 않고 각 카테고리 내에서 데이터를 다운 샘플링하는 가장 좋은 방법을 찾으려고 계속 노력 중이다. 랜덤 샘플링은 내가하고 싶은 마지막 것입니다. 데이터 세트는 온라인으로 판매되는 항목들로 구성되어 있으며 "Men 's Clothing", "Refrigerators"등과 같은 관련 카테고리에 들어있는 새로운 항목을 분류하려고합니다. 또한 내 게시물을 편집 했으므로 댓글을 달 수 있습니다. 그게 올바른 방향이라면? – Nerrve

    +0

    각 범주 내의 데이터도 상당히 비뚤어 질 수 있습니다. 나는 각 항목이 만들어지는 방식을 언급하고있다. 일부 벤더는 자신의 아이템에 대해 매우 잘 설명하고있는 반면, 다른 벤더는 최소한의 세부 사항만을 제공 할 수도 있습니다. 각 카테고리의 항목 중 일부는 다른 브랜드에서 올 수 있으며 모든 브랜드에는 영어 이름이 없을 수 있으며 일부 설명에는 영어가 아닌 단어가 포함될 수도 있습니다. 나는 단순한 형태소 분석이 여기 도움이되지 않는다는 것을 깨달았고, 더 이국적인 무언가가있을 필요가있다. – Nerrve

    +0

    업데이트 대답 : – mbatchkarov

    2

    자두 중지 단어 그렇지 않으면 쓸모없는 단어 (너무 낮은 지원 등) (이 내가 아래 답변 중 하나에 언급 된 사용 liblinear 생각) 여기 여기 http://pydata.org/downloads/을 나열하고부터.

    클러스터링을 사용하는 방법에 따라 실제로 테스트 단계가 훨씬 더 비쌉니다.

    Mahout 이외의 도구를 사용해보십시오. Mahout이 정말 느린 것으로 나타났습니다. 그것은 어딘가에서 정말 높은 오버 헤드가 발생하는 것 같습니다.

    +0

    Hadoop 스트리밍을 사용하는 Python 기반 데이터 도구를 제안 하시겠습니까? – Nerrve

    +1

    아니요. hadoop 스트리밍을 사용하면 텍스트를 반복적으로 반복하는 오버 헤드를 지불하게됩니다. 성능을 위해 베어 메탈로 내려 가고 싶습니다. –

    2

    적은 훈련을 사용하면 시험을 실시 할 수 있습니다. 특정 양의 훈련 예제를 사용하면 보이지 않는 예제에 대한 분류 정확도가 증가하지 않을 것입니다. 범주 당 100, 500, 1000, 5000, ... 등의 예제를 사용하고 20 %를 사용하여 정확도를 검증하는 것이 좋습니다. 더 이상 증가하지 않으면 필요로하는 데이터 양을 찾았으니 지금은 많이 사용하지 않을 수 있습니다.

    다른 접근법은 다른 라이브러리를 사용하는 것입니다. 문서 분류의 경우 liblinear가 매우 매우 빠르다. 그것은 더 낮은 수준 다음 mahout있을 수 있습니다.