Python

-Python- cvxoptのインストール

cvxoptをインストールした際のメモです. Anacondaをインストールした環境下であることが前提です.インストールはターミナルから以下のコマンドを実行するだけです. $ conda install -c conda-forge cvxopt すると,インストールが始まります.

-Python- Jupiter notebook のエラー 'AttributeError: type object ‘IOLoop’ has no attribute ‘initialized’'

ターミナルから jupyter notebook を起動しようとするとエラーが発生することがあります. エラーメッセージは,以下の通り. AttributeError: type object 'IOLoop' has no attribute 'initialized' これは,pyzmqとtornadoのバージョンが競合していること…

-Python- Jupyter notebookのフォントを変更する

Jupyter notebookのデフォルトのフォントは等幅ではないので,普段等幅フォントでコードを書いていると,違和感を覚えます. デフォルトのフォントを変更するには custom.css (ファイルはデフォルトでは ~/.jupyter/custom/custom.css にあります) に以下…

The Zen of Python (Python公案)

Pythonの哲学を示す"The Zen of Python by Tim Peters"というものがあることを知りました. 対話型インタープリターに"import this"と入力すると見ることができます. >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Exp…

-Python- サポートベクターマシン

サポートベクターマシンの実装例を以下の示します. import numpy as np from operator import itemgetter class SVC: def fit(self, X, y, selections=None): a = np.zeros(X.shape[0]) ay = 0 ayx = np.zeros(X.shape[1]) yx = y.reshape(-1, 1)*X indices…

-Python- ロジスティック回帰

