静かなる名辞

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


機械学習

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

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

【python】距離・非類似度行列を計算する

記事概要 非類似度行列(距離行列)の計算方法について説明する。 計算方法 対象データと使う非類似度 とりあえず、データを5つ作る。irisの先頭5要素を抽出する。 from sklearn.datasets import load_iris iris = load_iris() data = iris.data[:5] 5*5の非…

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

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

【python】SOMのライブラリSomocluはかなりおすすめ

SOM(Self-organizing maps:自己組織化写像)は割と古めの、データの可視化手法です(それ以外にも使えると思いますが)。 今回はpythonのSOMライブラリSomocluを使ってみたら、けっこう良かったというネタです。 目次 SOMの概要 ライブラリがない それでも頑…

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

はじめに scikit-learnで交差検証を行い、評価指標を算出する方法としては、cross_val_scoreがよくオススメされています。実際、「sklearn 交差検証」みたいな検索キーワードでググるとこの関数がよく出てきます。しかし、この関数は複数の評価指標を算出す…

【python】RandomTreesEmbeddingを試す(1)

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

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

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

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

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

【python】pythonで主成分分析のバイプロット

バイプロット(Biplot)という主成分分析(PCA)の結果の可視化方法があります。 すごく大雑把に言うと、PCAによる写像の前の空間の各特徴(軸)が写像先の空間のどこに向いているかを可視化する方法です。 具体的には、主成分ベクトル(因子負荷量などを使…

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

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

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

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

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

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

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

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

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

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

【python】matplotlibで3次元データを描画し、回転アニメーションにする

3次元くらいのデータを描画したいときがある。簡単に散布図にできると便利。 データの用意 sklearnのload_irisなどで取得できるデータセットを入力にする前提の次のような関数を作った。 from sklearn.decomposition import PCA def gen_3d_data(dataset): p…

【python】numpyでデータをランダムサンプリング

機械学習に使うデータをランダムサンプリングしたいときがある。簡単そうなのにやり方が見つからないから自分で書く。 目次 実装方針 重複ありランダムサンプリング 重複なしランダムサンプリング 実装と結果 そもそもなにに使いたかったの? 裏技 ※追記(参…

【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を使うことで分類精度の向上効果があると認識…

ランダムフォレストとSVMの使い分け

はじめに ランダムフォレスト(RandomForest)とSVM(Support Vector Machine)はよく比較される分類器です。でも、様々なシチュエーションで、けっきょくどちらを使うべきなのか、という指針はあまり見かけません。 私は研究などで*1両者を使ってきて、それな…

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

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

【python】クラスタリング結果を積み上げ棒グラフで可視化する

ラベル付きデータをクラスタリングすることがよくあります(そんな頻繁にあるか? まあ、クラスタリングの使い方次第でたまにはあるからこうして記事にしている訳ですが)。各クラスタの中身がどんなラベルで構成されているのか、知りたくなります。積み上げ…

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

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

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

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

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

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

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

ソフトクラスタリングの有名な手法としては混合ガウスモデル(混合正規分布モデル)を使った手法があります。この手法はデータが「複数の正規分布から構成されている」と仮定し、その正規分布のパラメタをEMアルゴリズム(expectation–maximization algorith…

【python】skfuzzyのFuzzy c-meansでソフトクラスタリング

はじめに Fuzzy c-meansはソフトクラスタリングの手法です。 pythonではscikit-fuzzyというライブラリで利用できるようです。ということで、実際に使ってみました。 基本的な理論はこちらのサイトなどを参考にしてください。ファジィc-means法 - 機械学習の…

【python】hyを触ってみる

なんか、たまにlisp使ってみたくなるんだよね。 去年のこれくらいの時期にもcommon lispをやってみた記憶があるが、たぶん言語として悪くはないんだろうけど、ちゃんと書けるようになる前に飽きてしまった*1。 という訳で、今回はpython方言(lisp方言と言う…

【python】sklearnのCountVectorizerの使い方

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

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

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