読者です 読者をやめる 読者になる 読者になる

CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: KMeans 法を実装してみる

KMeans 法は、機械学習における教師なし学習のクラスタリングという問題を解くためのアルゴリズム。 教師なし学習というのは、事前に教師データというヒントが与えられないことを指している。 その上で、クラスタリングというのは未知のデータに対していくつ…

Python: k 近傍法を実装してみる

k 近傍法 (k-Nearest Neighbor algorithm) というのは、機械学習において教師あり学習で分類問題を解くためのアルゴリズム。 教師あり学習における分類問題というのは、あらかじめ教師信号として特徴ベクトルと正解ラベルが与えられるものをいう。 その教師…

Python: データセットを標準化する効果を最近傍法で確かめる

データセットの標準化については、このブログでも何回か扱っている。 しかし、実際にデータセットを標準化したときの例については試していなかった。 blog.amedama.jp blog.amedama.jp そこで、今回は UCI の提供する小麦 (seeds) データセットを最近傍法で…

Python: Pykka でアクターモデルについて学ぶ

アクターモデルというのは、並行処理のプログラミングモデルの一つだ。 並行処理という言葉からは、まずマルチスレッドとかをイメージすると思うけど、それよりも抽象度の高い概念となっている。 つまり、アクターモデルというのはマルチスレッドなどを用い…

Python: Keras/TensorFlow の学習を GPU で高速化する (Ubuntu 16.04 LTS)

以前、このブログで Keras/TensorFlow の学習スピードを GPU を使って速くする記事を書いた。 ただし、このとき使った OS は Mac OS X (macOS Sierra) だった。 blog.amedama.jp とはいえ NVIDIA の dGPU を積んだ Mac がどれだけあるんだというと、正直なか…

Python: Keras/TensorFlow の学習を CPU の拡張命令で高速化する (Mac OS X)

今回のネタは TensorFlow を使っていると、いつも目にしていた警告について。 それは、次のようなもの。 W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are availabl…

Python: python-fire の CLI 自動生成を試す

今回は Google が公開した python-fire というパッケージを試してみた。 python-fire では、クラスやモジュールを渡すことで、定義されている関数やメソッドを元に CLI を自動で生成してくれる。 ただし、一つ注意すべきなのは、できあがる CLI はそこまで親…

Python: Keras/TensorFlow の学習を GPU で高速化する (Mac OS X)

Keras というのは Python を使ってニューラルネットワークを組むためのフレームワーク。 Python でニューラルネットワークのフレームワークというと、他にも TensorFlow とか Chainer なんかが有名どころ。 Keras はそれらに比べると、より高い抽象度の API …

統計: Python と R で重回帰分析してみる

今回は R と Python の両方を使って重回帰分析をしてみる。 モチベーションとしては、できるだけ手に慣れた Python を使って分析をしていきたいという気持ちがある。 ただ、計算結果が意図通りのものになっているのかを R の結果と見比べて確かめておきたい…

統計: 二つのグループの平均と分散を合成する

例えば、あるグループ A と B が別々にテストを受けたとする。 それぞれのグループの人数と平均点、そして分散は分かっているとしよう。 このとき、グループ A と B を合わせた全体での平均や分散は計算することができるだろうか? 結論から言うと、これはで…

Python: 多変数の関数から勾配法で最小値を探す

以前、このブログで一変数の関数から勾配法で最小値を探す記事を書いた。 blog.amedama.jp このときは題材として という一変数の関数を扱った。 今回は、これを多変数の関数に拡張してみることにする。 ちなみに、この多変数というのは機械学習における多次…

Python: 勾配法で関数の最小値を探す

勾配法はニューラルネットワークなどの機械学習アルゴリズムの中で、学習するときに使われているアルゴリズム。 このアルゴリズムを使うと、与えられた関数の最小値 (または最大値) を探すことができる。 例えば教師データと現在の出力の誤差を計算する損失…

Python: fasteners の便利な排他ロックを試す

