静かなる名辞

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

sklearn

【python】sklearnのclass_weightの挙動

はじめに 先に断っておくと、class_weightの挙動はモデルによって異なる可能性が十分ある。今回はsklearn.svm.SVCとsklearn.ensemble.RandomForestClassifierのドキュメントを参照して、一応基本的に共通する部分を抜き出した。class_weightを調整する必要が…

【python】sklearnで「何もしない」モデルがほしい

sklearnで「何もしない」モデルがあると、チョー便利。個人的にはそう思う。 どうやって使うかというと、具体的には前の記事で書いたFeatureUnionと組み合わせて使う。 参考:【python】複数の特徴をまとめるFeatureUnion - 静かなる名辞 たとえば、100次元…

【python】複数の特徴をまとめるFeatureUnion

単一の入力データから、複数の処理方法で幾つもの異なる特徴量が得られる・・・というシチュエーションがある。 この場合、「どれが最善か」という観点でどれか一つを選ぶこともできるけど、そうすると他の特徴量の情報は捨ててしまうことになる。総合的な性…

複数の目的変数で回帰を行う方法

はじめに 回帰分析を行う際、複数の目的変数に対して回帰をしたい場合があります。普通のモデルではできないのでちょっと面食らいますが、やり方は色々あるようです。 目次 はじめに 目的変数の数だけ回帰モデルを作る方法 複数の目的変数に対応したモデルを…

【python】ランダムフォレストのチューニングにOOB誤り率を使う

一般的な機械学習のアルゴリズムでは、パラメタチューニングにはグリッドサーチ・交差検証を組み合わせて使うのが割と普通だと思います。sklearnにはそれ専用のGridSearchCVというクラスまで用意されています。 実際問題としては、GridSearchは良いとしても…

【python】sklearnのtolってなんだ?

公式ドキュメントをよく読む方なら、色々なモジュールに"tol"というオプションがあることに気づいていると思います。たとえばSVCだと、こんな風に書いてあります。他のモジュールも似たり寄ったりですが。 tol : float, optional (default=1e-3)Tolerance fo…

【python】sklearnライクなデータセットを作る

自作したりネットから拾ってきたデータセットにsklearnライクなインターフェースがあるとそこそこ便利です。なので、作る方法について調べました。 とりあえずデータセットを読み込んで型を調べます。 >>> from sklearn.datasets import load_iris >>> iris …

cross_val_scoreはもうやめよう!一発で交差検証するにはcross_validateを使う

sklearnで交差検証をしてスコアを評価する方法としては、cross_val_scoreがよく推奨されているような気がします。実際、cross_val_scoreで検索すると日本語の記事がたくさん引っかかります。 しかし、cross_val_scoreは複数の評価指標を算出することができず…

【python】RandomTreesEmbeddingを試す(1)

RandomTreesEmbeddingはsklearnにたくさんある謎クラスの一つ*1。 たぶんスパースコーディングに決定木を使いましょうね~系の奴なんだと思う。ドキュメントを読むと、なんとなく雰囲気はわかる。sklearn.ensemble.RandomTreesEmbedding — scikit-learn 0.19…

【python】sklearnのPCAでloading(主成分負荷量)を計算する

PCA(主成分分析)のloading*1がほしいときがあります。sklearnでは一発では出ません。 ドキュメントはここ。 sklearn.decomposition.PCA — scikit-learn 0.19.1 documentation 目次 PCA.components_は確かにあるけど・・・ loadingを計算しよう 罠だった 共…

【python】sklearnで因子分析を試す

pythonで因子分析をやる人はあまりいないようだが、sklearnにはしっかりモデルが存在している。ついさっき気づいた。sklearn.decomposition.FactorAnalysis — scikit-learn 0.19.1 documentation 因子分析自体は前からどんなものなのか興味があり、かといっ…

【python】numpyで主成分分析を実装してみた

