Как распечатать кластеры SVM в python - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу классифицировать строки столбца, используя метод кластеризации SVM. На net я могу найти так много контента, который дает графики или точность прогнозирования печати, но я не могу найти способы распечатать мой кластер. Приведенный ниже пример лучше объяснит, что я пытаюсь сделать:

У меня есть фрейм данных, который будет использоваться в качестве тестового набора данных

import pandas as pd
train_data = {'Serial': [1,2,3,4,5,6,7,8,9,10],
        'Text': ['Dog is a faithful animal',cat are not reliable','Tortoise can live a long life',
        'camel stores water in its hump','horse are used as means of transport','pen is a powerful weapon',
        'stop when the signal is red','oxygen is a life gas','chocolates are bad for health','lets grab a cup of coffee'],
        'classification':['Animal','Animal','Animal','Animal','Animal','Thing','Thing','Miscellenous','Thing','Thing']
        }

df = pd.DataFrame(train_data, columns = ['Serial', 'Text', 'classification'])
print (df)

Я хочу предсказать, говорит ли текстовая строка о Animal / Вещь или miscelleneus. Данные теста, которые я хочу передать:

test_data = {'Serial': [1,2,3,4,5],
        'Text': ['Is this your dog?','Lets talk about the problem','You have a cat eye',
        'Donot forget to take the camel ride when u goto dessert','Plants give us O2']
        }

df = pd.DataFrame(test_data, columns = ['Serial', 'Text'])

Ожидаемый результат - создание дополнительного столбца «Классификация» в тестовом фрейме данных со значениями [«Животное», «Разное», «Животное», «Животное» , 'Miscellenous']

1 Ответ

0 голосов
/ 06 марта 2020

Вот решение вашей проблемы:

# import tfidf-vectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
# import support vector classifier
from sklearn.svm import SVC 
import pandas as pd

train_data = {'Serial': [1,2,3,4,5,6,7,8,9,10],
        'Text': ['Dog is a faithful animal','cat are not reliable','Tortoise can live a long life',
        'camel stores water in its hump','horse are used as means of transport','pen is a powerful weapon',
        'stop when the signal is red','oxygen is a life gas','chocolates are bad for health','lets grab a cup of coffee'],
        'classification':['Animal','Animal','Animal','Animal','Animal','Thing','Thing','Miscellenous','Thing','Thing']
        }

train_df = pd.DataFrame(train_data, columns = ['Serial', 'Text', 'classification'])
display(train_df)


test_data = {'Serial': [1,2,3,4,5],
        'Text': ['Is this your dog?','Lets talk about the problem','You have a cat eye',
        'Donot forget to take the camel ride when u goto dessert','Plants give us O2']
        }

test_df = pd.DataFrame(test_data, columns = ['Serial', 'Text'])
display(test_df)


# Load training data (text) from the dataframe and form to a list containing all the entries
training_data = train_df['Text'].tolist()

# Load training labels from the dataframe and form to a list as well
training_labels = train_df['classification'].tolist()

# Load testing data from the dataframe and form a list
testing_data = test_df['Text'].tolist()

# Get a tfidf vectorizer to process the text into vectors
vectorizer = TfidfVectorizer()

# Fit the tfidf-vectorizer to training data and transform the training text into vectors
X_train = vectorizer.fit_transform(training_data)

# Transform the testing text into vectors
X_test = vectorizer.transform(testing_data)

# Get the SVC classifier
clf = SVC()

# Train the SVC with the training data (data points and labels)
clf.fit(X_train, training_labels)

# Predict the test samples
print(clf.predict(X_test))

# Add classification results to test dataframe
test_df['Classification'] = clf.predict(X_test)

# Display test dataframe
display(test_df)

В качестве объяснения подхода:

У вас есть данные о тренировках, и вы хотите использовать их для обучить SVM, а затем предсказать тестовые данные с помощью меток.

Это означает, что вам нужно извлечь обучающие данные и метки для каждой точки данных (поэтому для каждой фразы вам нужно знать, является ли это животное или вещь et c.), а затем вам нужно настроить и обучить SVM. Здесь я использовал реализацию из scikit-learn.

Более того, вы не можете просто обучить SVM необработанным текстовым данным, потому что для этого требуются числовые значения (числа). Это означает, что вам нужно преобразовать текстовые данные в числа. Это « извлечение элемента из текста », и для этого одним из распространенных подходов является использование понятия «частота-инверсия частоты-документа (TF-IDF)».

Теперь вы можете используйте векторное представление каждой фразы в сочетании с меткой, чтобы обучить SVM, а затем используйте ее для классификации тестовых данных:)

Короче говоря, шаги:

  1. Извлечение точки данных и метки из обучения
  2. Извлечение точек данных из тестирования
  3. Настройка классификатора SVM
  4. Настройка векторизатора TF-IDF и его привязка к данным обучения
  5. Преобразование данных обучения и данных тестирования с помощью векторизатора tf-idf
  6. Обучение классификатора SVM
  7. Классификация данных испытаний с помощью обученного классификатора

Надеюсь, это поможет!

...