Python には標準ライブラリとして、いくつか排他ロックの実装が用意されている。 例えば threading モジュールの Lock オブジェクトなどは、その代表といえる。 しかしながら、標準では用意されていないものもある。 例えばプロセス間の排他ロックやリードラ…

Python: freezegun で時刻のテストを楽に書く

時刻周りの処理はバグが混入しやすい上にテストが書きづらくて面倒くさい。 今回は、そんな面倒な時刻のテストを楽に書けるようになる freezegun というパッケージを使ってみる。 この freezegun というパッケージを使うと Python の標準ライブラリの dateti…

統計: ピアソンのカイ二乗検定で標本が理論分布と適合しているか調べる

例えば、ある六面ダイス (サイコロ) に歪みがないことを調べたいとする。 もしサイコロに歪みが無いなら、出る目の理論的な度数分布はどれも となるはず。 しかし、サイコロの出る目は無限母集団なので、実際にすべてのパターンを試して確認することができな…

統計: ポアソン分布を使って今後の大地震が起こる確率を求めてみる

ポアソン分布というのは、ごくまれに起こるような事象の確率分布をいう。 この説明を聞いても何のこっちゃという感じだけど、これを使うと滅多に起こらないようなことがある時間内にどれくらい起こりそうなのかが分かる。 もちろん、別に未来を予知している…

Python: Fabric を組み込みで使うときの注意点

以前、このブログで Fabric をスクリプトに組み込んで使う方法について書いた。 blog.amedama.jp ただ、このやり方はちょっとした注意点があるので追記しておく。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 Buil…

Python: inspect.signature() で関数のシグネチャを調べる

Python は inspect モジュールを使うことでオブジェクトから多くの情報を取得できる。 そして、関数のシグネチャを調べる方法としては、これまで getargspec() 関数が使われることが多かった。 ただ、この関数は Python 3 系では非推奨 (Deprecated) となっ…

統計: 最小二乗法を使って回帰直線を求める

今回は、データセットのある次元の値から別の次元の値を予測する方法の一つとして、最小二乗法というやり方で回帰直線を求めてみる。 とはいえ、いきなり最小二乗法や回帰直線といわれても何が何やらという感じなので、最初はその説明からしていく。 回帰 ま…

統計: 共分散と相関係数でデータセットの相関を調べる

まず、二次元の特徴量をもったデータセットがあるときを考えてみよう。 もし、一方の次元の値が高いときに、もう一方も高い傾向があるときは、両者に正の相関があるという。 反対に、一方の次元の値が高いときに、もう一方は低い傾向があるときは、両者に負…

Python: Fabric をスクリプトに組み込んで使う

Fabric は Python で書かれたデプロイやオペレーションを自動化するためのツール。 Fabric では、タスクと呼ばれるオペレーション内容も Python で書く。 今回は、普段ならコマンドラインツールから使うことが多い Fabric を Python のスクリプトに組み込ん…

統計: 変動係数で値のバラつきを比べる

まず初めに、次のようなヒストグラムがあったとする。 このヒストグラムには、青色と緑色のふたつのグループが含まれている。 それぞれのグループは、平均値や度数が異なるようだ。 果たして、それぞれのグループはどちらの方が値のバラつきが大きいのだろう…

Python: line_profiler でボトルネックを調べる

前回は Python の標準ライブラリに用意されているプロファイラの profile/cProfile モジュールについて書いた。 blog.amedama.jp 今回は、同じ決定論的プロファイリングを採用したプロファイラの中でも、サードパーティ製の line_profiler を使ってみること…

Python: profile/cProfile モジュールでボトルネックを調べる

プログラムを作ってみたは良いけれど、想定していたよりもパフォーマンスが出ないという事態はよくある。 そんなときはパフォーマンス・チューニングをするわけだけど、それにはまず測定が必要になる。 具体的に何を測定するかというと、プログラムの中のど…

Python: データセットの標準化について

今回は機械学習とか統計で扱うデータセットの標準化について。 まずは、標準化されていない生のデータセットについて考えてみよう。 それらの多くは、次元によって数値の単位がバラバラだったり、あるいは大きさが極端に異なったりする。 これをそのまま扱っ…

