2013-06-22 5 views
0

Я хочу классифицировать текстовые данные с использованием модели классификатора SVM с помощью инструмента Rapidminer. Классификация будет многоразового типа. Поскольку мои данные имеют тип текста, как SVM может использоваться для этой классификации. Я знаю, что SVM работает только с числовыми данными.Многоуровневая классификация с использованием SVM с использованием quickminer

ответ

1

Отсутствующий кусок, который вы ищете, называется «вектор слова». В основном вам нужно создать новый пример, в котором один атрибут будет представлять собой одно слово. Для данного примера (то есть документа) значение (числовое) для этого атрибута покажет «важность» этого слова для этого документа.

Наивный подход заключается в использовании счетчика слова в документе, но обычно вы должны использовать TD-IDF (термин частотно-обратная частота документа), который также учитывает весь документ.

Для этого в RapidMiner вам необходимо установить расширение для интеллектуального анализа текста и использовать такие операторы, как «Обработка документов из данных» или «Обработка документов из файлов». Имейте в виду, что для интеллектуального анализа текста вам нужно будет выполнить дополнительные шаги предварительной обработки, такие как создание токенов, удаление стоп-слов (общих слов, которые вы можете найти почти во всех документах и ​​которые поэтому не очень полезны) и использовать основы слов (так «слово» и «слова» будут рассматриваться одинаково).

Вот небольшой пример:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<process version="5.3.009"> 
    <context> 
    <input/> 
    <output/> 
    <macros/> 
    </context> 
    <operator activated="true" class="process" compatibility="5.3.009" expanded="true" name="Process"> 
    <process expanded="true"> 
     <operator activated="true" class="text:create_document" compatibility="5.3.000" expanded="true" height="60" name="Create Document" width="90" x="45" y="75"> 
     <parameter key="text" value="I want to classify text data using classifier model SVM with Rapidminer tool. Classification would be of multilable type. Since my data is of text type, how SVM can be used for this classification. I know that SVM works with numeric data only."/> 
     </operator> 
     <operator activated="true" class="text:create_document" compatibility="5.3.000" expanded="true" height="60" name="Create Document (2)" width="90" x="45" y="165"> 
     <parameter key="text" value="The missing piece you are looking for is called &quot;word vector&quot;. Basically you have to create a new example set for which the attributes will represent the words. For a given example (i.e. a document) the (numerical) value for this attribute will show the &quot;importance&quot; of this word for this document. &#10;&#10;A naive approach would be to use the count of the word within the document, but typically you should use TD-IDF (term frequency–inverse document frequency) which will take the whole document corpus into account as well.&#10;&#10;To do this in RapidMiner you have to install the text mining extension and use operators like &quot;Process Documents from Data&quot; or &quot;Process Documents from Files&quot;. Keep in mind that for text mining you will need to conduct more preprocessing steps like creating tokens, removing stop words (common words which you can find in nearly all documents and which are therefore not very helpful) and use the stem of the words (so &quot;word&quot; and &quot;words&quot; will be treated equally).&#10;&#10;Here is a small example:"/> 
     </operator> 
     <operator activated="true" class="text:process_documents" compatibility="5.3.000" expanded="true" height="112" name="Process Documents" width="90" x="179" y="75"> 
     <process expanded="true"> 
      <operator activated="true" class="text:tokenize" compatibility="5.3.000" expanded="true" height="60" name="Tokenize" width="90" x="45" y="30"/> 
      <operator activated="true" class="text:filter_stopwords_english" compatibility="5.3.000" expanded="true" height="60" name="Filter Stopwords (English)" width="90" x="179" y="30"/> 
      <operator activated="true" class="text:stem_porter" compatibility="5.3.000" expanded="true" height="60" name="Stem (Porter)" width="90" x="313" y="30"/> 
      <connect from_port="document" to_op="Tokenize" to_port="document"/> 
      <connect from_op="Tokenize" from_port="document" to_op="Filter Stopwords (English)" to_port="document"/> 
      <connect from_op="Filter Stopwords (English)" from_port="document" to_op="Stem (Porter)" to_port="document"/> 
      <connect from_op="Stem (Porter)" from_port="document" to_port="document 1"/> 
      <portSpacing port="source_document" spacing="0"/> 
      <portSpacing port="sink_document 1" spacing="0"/> 
      <portSpacing port="sink_document 2" spacing="0"/> 
     </process> 
     </operator> 
     <connect from_op="Create Document" from_port="output" to_op="Process Documents" to_port="documents 1"/> 
     <connect from_op="Create Document (2)" from_port="output" to_op="Process Documents" to_port="documents 2"/> 
     <connect from_op="Process Documents" from_port="example set" to_port="result 1"/> 
     <portSpacing port="source_input 1" spacing="0"/> 
     <portSpacing port="sink_result 1" spacing="0"/> 
     <portSpacing port="sink_result 2" spacing="0"/> 
    </process> 
    </operator> 
