静かなる名辞

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

2019/03/22:TechAcademyがteratailの質問・回答を盗用していた件
2019/03/26:TechAcademy盗用事件 公式発表と深まる疑念



matplotlib

SVMのsupport vectorを可視化してみた

はじめに SVMはヒンジ関数を使ってマージン最大化を行い、境界付近のデータに基づいて分離超平面を決定する……ということはよく言われています。でも、実際のデータで確認している図はあまり見たことがありません。 sklearnのSVMのドキュメントを読んでいたら…

多次元尺度構成法(MDS)で文字列の編集距離を可視化してみる

はじめに ベクトルとして表現するのが難しいけど、個体間の距離(非類似度)は定義できる……というデータがたまにあります。こういうとき、多次元尺度構成法を使うと可視化がうまくいきます。 ということで、編集距離を可視化してみようと思います。 データ h…

sklearn.tree.plot_treeをJupyter Notebookで使うと決定木の可視化が捗る・・・かな?

はじめに sklearnでは様々な方法で決定木を可視化できるのですが、これまでの方法ではそのためにはgraphvizを介する必要がありました。これは面倒くさく、トラブルの原因にもなりやすいものでした。 scikit-learn 0.21以降ではmatplotlibでプロットしてくれ…

sklearnとmatplotlibでiris(3クラス)の予測確率を可視化した話

はじめに よく分類器の性質などを把握するために、2次元で可視化している図があります。 特に予測確率なんかを平面的に出せるとかっこいいですよね。つまり、こういうのです。scikit-learn.org以前の記事より君はKNN(k nearest neighbor)の本当のすごさを…

君はKNN(k nearest neighbor)の本当のすごさを知らない

はじめに KNNといえば機械学習入門書の最初の方に載っている、わかりやすいけど性能はいまいちな初心者向けの手法という認識の人も多いと思います。 しかし、本当はけっこう優秀なのです。 2次元で予測させてみる 予測させます。コードは軽く読み流して結果…

【python】高次元の分離超平面をなんとか2次元で見る

はじめに 分類器の特性を把握するために2次元データで分離超平面を見るということが行われがちですが、高次元空間における分離器の特性を正確に表している訳ではありません。 ということがずっと気になっていたので、なんとか高次元空間で分類させて2次元で…

matplotlibのpcolormeshでalphaを小さくすると網目が出てくる対策

概要 デフォルト設定だとタイトルに書いた通りの現象が起こります。網目模様が出て図が汚くなります。 実験 こんな単純なコード。 import numpy as np import matplotlib.pyplot as plt def main(): xx, yy = np.meshgrid(np.arange(0, 10, 0.1), np.arange(…

【python】PCAと非負値行列因子分解のバイプロットを見比べる

はじめに 非負値行列因子分解は負の値が出現しないような行列に対して行える分解で、主成分分析とか因子分析に似ています。 参考: qiita.com 上の記事によると、いいところとしては、 非負なので現実のデータに向く 非負なので解釈が楽 さらにスパースにな…

【python】matplotlibのhistで棒の上にラベルを表示

plt.histはデータを与えるとそのままヒストグラムをプロットしてくれますが、棒との位置関係に基づいてテキストなどを表示させようとすると、ちょっと困ります。 しかし、plt.histの返り値を利用して棒の頂点の座標を取得すれば、そのままプロットすることが…

scipy.interpolate.griddataの内挿方法による違いを比較

はじめに 以前、3次元のサンプルデータを内挿してmatplotlibでうまくプロットする方法について記事にしました。www.haya-programming.com この記事では内挿のアルゴリズムをデフォルトのlinearにして使いましたが、他の方法ではどうなるのか気になったので実…

xyzの点データを内挿してmeshgridにしmatplotlibでプロットする

はじめに pythonでmatplotlibを使って作図するとき、三次元のデータでpcolormeshとかcontourでやるような等高線プロットを作りたいんだけど、手持ちのデータはxyzが紐付いた点のバラバラな離散データだけ……ということがままあります。 散布図ならそれでも良…

scipyで確率分布のサンプルと確率密度関数を生成する

乱数データと確率密度関数を一緒にplotしてみたかったので、メモ。 概要 scipy.statsでは様々な統計用のユーティリティが提供されています。大抵の分布はあるし、パラメータも好きに設定できます。Statistical functions (scipy.stats) — SciPy v0.16.1 Refe…

【python】matplotlibで背景色と枠線の色を変える

はじめに matplotlibでは図(figure)の背景色と枠線(エッジ)の色を自由に設定できる。その方法についてメモしておく。 目次 はじめに 設定方法 plt.savefig()で反映されない まとめ スポンサーリンク (adsbygoogle = window.adsbygoogle || []).push({});…

【python】matplotlibで図の余白を調整する

matplotlibで図を描画するとき、余白に納得がいかないことがある。 調整方法を自分用にメモ。 余白の大きさを変える plt.subplots_adjust()を使うと余白を調整できる。 ドキュメントによると、デフォルト値は以下の通り。 left = 0.125 # the left side of t…

【python】matplotlib.cmの使い方を説明しようと思う

テーマ matplotlib.cmが直接使うことはない謎の技術と思われがちなので、「普通に可愛い子なんですよ」って説明する。cm (colormap) — Matplotlib 3.0.2 documentationスポンサーリンク (adsbygoogle = window.adsbygoogle || []).push({}); cmとは何か とり…

【python】np.meshgridの基本的な使い方まとめ

meshgridはなんとなく苦手な感じなので、操作をまとめておく。 目次 とりあえずmeshgirdを作ってみる 計算する plotしてみる x,y,z座標の配列に変換する まとめ 参考にしたサイト とりあえずmeshgirdを作ってみる meshgrid自体はこのように何の変哲もないも…

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

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

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

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

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

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

【python】95%信頼楕円/確率楕円を描画する

「ライブラリあるやろw」と思ったら、なくて顔面蒼白になった。 しょうがないから調べて実装した。 理論的なもの ちゃんと数式を書いて説明する気概がないので、アバウトに説明する。 適当な二次元正規分布のデータがあるとする。PCAと同じ要領で分散共分散…

【python】pca、mds、nmds、tsneとmatplotlibでデータの可視化をしてみる

タイトルの通りのことをする。データセットはirisとdigitsを使ってみる。 ソースコード。 # coding: UTF-8 from sklearn.datasets import load_digits, load_iris from sklearn.manifold import MDS, TSNE from sklearn.decomposition import PCA from matpl…

【python】混同行列(Confusion matrix)をヒートマップにして描画

pythonでラクして混同行列を描画したい(sklearnとかpandasとかseabornとか使って)という話。 そもそもscikit-learnにはsklearn.metrics.confusion_matrixなるメソッドがあって、混同行列がほしいときはこれ使えば解決じゃん、と思う訳だが、このconfusion_…