2015年8月24日月曜日

Python3 で OpenCV3を使う(Windows)。

最近やりたいことはほとんどPython3で出来ているが、OpenCVを使う時だけpython2に切り替えている。OpenCVもPython3に対応したようだが、配布バイナリはPython2のものしか提供されていない。オフィシャルでないけど、サクッとPython3にOpenCV3をインストールする方法を見つけたので紹介する。


まず、ここから.whlファイルをダウンロードする。
(このサイト経由だと余計なものをダウンロードしなくて済むのでよい)
http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

whlはpipでインストールできるので、

pip install opencv_python-3.0.0-cp34-none-win_amd64.whl

とする。

前はソースからコンパイルとかしたけど、こんなにラクになるとは。ありがとうございます。

2015年7月19日日曜日

matplotlibのcolormap

scipy2015に興味深い講演があった。
A Better Default Colormap for Matplotlib
https://www.youtube.com/watch?v=xAoljeRJ3lU


Matplotlibの現在のデフォルトの色はjet。
Matplotlib2.0からはデフォルトの色が'viridis'に変わる。
http://betterfigures.org/2015/07/10/a-welcome-development-for-matplotlib/
'viridis'は4つの候補のうちの1つで、投票で選ばれたらしい(緑が入ってるから)。4つともMatplotlib1.5から導入はされるらしい。

なにが良くなったかというと、
色空間を連続的に変化させるだけでなく、人間の視覚を通した時にスムーズに変化するようになっているらしい。こうすることによって、より細かい変化に気付くことができる。たとえば、医師の誤診断とかも減るとか。更に、白黒にしたとしても分かるし、色盲の人でもわかりやすいように設計されているらしい。

ここには動画もある。
https://bids.github.io/colormap/

ちなみに今使えるcolromapサンプルはここにある。
http://matplotlib.org/examples/color/colormaps_reference.html

2015年6月28日日曜日

Pythonで多項式回帰

pythonで最小二乗法で係数を求めるのには関数を定義しなければいけないが、高次の多項式だとクロスタームやらいっぱい出てきて書くのが大変だ。

scikit-learnのPolynomialFeaturesはそこを自動で計算してくれる。
例えば2次の場合degree=2とすれば、

[x1, y1] -> [x1**2, x1*y1, y1**2, x1, y1]

を計算してくれる。

それを使って多項式近似をする。
以下メモ。
Pipelineについては
http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html

from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

#original function
def f(x):
    return 2*x[0]**2 + 3*x[0]*x[1] + 4*x[1]**2 + 2*x[0] + 3*x[1] + 4

#observed data
xx, yy = np.meshgrid(np.linspace(-2, 2, 10), np.linspace(-2, 2, 10))
X = np.vstack((xx.reshape(-1), yy.reshape(-1))).T
y = list(map(f, X))

#fit the data
degree = 2
model = make_pipeline(PolynomialFeatures(degree), Ridge())
model.fit(X, y)

#accessing to the coeffs
#(model is a Pipeline.)
print(model.steps[1][1].coef_)