Как извлечь идентичные столбцы между фреймом данных pandas и разреженной матрицей - PullRequest
0 голосов
/ 27 декабря 2018

В настоящее время у меня есть небольшой обучающий набор функций tf-idf (около 250 столбцов отдельных слов), которые я вручную помечал как «1» и «0».Обучающий набор в основном небольшой, потому что для маркировки большего количества данных потребуется много времени, и я хочу посмотреть, насколько хорошо модель может справиться с этим небольшим обучающим набором.Поскольку данные невелики, я создал объекты с помощью tf-idf и преобразовал их в кадр данных pandas.Итак, минимальный пример, чтобы лучше понять, о чем я говорю, скажем, на тренировке у меня есть только:

              Hello great car    target variable
great car        0   .35 .25            1 
Hello great car  .40   .15 .10          0

Теперь я сделал то же самое с набором тестов.Тем не менее, набор тестов огромен по сравнению с обучающим набором

            car great plane boring yoo nice dude man jump fancy japan target
car japan  .53  0     0     0      0   0    0    0   0    0      .60   1
man car yoo .53 0     0     0      .30 0    0    .15 0    0        0   0
jump        0   0     0     0      0   0    0    0   .45  0        0   1

В действительности этот набор тестов во много тысяч раз больше, чем количество рядов, по сравнению с обучающим набором, и, следовательно, из-за этого онимеет больше возможностей (слова, которые я назвал tf-idfed).Теперь, поскольку это так, я смог получить его только в разреженную матрицу tf-idf, а не в фрейм данных pandas, поэтому в настоящее время вывод показывает:

<1383329x27870 sprase matrix fo type ',class 'numpy.float'>' with 15874611 stored elements in Compressed Sparse Row format>

Мой единственный вопрос, по порядкуДля .fit () и .predict () модели машинного обучения требуется одинаковое количество входных функций x в наборе обучения и тестирования, поэтому я хочу избавиться от всех функций в наборе тестов (есть тонна)которых нет в обучающем наборе, однако я не был уверен, как это сделать при сравнении разреженной матрицы и кадра данных панд?Как правило, когда я сравниваю кадры данных pandas, я просто делаю ax ['y']. Isin [a ['b']] и отфильтровываю все столбцы, которые являются общими для обоих.Не знаете, как сделать то же самое при сравнении кадра данных pandas и разреженной матрицы?

1 Ответ

0 голосов
/ 27 декабря 2018

Посмотрите, вот набросок того, как вы будете делать то, что пытаетесь сделать:

documents = [
    'the quick brown fox jumped over the lazy dog',
    'the name of the game is pain',
    'what is in a name? Is a rose as sweet by any other name',
    'the world is a world of many people',
    'i am running out of things to write',
    'yeah now I am totally out of things to write'
]

from sklearn.feature_extraction.text import TfidfVectorizer

# train test splitting, of course, you wouldn't do it this way...
import random
random.shuffle(documents)
train, test = documents[:len(documents)//2], documents[len(documents)//2:]


vectorizer = TfidfVectorizer()
Xtrain = vectorizer.fit_transform(train)
Xtest = vectorizer.transform(test)

Конечно, это не то, как вы на самом деле проводите тест на поезд.разделение / перекрестная проверка.Есть разные способы подойти к этому, вот только один из многих руководств по теме.

Хорошо, теперь вы бы сделали что-то вроде:

from sklearn.fancy_model import FancyModel

model = FancyModel(param=42).fit(Xtrain, Ytrain) # assuming you have your labels
yhat_train = model.predict(Xtrain)
yhat_test = model.predict(Xtest)

# compare your metric based on yhat_train and yhat_test....
...