素性ベクトルを作成する時、bag-of-words, bag-of-bigrams方式や単語トークンの文脈ベクトル等々のベクトルが考えられる。 これをプログラム上で実装しよとするときに便利なのが scikit-learn のDictVectorizeクラスである。 これを使うことで、dicクラスを簡単にベクトル化できる。 下記がサンプルとなる。 初期化の際のsprase=Trueにすると、scipyの疎行列のクラスが使える。 基本操作は ・fit(D)でベクトルの元となる辞書をロード ・fit_transform(D)で辞書をロードし、ベクトル化。辞書が内部で保持される。 ・transform(D')で内部保持した辞書に基づいてベクトル化される。(元の辞書未出現の単語は除外される) >>> from sklearn.feature_extraction import DictVectorizer >>> v = DictVectorizer(sparse=False) >>> D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}] >>> X = v.fit_transform(D) >>> X array([[ 2., 0., 1.], [ 0., 1., 3.]]) >>> v.inverse_transform(X) ==[{'bar': 2.0, 'foo': 1.0}, {'baz': 1.0, 'foo': 3.0}] True >>> v.transform({'foo': 4, 'unseen_feature': 3}) array([[ 0., 0., x 4.2 TF-IDF値の導出。 sci-kit learnにはTF-IDF値を出してくれるクラスも存在する。 |