静かなる名辞

pythonとプログラミングのこと


CountVectorizer

ロジスティック回帰で特徴語を抽出する

はじめに 線形判別分析など、線形の判別モデルは係数を使って各クラスに重要な特徴を取り出すことができます。 今回はロジスティック回帰を使って、20newsgroupsのデータセットから各クラスの特徴語を取り出してみます。 実験 以下のようなコードを走らせま…

scikit-learnのモデルに疎行列(csr_matrix)を渡したときの速度

はじめに sklearnのモデルには疎行列を取れるものもたくさんありますが、この場合速度差があったりするのでしょうか。 いろいろなデータとモデルで検証を行ってみました。 目次 はじめに 実験1:digitsを分類させてみる 実験2:多項ナイーブベイズについても…

sklearnのfetch_20newsgroups_vectorizedでベクトル化された20 newsgroupsを試す

はじめに 20 newsgroupsはこのブログでも過去何回か取り上げまたしが、ベクトル化済みのデータを読み込めるfetch_20newsgroups_vectorizedは意図的にスルーしていました。 使えるかどうか気になったので、試してみます。sklearn.datasets.fetch_20newsgroups…

【python】sklearnのLDA(LatentDirichletAllocation)を試してみる

注意:線形判別分析(LinearDiscriminantAnalysis)ではありません。トピックモデルのLDAです。 はじめに LDAといえば、トピックモデルの代表的な手法であり、一昔前の自然言語処理では頻繁に使われていました(最近は分散表現や深層学習に押されて廃れ気味…

【python】TF-IDFで重要語を抽出してみる

概要 すでに語り尽くされた感のあるネタですが、TF-IDFで文書の重要な単語(重要語、あるいは特徴語)を抽出してみます。 numpyとsklearnを使うと、10行程度のコードで実現できるので簡単です。スポンサーリンク (adsbygoogle = window.adsbygoogle || []).p…

【python】sklearnのVarianceThresholdを試してみる

はじめに VarianceThresholdは名前の通り、分散がしきい値以下の特徴量を捨てます。sklearn.feature_selection.VarianceThreshold — scikit-learn 0.20.2 documentation これといってすごいところはありませんが、気楽に使えそうなので試してみました。 目次…

【python】SelectKBestのscore_funcによる速度差を比較

SelectKBestはsklearnの簡単に特徴選択ができるクラスです。ざっくりと特徴選択したいときに、とても便利です。sklearn.feature_selection.SelectKBest — scikit-learn 0.20.1 documentation ところで、このSelectKBestにはscore_funcというパラメータを指定…

【python】sklearnのfetch_20newsgroupsで文書分類を試す(4)

前回は性能を追い求めると次元がでかくなりすぎて・・・というところで終わっていた。今回はもうちょっと頑張って次元を減らしてみる。 目次 ストップワードの除去 PCA(主成分分析)とLDA(線形判別分析) 分類 ソースコード 結果とまとめ 次回 過去の回 ス…

【python】sklearnのPCAでsvd_solverによる速度差を比較

sklearnのPCA(主成分分析)がやたら遅くて腹が立ちました。計算コストを下げるために次元削減してるのに、次元削減で計算コスト食ったら意味がありません。 とにかくこのPCAを高速化したかったので、svd_solverを変えてどうなるか試しました。なお、腹が立…

【python】tfidfは分類精度を向上させるのか?→向上しなかった

目次 はじめに――長年の疑問 検証 結果 tf-idfは死んだのか? まとめ はじめに――長年の疑問 自然言語処理でテキスト分類などに、よくtf-idfが使われます(最近はそうでもないのかもしれないが)。一般には、tf-idfを使うことで分類精度の向上効果があると認識…

【python】sklearnのCountVectorizerの使い方

sklearnのCountVectorizerを使うとBoW(Bag of Words)の特徴量が簡単に作れます。 ただし、指定するパラメタが多かったり、デフォルトで英語の文字列を想定していたりして若干とっつきづらい部分もあります。 この記事ではCountVectorizerの使い方を簡単に説…

【python】sklearnのfetch_20newsgroupsで文書分類を試す(3)

前回はとりあえずベースラインの分類を行い、F1値にして0.7くらいの性能を得た。 ここで自然言語処理的なアプローチで手法の改良に進むのもありだと思うが、とりあえずmin_dfをパラメタチューニングしてみるか、という方向に傾いている。前回は恣意的に決め…

【python】sklearnのfetch_20newsgroupsで文書分類を試す(2)

前回の続きをやっていく。とりあえず今回は簡単な方法で分類してみて、ベースラインを作ることにする。 目次 特徴を捨てる 分類する まとめ 次回 何はともあれ、文書から特徴抽出してベクトル化しないと話にならない。ベースラインなのでBag of Wordsを使う…