</process> 

BTW: Есть также несколько неплохих горнодобывающие тексты учебников с RapidMiner на YouTube.

+0

Спасибо за ваш ответ. Не могли бы вы направить мне хороший учебник по интеллектуальному текстурованию, где я могу найти пример того, как SVM используется для мульти-маркировки/многоклассификации с использованием словарного вектора. – kailash

+0

Поскольку SVM предоставляет биномиальный вывод (2 значения), как он может предоставлять значения нескольких классов? – kailash

1

Этот вопрос может быть довольно старым, но, возможно, таких людей больше, как я, просто экспериментирует с Rapidminer, надеясь решить точно такую ​​же проблему.

Я предполагаю, что первая часть о , касающаяся текста, в общем, с помощью плагина Rapidminer «Расширение текстового разметки» уже должным образом объяснялось maerch раньше. Но, принимая во внимание комментарии Kailash, основной проблемой является несовместимость между биномиальной моделью SVM и полиномиальным набором ввода/метки.

Фактическая подача модели SVM осуществляется путем добавления метаоператора «Полином по биномиальной классификации» в качестве обертки вокруг SVM. Он объединяет входные классы несколько раз (таким образом, что вы можете выбрать параметр «стратегии классификации»), так что всегда есть две группы ввода и передает их в SVM до тех пор, пока не будет получен комбинированный результат. Эта итоговая модель затем может обрабатывать несколько классов.

Фрагмент процесса ниже иллюстрирует SVM (параметры по умолчанию) с его Poly2Bi-обертку:

<process expanded="true"> 
    <operator activated="true" class="polynomial_by_binomial_classification" compatibility="5.3.015" expanded="true" height="76" name="Polynominal by Binominal Classification" width="90" x="112" y="120"> 
     <parameter key="classification_strategies" value="1 against all"/> 
     <parameter key="random_code_multiplicator" value="2.0"/> 
     <parameter key="use_local_random_seed" value="false"/> 
     <parameter key="local_random_seed" value="1992"/> 
     <process expanded="true"> 
      <operator activated="true" class="support_vector_machine_linear" compatibility="5.3.015" expanded="true" height="76" name="SVM (Linear)" width="90" x="179" y="210"> 
       <parameter key="kernel_cache" value="200"/> 
       <parameter key="C" value="0.0"/> 
       <parameter key="convergence_epsilon" value="0.001"/> 
       <parameter key="max_iterations" value="100000"/> 
       <parameter key="scale" value="true"/> 
       <parameter key="L_pos" value="1.0"/> 
       <parameter key="L_neg" value="1.0"/> 
       <parameter key="epsilon" value="0.0"/> 
       <parameter key="epsilon_plus" value="0.0"/> 
       <parameter key="epsilon_minus" value="0.0"/> 
       <parameter key="balance_cost" value="false"/> 
       <parameter key="quadratic_loss_pos" value="false"/> 
       <parameter key="quadratic_loss_neg" value="false"/> 
      </operator> 
      <connect from_port="training set" to_op="SVM (Linear)" to_port="training set"/> 
      <connect from_op="SVM (Linear)" from_port="model" to_port="model"/> 
      <portSpacing port="source_training set" spacing="0"/> 
      <portSpacing port="sink_model" spacing="0"/> 
     </process> 
    </operator> 
    <connect from_port="training" to_op="Polynominal by Binominal Classification" to_port="training set"/> 
    <connect from_op="Polynominal by Binominal Classification" from_port="model" to_port="model"/> 
    <portSpacing port="source_training" spacing="0"/> 
    <portSpacing port="sink_model" spacing="0"/> 
    <portSpacing port="sink_through 1" spacing="0"/> 
</process> 

Обратите внимание, что (по крайней мере) версия 5.3.015 из RapidMiner жалуется, когда оператор Poly2Bi используется в этой моде внутри области обучения оператора валидации, и в зоне тестирования есть оператор Performance. Появится сообщение об ошибке оператора Performance:

Этикетка и прогнозирование должны быть одного типа, но являются полиномиальными и номинальными соответственно.

Но в RapidMiner форумах, они point out, что это кажется бесполезным предупреждение которые вы можете игнорировать. В моем случае, процесс работал отлично также.