Склеарн с использованием обработки естественного языка с числовыми данными - PullRequest
1 голос
/ 24 января 2020

Я использую sklearn для проекта, и у меня есть два столбца для прогнозирования. Один столбец - text, представляющий собой серию статей, а другой - equal_cnts, представляющий собой действительное число. Я пытаюсь создать модель, которая обучается как тексту, так и числам, используя SVM, но мне трудно понять, как использовать обе функции.

vect = CountVectorizer(ngram_range=(1, 2))
tfidf = TfidfTransformer()
svm = svm.SVC(kernel='linear', C = 100, gamma = 0.1)

text_clf = Pipeline([('vect', vect), ('tfidf', tfidf), ('svm', svm)])
scores = cross_val_score(text_clf, pd.concat([df['text'], df['equal_cnt']], axis = 1), df['empirical'], cv=10)

В настоящее время я пытаюсь сделать выше, где конвейер предназначен для обработки текста, а модель проверяется на точность по df["empirical"].

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Я думаю, что современный и удобный способ сделать это с помощью scikit-learn будет использовать ColumnTransformer и будет выглядеть так:

from sklearn.pipeline import make_pipeline
from sklearn.compose import ColumnTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC

X = df.drop("empirical", axis=1)
y = df["empirical"]

preprocessor = ColumnTransformer(
    # We apply a TF-IDF vectorizer to the "text" column
    [("text", TfidfVectorizer(max_features=10), "text"),], 
    # the "passthrough" value for the "remainder" parameter lets 'equal_cnt' pass 
    # through the first stage of the pipeline without modifying this column
    remainder="passthrough"  
)
classifier = SVC(kernel='linear', C=1., gamma='scale')

pipeline = make_pipeline(preprocessor, classifier)

scores = cross_val_score(pipeline, X, y, cv=10)

И вы можете настроить TF - гипер-параметры IDF и SVM, если необходимо, конечно.

0 голосов
/ 24 января 2020

Вы можете преобразовать разреженную матрицу из преобразователя TFIDF во фрейм данных, а затем просто назначить числовой столбец в качестве дополнительного столбца для этого фрейма данных. Позвольте мне показать вам это на примере:

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd 
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
textMatDf = pd.DataFrame(X.toarray())
textMatDf['numCol'] = df['equal_cnt']

Теперь этот textMatDf можно использовать для обучения и проверки.

...