Python: シーケンスアンパックについて

Python では、右辺がタプルなどのとき、左辺に複数の変数を置くことで、その中身を展開できる。 これをシーケンスアンパック (sequence unpack) という。 シーケンスアンパックを試してみる まずは python コマンドを実行して REPL を起動しておこう。 $ pyt…

Python: Ellipsis について

今回は Python の特殊な定数 Ellipsis について調べてみた。 Ellipsis ってなんだ Ellipsis というのは、主に拡張スライス文と共に使われる特殊な定数のこと。 これを使うと、例えば配列などのスライスで「...」を指定できるようになる。 3. 組み込み定数 — …

Python: 環境ごとの依存ライブラリをセットアップスクリプトの extras_require で管理する

Python のパッケージを作っていると、特定の環境だけで必要となるパッケージが大抵はでてくる。 例えばデータベースを扱うアプリケーションなら、使う RDBMS によってデータベースドライバのパッケージが異なる。 あるいは、インストール先の Python のバー…

Python: (今のところ) Flask で Request#get_data(as_text=True) は使わない方が良い

今回は最近見つけた Flask (正確には、その中で使われている WSGI ツールキットの Werkzeug) のバグについて。 先にざっくりと概要を説明しておくと Flask の Request#get_data() の引数として as_text=True を渡したときの挙動に問題がある。 このメソッド…

Python: Alembic をプロジェクトの途中から導入する

今回は Python のデータベースマイグレーションツールの Alembic について。 Alembic を使うとデータベースのスキーマをマイグレーションスクリプトにもとづいて管理できる。 マイグレーションスクリプトというのは、スキーマのバージョンを現在の状態から進…

Python: SQLAlchemy + mysqlclient (MySQLdb) でマルチバイト文字を扱う

今回は Python の O/R マッパーである SQLAlchemy と MySQL ドライバの mysqlclient を使ってマルチバイト文字を扱うときの注意点について書いてみる。 ただし RDBMS については MySQL ではなく、代わりに MariaDB を使った。 注意点というのを先に書いてし…

Python: インターネットと疎通がない環境に Python パッケージをインストールする (改)

このブログでは、以前にインターネットと疎通のない環境で Python パッケージをインストールする方法について書いたことがある。 具体的には Wheel でパッケージングした配布物を pip を使ってインストールしていた。 blog.amedama.jp ただ、上記の記事には…

Python: skflow を使ってディープラーニングで FizzBuzz 問題を解いてみる

最近 TensorFlow を使ってディープラーニングで FizzBuzz 問題を解くっていうブログ記事を読んだんだけど、これが面白かった。 joelgrus.com そこで、自分でも同じようにディープラーニングを使って FizzBuzz 問題を解いてみることにした。 ただし、アレンジ…

Python: 明示的な相対インポートの使い方

Python のインポートには、次のように3つの種類がある。 暗黙の相対インポート 明示的な相対インポート 絶対インポート このうち、暗黙の相対インポートについては Python 3 で廃止されたので使ってはいけない。 となると、残るは明示的な相対インポートか…

Python: pipdeptree でパッケージの依存関係を調べる

Python のパッケージ同士が、どのように依存しているかを調べるのは意外と面倒くさい。 そんなときは今回紹介する pipdeptree を使うと楽ができそう。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34…

Python: flake8 のプラグインを書いてみる

flake8 は Python の linter の一種。 linter というのはソースコードを解析して問題がある箇所を見つけるツールの総称のことをいう。 flake8 の特徴としてプラグイン機構が備わっていることが挙げられる。 このプラグインは自分で自作できる。 つまり、独自…

Python: ast (Abstract Syntax Tree: 抽象構文木) モジュールについて

標準ライブラリの ast モジュールを使うと Python で書かれたソースコードを構文解析できる。 それによって得られるオブジェクトは AST (Abstract Syntax Tree: 抽象構文木) と呼ばれる。 その使い道としては、例えば Python の lint ツールなどが考えられる…

Python: uptime でシステムの連続稼働時間を得る

