Ответ 1
Это было недавно реализовано в мастер-ветке scikit-learn под названием FeatureUnion
:
http://scikit-learn.org/dev/modules/pipeline.html#feature-union
Я использую sklearn.pipeline.Pipeline
для создания экстракторов функций и классификатора. Есть ли способ объединить несколько классов выбора функций (например, из sklearn.feature_selection.text
) параллельно и присоединить их выход?
Мой код выглядит следующим образом:
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', SGDClassifier())])
Это приводит к следующему:
vect -> tfidf -> clf
Я хочу указать конвейер, который выглядит следующим образом:
vect1 -> tfidf1 \
-> clf
vect2 -> tfidf2 /
Это было недавно реализовано в мастер-ветке scikit-learn под названием FeatureUnion
:
http://scikit-learn.org/dev/modules/pipeline.html#feature-union
я пробовал следующее решение, но при использовании только функций TFIDF + BOW он дает точность: 0,899029126214, когда я добавил к ним лексические характеристики: точность: 0,7747572815533981 я использовал фуруньюон для объединения матрицы тех же характеристик (TFIDF + лук) затем я использовал стек h.stack для сложения featureunion.vector + лексического вектора, код которого выглядит следующим образом:
# average number of words per sentence
fvs_lexical[e, 0] = words_per_sentence.mean()
# sentence length variation
fvs_lexical[e, 1] = words_per_sentence.std()
# Lexical diversity
fvs_lexical[e, 2] = len(vocab) / float(len(words))
# apply whitening to decorrelate the features
fvs_lexical = whiten(fvs_lexical)
#bag of wrods features
bow_vectorizer = CountVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english')
#tfidf
tfidf_vectorizer = TfidfVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english')
#vectorizer and fitting for the unified features
vectorizer = FeatureUnion([ ("baw", bow_vectorizer),("tfidf", tfidf_vectorizer)
fvs_lexical_vector = CountVectorizer(fvs_lexical)
x1 =vectorizer.fit_transform (train['text'].values.astype('U'))
x2 =fvs_lexical_vector.fit_transform (train['text'].values.astype('U'))
x= scipy.sparse.hstack((x2,x3),format='csr')
y = np.asarray(train['label'].values.astype('U'))
Затем я запустил логистическую регрессию