Machine Learning

-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次元と仮定し,多項式の次数が で与えられるとします. ここで,はノイズを表します.このとき線形回…

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…

機械学習手法のインターフェース

機械学習における各種法の処理の流れを以下に示します. 教師あり学習では,特徴量を表す行列Xと,ターゲットまたはラベルを表すベクトルyの組が訓練データとなります.機械学習アルゴリズムを実装したクラスが例えば Algorithm として与えられているとする…

-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分割する線は任意に選ぶことができますが…

ホールドアウトと交差検証

機械学習において学習データとテストデータの分離は重要事項です.分離にあたっては一般的に以下の2つの手法が用いられます. ホールドアウト検証:対象データの中からテストデータを分離して,残りを学習データとする方法. k-分割交差検証:対象データをk…

-Python- AdaBoost

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

-Python- Random Forest

Random Forestはアンサンブル学習と呼ばれる学習法の1つです.アンサンブル学習は,いくつかの性能の低い分類器(弱仮説器)を組み合わせて,性能の高い1つの分類器を作る手法です.弱仮説器のアルゴリズムは決まっていないので,適宜選択します.アンサンブ…

-Python- 分類器の性能評価

2値分類器の混同行列(Confusion Matrix)を以下に示します. 混同行列(Confusion Matrix) Prediction Positive Negative Result Positive True Positive (TP) False Positive (FP) Negative False Positive (FP) True Positive (TP) 分類器の性能指標とし…

-Python- 分類器を使った評価

digitsデータの3と8の画像データを分類する分類器をscikit-learnで作るプログラム例を以下に示します. # Import module import numpy as np from sklearn import datasets from sklearn import tree from sklearn import metrics # load digits data digits…

-Python- digits データセット

scikit-learnに含まれる手書き数字データセット(digits)を表示するプログラムです. digitsデータセットは0から9までの手書き数字の画像データからなるデータセットです.画像は8x8ピクセルのモノクロ画像で,1797枚の画像からなります.以下に,digitsデ…

-Python- 簡単な機械学習プログラム

機械学習における分類問題,回帰問題,およびクラスタリングのプログラム例を以下に示します. まずは,分類問題,回帰問題,およびクラスタリングについての簡単な説明を記します. 分類問題:与えられたデータから分類(クラス)を予測する問題.正解デー…