私はすでに特徴が抽出され、テキストファイルで与えられているいくつかの文書に対してバイナリ分類を行っています。私の問題は、テキストの機能と年数などの数値機能があることです。 1つの試料をこの形式で与えられます。scikit-learnで異種の特徴を組み合わせる
label |title text |otherText text |numFeature1 number |numFeature2 number
私はfeature unionsについてのマニュアルを参照して、以下のよが、そのユースケースは少し異なっています。私はこれらの数値的特徴が既に与えられているので、別の特徴から特徴を抽出しない。
現在、私は次のようにセットアップを使用しています:
pipeline = Pipeline([
('features', Features()),
('union', FeatureUnion(
transformer_list=[
('title', Pipeline([
('selector', ItemSelector(key='title')),
('tfidf', TfidfVectorizer()),
])),
('otherText', Pipeline([
('selector', ItemSelector(key='otherText')),
('tfidf', TfidfVectorizer()),
])),
('numFeature1', Pipeline([
('selector', ItemSelector(key='numFeature1')),
])),
('numFeature2', Pipeline([
('selector', ItemSelector(key='numFeature2')),
])),
],
)),
('classifier', MultinomialNB()),
])
機能のクラスはまた、ドキュメントから採用されている:
class Features(BaseEstimator, TransformerMixin):
def fit(self, x, y=None):
return self
def transform(self, posts):
features = np.recarray(shape=(len(posts),),
dtype=[('title', object),('otherText', object),
('numFeature1', object),('numFeature2', object)])
for i, text in enumerate(posts):
l = re.split("\|\w+", text)
features['title'][i] = l[1]
features['otherText'][i] = l[2]
features['numFeature1'][i] = l[3]
features['numFeature2'][i] = l[4]
return features
私の問題は今:どのように私は追加しませんFeatureUnionの数値機能CountVectorizerを使用するとき、私は "ValueError:空の語彙を得ます;ドキュメントにはストップワードしか含まれていないでしょう"とDictVectorizerを使って1つのエントリだけを使用しても、
Key = 'numFeature1'と 'numFeature2'のItemSelector()クラスを使用してください –
これはValueErrorを返します:ブロック[0 ,:]には行の寸法が一致しません ' – lup3x
パイプライン全体のコードを表示します。 –