システムの uptime (連続稼働時間) に関する情報はプラットフォームごとに取得する方法が異なっている。 今回紹介する Python の uptime パッケージは、それらの差異を吸収して共通の API で連続稼働時間を知ることができる。 今回使った環境は次の通り。 $ …

「スマートPythonプログラミング」という本を書きました

表題の通り Python の本を書いたので、そのご紹介です! スマートPythonプログラミング: Pythonのより良い書き方を学ぶ作者: もみじあめ発売日: 2016/03/12メディア: Kindle版この商品を含むブログを見る どんな本なの? ひと言で表すと、自信を持って Pytho…

Python: テストフレームワーク nose のプラグインを書いてみる

nose は Python のテストフレームワークのひとつ。 特徴のひとつとしてプラグイン機構があるためテストランナーの挙動をカスタマイズできる点が挙げられる。 プラグインの書き方は次のページに詳しく書かれている。 Writing Plugins — nose 1.3.7 documentat…

Python: モジュールとパッケージ

Python のモジュールとパッケージという概念についてまとめておく。 今回使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.3 BuildVersion: 15D21 $ python --version Python 3.5.1 モジュールを作ってみる Python におけるモ…

Python: 古いバージョンを使い続けるということ

例えば標準出力にユニコード文字列を書き込むという単純極まりない処理をやってみる。 Python 2.7 を使うとこんなかんじ。 $ python --version Python 2.7.10 $ python >>> import sys >>> sys.stdout.write(u'うにこーど\n') うにこーど 何の問題もない。 P…

Python: EAFP スタイルと LBYL スタイル

プログラミングの方針に EAFP スタイルと LBYL スタイルという分類の仕方があることを知った。 これはそれぞれ「Easier to Ask for Forgiveness than Permission」と「Look Before You Leap」の頭文字から取られているらしい。 ざっくり言えば EAFP スタイル…

Python: PyPI にないパッケージを依存パッケージにするには

PyPI に無いパッケージを自作パッケージの依存ライブラリにしようとしたら色々と苦労したので、そこで得られた知見を共有しておく。 どうやら現状では setuptools と pip で対応方法が異なっているために、それぞれで微妙に異なるやり方を取る必要があるよう…

Python: pipe を使った Infix プログラミング

今回紹介する Python の pipe というサードパーティ製のパッケージは、実用性はともかくとして非常に面白い API になっている。 pipe を使ったソースコードを見れば目からウロコが落ちること請け合いだ。 その独特な書き方はインフィックス記法というらしい…

Python: concurrent.futures を使った並行・並列処理

Python の concurrent.futures はバージョン 3.2 で追加された並行・並列処理用のパッケージ。 似たようなパッケージにはこれまでにも threading や multiprocessing があったんだけど、これはそれよりも高レベルの API になっている。 デフォルトでスレッド…

Python: TensorFlow のチュートリアルでソフトマックス回帰を試す

最近、囲碁でプロ棋士を負かした AlphaGo も、この TensorFlow で組んだニューラルネットワークを使っているんだとか。 とはいえ、チュートリアルを読みながら使ってみると、これは単にディープラーニングだけをターゲットにしたライブラリではないように感…

Python: モジュールを動的にロードする

Python のモジュールは通常であれば import 文を使ってあらかじめ静的にロードする。 では、プログラムの中で動的にロードしたい場合にはどうしたらいいのか?というのが今回の話。 結論から先に言うと今は標準ライブラリの importlib を使うのが推奨される…

Python: doctest を書いてみよう

今回は Python が標準で提供しているテスト機構の一つである doctest について書いてみる。 doctest というのは docstring という Python のドキュメンテーション機構を使って一緒にテストもしちゃおうという発想の代物。 docstring については以前にもこの…

Python: 特殊メソッド __getattr__() を使う際の注意点

特殊メソッドというのは、名前の前後にアンダースコアがふたつ付いた、特別な意味をもったメソッドのことをいう。 これをユーザ定義クラスで実装すると、クラスのもつ基本的な挙動をオーバーライドできる。 その中でも __getattr__() という特殊メソッドを使…