В ColumnTransformer я хочу использовать конвейер Tfidf.Но даже для этого простого примера тип выходного преобразования исходного конвейера и входного сигнала в ColumnTransformer имеет совершенно другой тип.Почему тип отличается?
Несколько столбцов могут быть переданы как массив ['col1', 'col2'].Почему это не работает для одного столбца ['col1']?
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
X = pd.DataFrame({'message': ['Lets start.', 'This is it.', 'We are done.']})
def tokenize(text):
tokens = word_tokenize(text)
lemmatizer = WordNetLemmatizer()
clean_tokens = []
for tok in tokens:
clean_tok = lemmatizer.lemmatize(tok).lower().strip()
clean_tokens.append(clean_tok)
return clean_tokens
p = Pipeline(steps = [
('vect', CountVectorizer(tokenizer=tokenize)),
('tfidf', TfidfTransformer())
])
print(p.fit_transform(X['message']))
# (0, 6) 0.652490884512534
# (0, 5) 0.652490884512534
# (0, 0) 0.3853716274664007
# (1, 7) 0.546454011634009
# (1, 4) 0.546454011634009
# (1, 3) 0.546454011634009
# (1, 0) 0.3227445421804912
# (2, 8) 0.546454011634009
# (2, 2) 0.546454011634009
# (2, 1) 0.546454011634009
# (2, 0) 0.3227445421804912
ct = ColumnTransformer(transformers = [
('txt', p, ['message'])
])
print(ct.fit_transform(X))
#array([[1.]])
ct = ColumnTransformer(transformers = [
('txt', p, 'message')
])
print(ct.fit_transform(X))
#[[0.38537163 0. 0. 0. 0. 0.65249088
# 0.65249088 0. 0. ]
# [0.32274454 0. 0. 0.54645401 0.54645401 0.
# 0. 0.54645401 0. ]
# [0.32274454 0.54645401 0.54645401 0. 0. 0.
# 0. 0. 0.54645401]]