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

CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: KMeans 法を実装してみる

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

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

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

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

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

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…

macOS Sierra から Ubuntu 16.04 LTS のディスクを NFS でマウントする

普段の開発環境として Mac を使っているものの、一部の作業を別の Linux マシンでやりたい、という場面があった。 そこで Mac から Ubuntu のディスクを NFS でマウントすることにした。 こうすれば開発環境としては Mac を使いつつ、成果物を使った作業は U…

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 …

Mac: コマンドラインでプリンタを操作する

ちょっとまとまった量の書類を印刷する機会があって、手作業は大変だからターミナルで作業したいなと思った。 今回は、そのとき調べた内容について書いておく。 尚、操作するプリンタのドライバ等は既にインストールした状態を前提にしている。 使った環境は…

統計: 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…

Node.js: Mac に nvm で複数のバージョンをインストールする

Node.js には同時に複数の LTS (Long Term Support) がサポートされる期間が存在している。 また、特定のバージョンの Node.js でないと動かないようなライブラリも結構ある。 そこで、今回は複数バージョンの Node.js をインストールして管理できる nvm を…

Mac: Ruby の開発環境を整えてみる

諸事情により Ruby を書くことになるかもしれないので、環境を整えるためにやったことをメモしておく。 rbenv を使って複数バージョンの Ruby をインストールして、Bundler で vendoring できるようにするところまで。 今回使った環境は次の通り。 $ sw_vers…

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) となっ…

Mac OS X に Homebrew で R をインストールする

R は統計の世界でよく使われているプログラミング言語とその実行環境。 Mac OS X なら Homebrew を使うと割りとサクッとインストールできる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G1004 下準…

Mac で USB シリアルケーブルの iBUFFALO BSUSRC0610BS を使う

法人向けのネットワーク機器を使ったりするときなんかは、コンソールを取るのにシリアルケーブルが必要なことがある。 今回は、家で使っている iBUFFALO BSUSRC0610BS を Mac OS X で使う方法についてメモっておく。 商品はこちら。 この製品のドライバはチ…

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

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

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

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

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 を使うとデータベースのスキーマをマイグレーションスクリプトにもとづいて管理できる。 マイグレーションスクリプトというのは、スキーマのバージョンを現在の状態から進…

SQL: ナイーブツリーと経路列挙モデル

今回のエントリは以前かいた SQL のアンチパターン「ナイーブツリー」に関する記事の続き。 blog.amedama.jp 再帰クエリをサポートしていない RDBMS で再帰的な構造を表現するための解決策のひとつ経路列挙モデルを扱う。 使った環境は次の通り。 $ sw_vers …

SQL: ナイーブツリーと再帰クエリ

今回は「SQLアンチパターン」の中で紹介されているナイーブツリーというアンチパターンについて見てみることにする。 www.oreilly.co.jp 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.4 BuildVersion: 15E65 $ mysql --ve…

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

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

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

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

docker-machine で "Error response from daemon: client is newer than server" になったときの対処方法

今回のネタは、おそらく docker-machine を使っていればいつか遭遇するエラーについて。 結論から先に言うと docker-machine を使っていて、ある日 Docker 本体のバージョンを更新するとこうなる。 まず前提として Docker は Linux コンテナが動作する Docke…

Python の DB-API (Database API) とは何か

Python でデータベース周りについて調べていると、ドキュメントの中にちょくちょく DB-API (2.0) という単語が出てくる。 果たしてこの DB-API とは何者なのか、というのが今回の主題。 結論から言ってしまうと、DB-API というのは Python でリレーショナル…

Mac OS X でターミナルの起動シェルを変更する

なんか毎回忘れてぐぐることになるのでメモっておくことにする。 動作を確認した環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11 BuildVersion: 15A284 ターミナルの起動シェルを変更するには chpass コマンドを使う。 使用するシ…

Python: Alembic でデータベースのスキーマ変更を自動検出する

Alembic は Python で書かれたデータベースマイグレーションツール。 アプリケーションを開発していると、データベースのスキーマ変更はちょくちょくある。 そうした場合、よくあるパターンでは更新内容を SQL のテキストファイルで管理したりする。 それに…

Mac OS X で Golang に入門してみる

以前から Golang (Go 言語) にはポスト C 言語として興味があった。 マシン語を出力できる低レイヤー性にもかかわらず、スクリプト言語に近い記述しやすさも併せ持つというのはなかなかに魅力的だ。 今回はその Golang に関する概念を調べつつ開発環境を整え…

Homebrew の GitHub API rate limit exceeded ... を回避する

ある日、Homebrew を使っていると以下のようなエラーに見舞われた。 なるほど組織などでプロキシを使ってインターネットにアクセスしていると、送信元 IP アドレスが同一になるため GitHub API の利用制限に引っかかりやすいようだ。 $ brew search direnv d…

direnv を使ってみる

direnv は特定のディレクトリのみで有効な環境変数や設定を行うためのアプリケーション。 今回はそれを Mac OS X で使ってみる。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.10.5 BuildVersion: 14F27 direnv をインストールする direnv は Homebr…

Homebrew で OpenCV3 の Python バインディングを試す

OpenCV はオープンソースのコンピュータビジョンライブラリ。 画像だけでなく動画も処理できたり、それ関連の機械学習アルゴリズムまで実装してたりする。 本体は C++ で書かれているけど Python バインディングもあるので、今回はそれを試してみる。 OpenCV…

Ansible が対象ホストで生成する実行可能ファイルを消さないようにする

Ansible は対象ファイルでモジュールを実行する場合、それを実行可能ファイルに加工して対象ホストに転送した上で実行する。 その際に生成される実行可能ファイルはデフォルトでは消去されてしまうため、Ansible の挙動を調べる際に都合が悪い。 今回はその…

開発版の Ansible 2.0 をインストールする

この記事を書いている時点で Ansible の安定版はバージョン 1.9 系だけど、もうしばらくすると 2.0 系がリリースされそうな雰囲気になっている。 メジャーバージョンが上がるということもあって 2.0 系には一部に後方互換性のない変更も含まれている。 そこ…

Homebrew で GNU xargs をインストールする

OSX にあらかじめ入っている xargs は GNU 拡張のオプションが使えない。 それで困ったときは Homebrew で findutils をインストールする。 $ brew install findutils すると gxargs という名前で GNU xargs がインストールされる。 $ gxargs --version xarg…

Homebrew で boot2docker から Docker Machine に移行する

OSX や Windows から Docker を楽に使うことのできるツールとして有名な boot2docker だけど、これが最近になって非推奨になってしまった。 例えば boot2docker で Docker ホストの仮想マシンを起動したりすると、以下の様なメッセージが表示される。 $ boot…