0

私の状況のちょうど簡単なアイデア:IDテキストカテゴリラベル: 私は入力の4列を持っています。scikit learn:TFIDFVectorizerを実行した後に他の機能を組み込む方法は?

私は私にTFIDFスコアの単語トークンを持つインスタンスのリストを与えるテキストTFIDFVectorizerを使用。

ここでは、(ベクタライザによって出力されるデータの別の機能として、TFIDFを渡す必要はありません)を含めることにします。

ベクトル化する前に、データはtrain_test_splitになりました。

これをどのように達成できますか?

初期コード:

#initialization 
import pandas as pd 
path = 'data\data.csv' 
rappler= pd.read_csv(path) 
X = rappler.text 
y = rappler.label 
#rappler.category - contains category for each instance 

#split train test data 
from sklearn.model_selection import train_test_split 
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1) 

#feature extraction 
from sklearn.feature_extraction.text import CountVectorizer 
vect = CountVectorizer() 
X_train_dtm = vect.fit_transform(X_train) 
#after or even prior to perform fit_transform, how can I properly add category as a feature? 
X_test_dtm = vect.transform(X_test) 

#actual classfication 
from sklearn.naive_bayes import MultinomialNB 
nb = MultinomialNB() 
nb.fit(X_train_dtm, y_train) 
y_pred_class = nb.predict(X_test_dtm) 

#display result 
from sklearn import metrics 
print(metrics.accuracy_score(y_test,y_pred_class)) 
+0

カテゴリの種類は?文字列 ?それが文字列なら、その機能をエンコードすることができます – MMF

+0

@MMFはい、文字列です。しかし整数が必要な場合、私はそれを実現させることができます。 – BossChix

答えて

0

私は、特徴抽出の後に、あなたの列車のテスト分割を行うことを示唆しています。

TF-IDF機能リストを取得したら、各サンプルに他の機能を追加するだけです。

カテゴリ機能をエンコードする必要があります。sklearn's LabelEncoderが良いでしょう。次に結合することができるnumpy配列の2つのセットが必要です。ここで

はおもちゃの例である:

X_tfidf = np.array([[0.1, 0.4, 0.2], [0.5, 0.4, 0.6]]) 
X_category = np.array([[1], [2]]) 
X = np.concatenate((X_tfidf, X_category), axis=1) 

この時点ではあったようにあなたが列車のテスト分割で始まる、継続します。

+0

こんにちは@AlexG、私は最初に訓練テストの分割を行う理由は、モデルがフィーチャーによって(テストデータから)オーバーフィッティングされないようにすることです。 – BossChix

+0

モデルをトレーニングする前に、まだフィーチャエンジニアリングの後にトレーニングテストの分割を行う必要があります。 – AlexG

0

あなたはそれらの出力を組み合わせた新しい 変圧器にFeatureUnions - as explained in the documentation

FeatureUnionsいくつかのトランスオブジェクトを組み合わせを使用する必要があります。 FeatureUnionは トランスオブジェクトのリストを取得します。フィッティング中、これらはそれぞれ独立してデータ に適合します。データを変換するために、変圧器は 並列に適用され、出力されたサンプルベクトルは を大規模なベクトルに連結して連結します。

FeatureUnionsを使用する方法のもう一つの良い例は、ここで見つけることができます:http://scikit-learn.org/stable/auto_examples/hetero_feature_union.html

は@AlexGが提案するようにするだけ異なるマトリックスを連結することは、おそらく簡単に選択肢はなくFeatureUnionsでこれらを行うためにscikit学習方法です。もの。

関連する問題