ブックマーク / blog.amedama.jp (20)

  • Python: k-NN Feature Extraction について - CUBE SUGAR CONTAINER

    k-NN Feature Extraction (k-近傍法を用いた特徴量抽出) という手法があるらしい。 これは、文字通り k-NN (k-Nearest Neighbor algorithm: k-近傍法) を特徴量の抽出に応用したもの。 興味深かったので、今回は自分でも Python を使って実装してみた。 手法について知ったのは、以下のブログを目にしたのがきっかけ。 upura.hatenablog.com また、上記は以下のブログに記載のある R の実装を参考にしているとのことだった。 Feature Extraction with KNN • fastknn ただ、先ほどの Python API では、特徴量を付与する対象のデータをパラメータとして指定できない点が気になった。 具体的には、以下のような交差検証を使った性能の計測が難しいのではと感じた。 データセットを学習用と検証

    Python: k-NN Feature Extraction について - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/11/12
  • Python: 特徴量の重要度を Permutation Importance で計測する - CUBE SUGAR CONTAINER

    学習させた機械学習モデルにおいて、どの特徴量がどれくらい性能に寄与しているのかを知りたい場合がある。 すごく効く特徴があれば、それについてもっと深掘りしたいし、あるいは全く効かないものがあるなら取り除くことも考えられる。 使うフレームワークやモデルによっては特徴量の重要度を確認するための API が用意されていることもあるけど、そんなに多くはない。 そこで、今回はモデルやフレームワークに依存しない特徴量の重要度を計測する手法として Permutation Importance という手法を試してみる。 略称として PIMP と呼ばれたりすることもあるようだ。 この手法を知ったのは、以下の Kaggle のノートブックを目にしたのがきっかけだった。 Permutation Importance | Kaggle あんまりちゃんと読めてないけど、論文としては Altmann et al. (2

    Python: 特徴量の重要度を Permutation Importance で計測する - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/11/12
  • リモートサーバの Jupyter Notebook を SSH Port Forwarding 経由で使う - CUBE SUGAR CONTAINER

    一般的に Jupyter Notebook はローカルの環境にインストールして使うことが多い。 ただ、ローカルの環境は計算資源が乏しい場合もある。 そんなときは IaaS などリモートにあるサーバで Jupyter Notebook を使いたい場面が存在する。 ただ、セキュリティのことを考えると Jupyter Notebook の Web UI をインターネットに晒したくはない。 そこで、今回は SSH Port Forwarding を使って Web UI をインターネットに晒すことなく使う方法について書く。 このやり方ならリモートサーバに SSH でログインしたユーザだけが Jupyter Notebook を使えるようになる。 また、Web UI との通信も SSH 経由になるので HTTP over SSL/TLS (HTTPS) を使わなくても盗聴のリスクを下げられる。 リモー

    リモートサーバの Jupyter Notebook を SSH Port Forwarding 経由で使う - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/10/14
  • Python: Selenium + Headless Chrome で Web ページ全体のスクリーンショットを撮る - CUBE SUGAR CONTAINER

    スクレイピングした Web サイトからページ全体のスクリーンショットを撮影したい機会があった。 そこで Selenium の Python バインディングと Headless Chrome を使ったところ実現できたのでメモしておく。 ちなみに、ページ全体でなければ Headless Chrome 単体でも撮れる。 その方法についても末尾に補足として記載しておいた。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.5 BuildVersion: 17F77 $ python -V Python 3.6.5 $ pip list --format=columns | grep -i selenium selenium 3.13.0 $ chromedriver --version ChromeDriver 2.

    Python: Selenium + Headless Chrome で Web ページ全体のスクリーンショットを撮る - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/07/28
  • Python: パラメータ選択を伴う機械学習モデルの交差検証について - CUBE SUGAR CONTAINER

    今回は、ハイパーパラメータ選びを含む機械学習モデルの交差検証について書いてみる。 このとき、交差検証のやり方がまずいと汎化性能を来よりも高く見積もってしまう恐れがある。 汎化性能というのは、未知のデータに対処する能力のことを指す。 ようするに、いざモデルを実環境に投入してみたら想定よりも性能が出ない (Underperform) ということが起こる。 これを防ぐには、交差検証の中でも Nested Cross Validation (Nested CV) あるいは Double Cross Validation と呼ばれる手法を使う。 ハイパーパラメータの選び方としては、色々な組み合わせをとにかく試すグリッドサーチという方法を例にする。 また、モデルのアルゴリズムにはサポートベクターマシンを使った。 これは、サポートベクターマシンはハイパーパラメータの変更に対して敏感な印象があるため。

    Python: パラメータ選択を伴う機械学習モデルの交差検証について - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/07/25
  • Python: matplotlib で動的にグラフを生成する - CUBE SUGAR CONTAINER

    今回は matplotlib を使って動的にグラフを生成する方法について。 ここでいう動的というのは、データを逐次的に作って、それを随時グラフに反映していくという意味を指す。 例えば機械学習のモデルを学習させるときに、その過程 (損失の減り方とか) を眺める用途で便利だと思う。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.5 BuildVersion: 17F77 $ python -V Python 3.6.5 $ pip list --format=columns | egrep -i "(matplotlib|pillow)" matplotlib 2.2.2 Pillow 5.2.0 もくじ もくじ 下準備 静的にグラフを生成する 動的にグラフを生成する グラフを延々と描画し続ける Jupyte

    Python: matplotlib で動的にグラフを生成する - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/07/14
  • まっさらな状態から Docker イメージを作る - CUBE SUGAR CONTAINER

    Docker イメージというと、一般的には既存の Docker イメージをベースにして作る機会が多い。 そうしたとき Dockerfile にはベースとなるイメージを FROM 命令で指定する。 とはいえ、既存のイメージをベースにしない、まっさらな状態からイメージを作ることもできる。 それが FROM 命令に scratch を指定した場合になる。 今回は FROM scratch でまっさらな状態から Docker イメージを作ってみることにする。 試した環境は次の通り。 $ docker version Client: Version: 18.01.0-ce API version: 1.35 Go version: go1.9.2 Git commit: 03596f5 Built: unknown-buildtime OS/Arch: darwin/amd64 Experiment

    まっさらな状態から Docker イメージを作る - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2018/02/11
  • Python: 機械学習で分類問題のモデルを評価する指標について - CUBE SUGAR CONTAINER

    今回は、機械学習において分類問題のモデルを評価するときに使われる色々な指標について扱う。 一般的な評価指標としては正確度 (Accuracy) が使われることが多いけど、これには問題も多い。 また、それぞれの指標は特徴が異なることから、対象とする問題ごとに重視するものを使い分ける必要がある。 今回扱う代表的な評価指標は次の通り。 正確度 (正解率、Accuracy) 適合率 (精度、陽性反応的中度、Precision) 再現率 (感度、真陽性率、Recall) F-値 (F-score, F-measure) AUC (Area Under the Curve) 上記それぞれの指標について、特徴を解説すると共に Python を使って計算してみる。 データセットには scikit-learn に組み込みの乳がんデータセットを用いた。 今回は「機械学習で」と書いてしまったけど、上記は実際には

    alaluta
    alaluta 2017/12/23
  • Python: 多様体学習 (Manifold Learning) を用いた次元縮約 - CUBE SUGAR CONTAINER

    今回は多様体学習を使ってデータの次元を縮約する方法について。 これはデータの前処理として、主に二つの目的で使われる。 一つ目は、次元を縮約することで二次元や三次元の形でデータを可視化できるようにするため。 もう一つは、次元を縮約した結果を教師データとして用いることでモデルの認識精度を上げられる場合があるため。 データの次元を縮約する手法としては主成分分析 (PCA) が有名だけど、これは線形な変換になっている。 ただ、実際に取り扱うデータは必ずしもそれぞれの次元が線形な関係になっているとは限らない。 そこで、非線形な変換をするのが多様体学習ということらしい。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G1114 $ python --version Python

    Python: 多様体学習 (Manifold Learning) を用いた次元縮約 - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2017/12/13
  • Python: データパイプライン構築用フレームワーク Luigi を使ってみる - CUBE SUGAR CONTAINER

    最近になって、バッチ処理においてデータパイプラインを組むためのフレームワークとして Luigi というものがあることを知った。 これは、Spotify という音楽のストリーミングサービスを提供する会社が作ったものらしい。 似たような OSS としては他にも Apache Airflow がある。 こちらは民宿サービスを提供する Airbnb が作ったものだけど、最近 Apache に寄贈されてインキュベータープロジェクトとなった。 Luigi の特徴としては、バッチ処理に特化している点が挙げられる。 ただし、定期的にバッチ処理を実行するような機能はない。 そこは、代わりに cronsystemd timer を使ってやる必要がある。 また、体もそうだけどデータパイプラインについても Python を使って書く必要がある。 今回は、そんな Luigi を一通り触ってみることにする。

    Python: データパイプライン構築用フレームワーク Luigi を使ってみる - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2017/05/15
  • Mac OS X で Apache Spark を触ってみる - CUBE SUGAR CONTAINER

    最近 Apache Spark について耳にすることが多い。 Apache Spark は、ビッグデータ処理における並列分散処理基盤を提供する OSS の一つ。 似たような用途としては Apache Hadoop も有名だけど、それよりも最大で 100 倍ほど高速に動作するんだとか。 高速に動作する理由としては、各ノードのメモリに乗り切るサイズのデータならディスクを介さずに扱える点が大きいらしい。 今回は、そんな Apache Spark を Mac OS X で軽く触ってみることにする。 来であれば、用途的には複数のノードを用意して並列分散処理をさせるところだけど使うのは一つのノードだけ。 また Apache Spark を操作するには Java, Scala, Python のインターフェースがある。 その中でも、今回は Python のインターフェース (PySpark) を使って

    Mac OS X で Apache Spark を触ってみる - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2017/05/13
  • Python: scikit-learn で決定木 (Decision Tree) を試してみる - CUBE SUGAR CONTAINER

    今回は機械学習アルゴリズムの一つである決定木を scikit-learn で試してみることにする。 決定木は、その名の通り木構造のモデルとなっていて、分類問題ないし回帰問題を解くのに使える。 また、決定木自体はランダムフォレストのような、より高度なアルゴリズムのベースとなっている。 使うときの API は scikit-learn が抽象化しているので、まずは軽く触ってみるところから始めよう。 決定木がどんな構造を持ったモデルなのかは最後にグラフで示す。 また、決定木自体は回帰問題にも使えるけど、今回は分類問題だけにフォーカスしている。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.12.4 BuildVersion: 16E195 $ python --version Python 3.5.3 下準備 まずは

    Python: scikit-learn で決定木 (Decision Tree) を試してみる - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2017/04/27
  • Python: k 近傍法を実装してみる - CUBE SUGAR CONTAINER

    k 近傍法 (k-Nearest Neighbor algorithm) というのは、機械学習において教師あり学習で分類問題を解くためのアルゴリズム。 教師あり学習における分類問題というのは、あらかじめ教師信号として特徴ベクトルと正解ラベルが与えられるものをいう。 その教師信号を元に、未知の特徴ベクトルが与えられたときに正解ラベルを予想しましょう、というもの。 k 近傍法は機械学習アルゴリズムの中でも特にシンプルな実装になっている。 じゃあ、シンプルな分だけ性能が悪いかというと、そんなことはない。 分類精度であれば、他のアルゴリズムに比べても引けを取らないと言われている。 ただし、計算量が多いという重大な欠点がある。 そのため、それを軽減するための改良アルゴリズムも数多く提案されている。 k 近傍法では、与えられた未知の特徴ベクトルを、近い場所にある教師信号の正解ラベルを使って分類する。

    Python: k 近傍法を実装してみる - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2017/03/19
  • Python の DB-API (Database API) とは何か - CUBE SUGAR CONTAINER

    Python でデータベース周りについて調べていると、ドキュメントの中にちょくちょく DB-API (2.0) という単語が出てくる。 果たしてこの DB-API とは何者なのか、というのが今回の主題。 結論から言ってしまうと、DB-API というのは Python でリレーショナルデータベースを操作するために定義された API の仕様を指している。 仕様というのがポイントで、これは具体的な実装を指しているわけではない。 DB-APIPython に関する仕様を決める PEP という枠組みの中で PEP0249 というドキュメントに書かれている。 PEP 249 -- Python Database API Specification v2.0 | Python.org なぜ DB-API が必要になるのだろうか? それは、リレーショナルデータベースに SQLite3 や MySQL

    Python の DB-API (Database API) とは何か - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2017/01/31
  • 統計: 二つのグループの平均と分散を合成する - CUBE SUGAR CONTAINER

    例えば、あるグループ A と B が別々にテストを受けたとする。 それぞれのグループの人数と平均点、そして分散は分かっているとしよう。 このとき、グループ A と B を合わせた全体での平均や分散は計算することができるだろうか? 結論から言うと、これはできる。 今回は、その手順について書いてみることにする。 また、同時に Python を使ってサンプルデータを生成したり計算の裏付けをしてみよう。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G1212 $ python --version Python 3.5.2 題材とするデータを生成する 平均や分散の計算を楽にするために、まずは NumPy をインストールしておこう。 $ pip install numpy そして

    統計: 二つのグループの平均と分散を合成する - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2016/12/23
  • 統計: 共分散と相関係数でデータセットの相関を調べる - CUBE SUGAR CONTAINER

    まず、二次元の特徴量をもったデータセットがあるときを考えてみよう。 もし、一方の次元の値が高いときに、もう一方も高い傾向があるときは、両者に正の相関があるという。 反対に、一方の次元の値が高いときに、もう一方は低い傾向があるときは、両者に負の相関があるという。 では、それぞれの次元に正または負の相関があるか否かを調べるには、具体的にどうしたら良いのだろうか。 散布図を描いてみる それにはまず、散布図を描いてみるという選択肢がある。 x 軸と y 軸に、それぞれの次元の値をプロットするやり方だ。 このとき、例えば正の相関があるなら、値は次のように左下から右上にかけてプロットされる。 これはつまり x 軸の次元の値が高いときに y 軸の次元の値も高くなることを示す。 反対に、負の相関があるなら、値は次のように左上から右下にかけてプロットされる。 これはつまり x 軸の次元の値が高いときに y

    統計: 共分散と相関係数でデータセットの相関を調べる - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2016/09/26
  • Python: skflow を使ってディープラーニングで FizzBuzz 問題を解いてみる - CUBE SUGAR CONTAINER

    最近 TensorFlow を使ってディープラーニングで FizzBuzz 問題を解くっていうブログ記事を読んだんだけど、これが面白かった。 joelgrus.com そこで、自分でも同じようにディープラーニングを使って FizzBuzz 問題を解いてみることにした。 ただし、アレンジとして TensorFlow を直接使うのではなく、代わりに skflow を使ってみる。 skflow というのは TensorFlow を scikit-learn と同じインターフェースで扱えるようにしたラッパーだ。 これなら使い慣れた scikit-learn と同じ雰囲気で TensorFlow を使うことができる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34 $ py

    Python: skflow を使ってディープラーニングで FizzBuzz 問題を解いてみる - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2016/06/02
  • 「スマートPythonプログラミング」という本を書きました - CUBE SUGAR CONTAINER

    表題の通り Pythonを書いたので、そのご紹介です! スマートPythonプログラミング: Pythonのより良い書き方を学ぶ 作者: もみじあめ発売日: 2016/03/12メディア: Kindle版この商品を含むブログ (1件) を見る どんななの? ひと言で表すと、自信を持って Python を書けるようになるためのです。 スマートPythonプログラミングなので、略してスマパイって呼んでください。 こんな人におすすめ なんとなく書いてなんとなく動いているコードに不安を覚えている方 入門書は読み終わったけど次に何をして良いか分からない方 Python の初心者から中級者にステップアップしたい方 ベストプラクティスとかアンチパターンって言葉が好きな方 上記に当てはまる方には、書が少しでも参考になると思います。 どんなことが書いてあるの? 自分が Python を学び始めた

    「スマートPythonプログラミング」という本を書きました - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2016/03/14
  • Python: doctest を書いてみよう - CUBE SUGAR CONTAINER

    今回は Python が標準で提供しているテスト機構の一つである doctest について書いてみる。 doctest というのは docstring という Python のドキュメンテーション機構を使って一緒にテストもしちゃおうという発想の代物。 docstring については以前にもこのブログで詳しく書いたことがある。 blog.amedama.jp docstring のおさらい ひとまず docstring のおさらいから入ろう。 docstring はモジュールや関数などを解説するための特殊なコメント。 例えば次の FizzBuzz を実装した関数 fizzbuzz() に対して docstring を書いてみることにしよう。 # -*- coding: utf-8 -*- def fizzbuzz(n): if n % 3 == 0 and n % 5 == 0: retur

    Python: doctest を書いてみよう - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2016/01/27
  • Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER

    この記事の目指すところ 現在 Python はバージョン 2.x 系と 3.x 系という、一部に互換性のないふたつのメジャーバージョンが併用されている。 その上で、この記事にはふたつの目的がある。 ひとつ目は、2.x 系と 3.x 系の違いについてまとめること。 現状、それぞれのバージョン毎の違いはまとまっているところが少ない。 自分用に、このページだけ見ればひと通り分かる!っていうものがほしかった。 ふたつ目は、2.x 系と 3.x 系の違いを吸収するソースコードの書き方についてまとめること。 こちらも Web 上にナレッジがあまりまとまっていない。 これについては今 python-future というパッケージがアツい。 尚、サポートするバージョンは以下の通り。 2.x 系: 2.6 と 2.7 3.x 系: 3.3 と 3.4 題に入る前に、最近の Python 事情についてまとめ

    Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER
    alaluta
    alaluta 2015/09/07
  • 1