二値分類に使われるアルゴリズムであるロジスティック回帰のプログラム例を以下に示します. import numpy as np from scipy import linalg THRESHMIN = 1e-10 def sigmoid(x): return 1 / (1 + np.exp(-x)) class LogisticRegression: def __init__(self, t…

-Python- 汎化,過学習

最初に多項式回帰のアルゴリズムを示します.多項式回帰とは,入力変数 に対して出力 が の多項式関数で表されるというモデルです.簡単のために,入力が1次元と仮定し,多項式の次数が で与えられるとします. ここで,はノイズを表します.このとき線形回…

-Python- リッジ回帰

線形回帰で最小化する目的関数に,パラメータの大きさの項を足して回帰を行うのがリッジ回帰です.リッジ回帰では以下の関数を最小化するようなwを決定します. この計算を実装し,可視化するスクリプトは以下のようになります. # Import Module import num…

UCI Machine Learning Datasets を使った回帰

UCI Machine Learning Datasetsの中のWine quality(ワインについて測定された数値とその品質(1 - 5))*を使って測定値から品質を予測するモデルを作ってみます. # Import Module import numpy as np from scipy import linalg # Definition of Class cla…

-Python- ニュートン法

方程式 をNewton法で解いてみるスクリプトを考えます. # Definition of Function def newton1dim(f, df, x0, eps = 1e-10, max_iter = 1000): x = x0 iter = 0 while True: x_new = x - f(x)/df(x) if abs(x - x_new) < eps: break x = x_new iter += 1 if …

-Python- 勾配降下法

下式のような制約条件のない最適化問題を考えます. Minimize ここで,[TeX: f(x, y) = 5x^2 - 6xy + 3y^2 + 6x -6y] とし,[TeX: f(x, y) = k] を満たす点の集合を考えます. f の勾配は となり,点においては,その点を通る等高線の接戦に垂直方向で,kが…

-Python- 2次計画法

2変数の2次関数 の最小値を求めることを考えます.このような問題は2次計画問題と言います.以下ではPythonのcvxopt パッケージを使います. ライブラリの関数に有力するには標準形に変換しなければなりません.cvxopt では制約条件なしの2次計画問題の標準…

-Python- SciPy 線形計画問題

数理最適化は,与えられた制約の中で,ある関数の値を最大化(あるいは最小化)する問題です.数理最適化問題の基本として,まずは線形計画問題を考えます. 一般には,n変数の場合に線形計画問題を考えることができます. n次元ベクトルxを変数とすると,線…

-Python- 画像の分類(3)

前々回,前回の投稿で学習に使用するサンプルを増やすことが,精度向上に効いてくることがわかりました.すなわち,一人だけの手を学習用サンプルに用いていた時に比べて,他の人の手を交えて,多種多様なサンプルを用いることで汎用性が高まり,精度が向上…

-Python- 画像の分類(2)

前回の投稿で,同じ人の手形状を分類することができました.一方で,人が変わると分類性能(正答率)は極度に悪くなることがわかりました.性能としては,多くの人の手形状を分類できることが望ましいので,対象とする手(人)を増やす,すなわち,学習デー…

-Python- 画像の分類(1)

0-5本の指を立てている6種類の画像の手の形状を分類するプログラム例を以下に示します. 手の形状の分類器は以下の手順で作成します. 右手の手のひら側を撮影した画像を入力する 6種類の手形状を分類する 不特定多数の成人の手を対象とする 正答率80%を目標…

-Python- クラスタリング手法

前回の投稿で k-means によるクラスタリングを行いましたが,クラスタリング手法は大きく分けて階層的(hierarchical)と非階層的(non-hierarchical)の2つに分類できます. 階層的クラスタリンング:データを階層的に分類していく方法です.手法としてはさ…

-Python- クラスタリング k-means

クラスタリングには様々な手法がありますが,以下にk-meansを用いた例を示します.k-meansは1950年代に発表された比較的古い手法のようですが,計算が簡単であり直感的でわかりやすいというメリットがあり,現代でも使用されています. k-meansはクラスタ数…

-Python- クラスタリング Iris データセット

クラスタリングとは,データの性質からデータの塊(クラスタ)を作成する手法です.対象が2次元であれば,散布図により大まかな構造を見ることができます.一方で多次元の場合は,想像がつきにくくなります.また,データが大量であれば人手で分類すること自…

-Python- 様々な回帰モデル(4 - k-近傍法)

k-近傍法(k-nearest neighbor)はデータの近傍性に基づく手法です.未知のデータに対して最も近いk個のデータを選び出すことが基礎になります.クラス分類で使われることが多く,値の平均を使うことで回帰問題にも適用できます.なお,クラスタリング問題で…

-Python- 様々な回帰モデル(3 - Random Forest)

Random Forestは分類問題でも回帰問題でも使用できます.回帰問題用のクラスはsklearn.ensembleRandomForestRegressorです. # Import module import math import numpy as np import matplotlib.pyplot as plt from sklearn import ensemble # Generate ran…

-Python- 様々な回帰モデル(2 - サポートベクターマシン)

サポートベクターマシンは分類問題でも,回帰問題でも使用することができます.回帰用のクラスはsklearn.svm.SVRです. # Import module import math import numpy as np import matplotlib.pyplot as plt from sklearn import svm # Generate random number…

-Python- 罰則付き回帰

最小二乗法は予測値と実際の値の誤差の二乗和を最小にする手法です.この最小にする対象として,誤差だけでなくモデルの複雑度を加味するようにしたのが罰則付き回帰です.モデルの複雑度の繁栄の刺せ方によって,Ridge回帰やLasso回帰といった手法が用いら…

-Python- 様々な回帰モデル(1 - まずは最小二乗法で)

これまでの投稿では,のクラス(線形回帰モデル)を使って学習を行ってきました.には線形回帰モデル以外にも様々な回帰モデルがあります.それらのモデルは,特に非線形回帰問題に対して使われます. 非線形回帰問題は,あるデータの集合が非線形な式に回帰…

-Python- 過学習

過学習は学習データに適応しすぎて,未知のデータへの当てはまりが悪くなる(汎化性能が上がらない)状態です.機械学習において,過学習を抑えて汎化性能を確保することは重要な課題です. まずは,過学習に関する例を示します. にバラつきを与えた学習デ…

-Python- 重回帰

重回帰は y = ax1 + bx2 + cx3 + d のように複数の変数を使う式を想定して解く回帰問題のことです.まずは,明らかに y = ax1 + bx2 + c の関係になるようなデータを作り,回帰問題を解いて見ます.例として対象とする式を y = 3x1 -2x2 + 1 としてデータ作…

-Python- 回帰における評価 - 決定係数

分類問題においては,正解/不正解がはっきりしています.回帰は数値同士であるため,結果の妥当性を客観的に評価する指標としてR^2決定係数を用います.R^2決定係数の定義は以下のようになります. R^2 = 1 - (「観測値」と「予測値」の差の2乗和)/(「観…

-Python- 最小二乗法と評価方法

回帰を行ううえで,最小二乗法がよく用いられます.最小二乗法についてのメモを以下に示します. 対象を何らかの観測によって得られた平面上の点の関係として,その関係を最も的確に表す直線を考えます.一般的に全ての点を通る直線が得られることは,ほぼあ…

-Python- サポートベクターマシン(SVM)

サポートベクターマシン(Support Vector Machine)は分類にも回帰にも使える優れた教師あり学習のアルゴリズムです. サポートベクターマシンの説明として,データを2つに分離する直線をひく例を考えます.データを2分割する線は任意に選ぶことができますが…

-Python- AdaBoost

AdaBoostはアンサンブル学習のブースティングに分類されるアルゴリズムの一つです.AdaBoostの弱仮説器のアルゴリズムは決められていないので,適宜選択する必要があります. Ada Boostでは,難易度の高いデータを正しく分類できる弱仮説器の分類結果を重視…