numpyでPCA(principal component analysis:主成分分析)を実装してみました。自分の理解を深めるためです。 sklearnに実装されているものと同じ結果を出すことを目標にしました。最終的には上手く行きました。 目次 概要 実装 結果 まとめ 概要 主成分分析…

【python】カーネル主成分分析を試してみる

カーネル主成分分析(Kernel PCA)はカーネル法と主成分分析を組み合わせて用い、データを非線形次元圧縮する方法です(こんな説明で良いのか・・・)。 カーネル法のことは勉強中・・・というか正直勉強しようとしてもよくわからないで跳ね返されるのをこれ…

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

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

【python】sklearnのPCAで相関行列を使う

主成分分析には共分散行列を用いる方法、相関行列を使う方法がある。 sklearnのPCAを見ると、これに対応するオプションは存在しない。sklearn.decomposition.PCA — scikit-learn 0.19.1 documentation ずっと不思議に思っていたが、ググってたらこんなものを…

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

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

【python】LDA(線形判別分析)で次元削減

一般によく使われる次元削減手法としてはPCA(主成分分析)がありますが、他にLDA(Linear Discriminant Analysis:線形判別分析)を使う方法もあります。 これは本来は分類に使われる判別分析という古典的なアルゴリズムで、データが一番分離しやすくなる軸…

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

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

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

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

【python】クラスタリング結果をエントロピーで評価する

はじめに クラスタリング結果の良し悪しを評価したいことがあります。 正解ラベルがないデータに対してクラスタリングを行った場合(つまり本当に教師なし学習でやる場合)、基本的にクラスタ内距離二乗和やクラスタ中心間の距離などを使ってやる以外の方法…

【python】分類タスクの評価指標の解説とsklearnでの計算方法

混同行列、適合率、再現率、F1値の基本と多クラス分類のマクロ平均・マイクロ平均の理論、それらのsklearnでの計算について解説

sklearnのclassification_reportで多クラス分類の結果を簡単に見る

多クラス分類をしていると、「どのクラスが上手く分類できてて、どのクラスが上手く行ってないんだろう」と気になることがままあります。 そういった情報を簡単に要約して出力してくれるのがsklearnのclassification_reportで、簡単に使える割に便利なので実…

【python】RandomForestの木の本数を増やすとどうなるか?

RandomForest(ランダムフォレスト)には木の本数という重要なパラメータがある。slearnのデフォルトは10だが、実際に使うときは1000以上にしてやらないと良い性能が得られないということをよく経験する。 これを大きくすることで、一体どんな効果が得られる…

【python】混合ガウスモデル (GMM)でハード・ソフトクラスタリング

先日はFuzzy c-meansによるソフトクラスタリングを行いました。【python】skfuzzyのFuzzy c-meansでソフトクラスタリング - 静かなる名辞 ソフトクラスタリングの有名な手法としてはFuzzy c-meansの他に、混合ガウスモデル(混合正規分布モデル)を使った手…

【python】sklearnのCountVectorizerの使い方

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

【python】sklearnのPipelineを使うとできること

機械学習では、何段もの前処理をしてから最終的な分類や回帰のアルゴリズムに入力するということがよくあります。前処理にはけっこう泥臭い処理も多く、leakageの問題なども絡んできます。はっきり言って自分で書こうとすると面倒くさいです。 こういう問題…

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

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

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

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

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

fetch_20newsgroupsはUsenetというネットニュースの記事(でいいのかな、良くない気がする)をカテゴリ別に集めたデータセット。sklearnで気楽に使えるので*1、試してみることにする。 とりあえずこの記事はintroductionとし、使い方とデータの扱い方の説明…

【python】スタッキング(stacking)分類器を実装して理解する

最終更新:2018-04-02 はじめに スタッキング(stacking)といえば、複数の分類器を組み合わせて強い分類器を作る系の手法である。単なるvotingやsoft votingより強い。 誤解を恐れずにざっくり言ってしまうと、分類器の出力(複数)と真の出力の関係を機械…