のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Scikit-learnのモデルをまとめてみた

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

今日はScikit-learnで扱えるモデルについて紹介したいと思います。気が向いたら追加します。
※Sampleは割りと公式サイトのを少々改変したもの使っていたりします。ご了承ください。

モデル全般について

Parameter

パラメータ内容 書き換え対象
閾値 tolの書き換え
初期値 random_stateを入れる
途中経過 verboseを1にする(Defaultは0)
最大回数 max_iter(defaultは永久に止まらない(-1))が選択されていることもある
並列thread数 n_jobsの変更、n_jobs=-1とすると動かせる最大の数となる

Method

関数 内容
fit 渡したデータに基いて学習を行う
predict 予測する、所属しているクラスが返ってくる
get_params パラメータを取得する
predict_proba 所属しているクラスの確率が戻ってくる。Kaggleとかでよく使う出力ですね

基本的に学習手順ですが、モデルのインスタンスを作る→fitする→predictするのみです。
Cross Validationとかは考えていません。

Supervised Machine Learning(教師あり学習)

Support Vector Machine

超がつくぐらい有名な機械学習Support Vector Machine(SVM)です。
最も特徴的なのは、カーネル関数を用いて線形分離ができないものを特徴空間にマッピングを行い
分離することができるようにしていることが最大の特徴ともいえます。

from sklearn import svm
X = [[0, 0], [1, 1]]
y = [0, 1]
clf = svm.SVC()
clf.fit(X, y) 

カーネルの種類は4つあり、kernelのパラメータを変更すれば、問題ありません。
linear,polynomial,rbf,sigmoidがあります。

多クラスの決定法としてはOne VS OneとOne VS Restの二種類ありますが、基本的にはOne VS Oneを用いるようです。

Nearest Neighbors(K近傍法)

有名なのだと、K-NN,近いK個の中から最も近いものを探索し、最も数が多いクラスをその予測データのクラスとする
n_neighborsで、Kの値を決定します。

X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y) 
KNeighborsClassifier(...)
print(neigh.predict([[1.1]]))
print(neigh.predict_proba([[0.9]]))

Logistic Regression

ロジスティック回帰です。よく、AutoEncoderの最後にくっつけられていたりします。

X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X, y)
print(clf.predict([[1.1]]))
print(clf.predict_proba([[0.9]]))

Random Forest

学習データから木の構造を学習し、その構造を元にし、テストデータを予測するアルゴリズム
案外、KaggleのBench Markで見るアルゴリズム

X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X, y)
print(clf.predict([[1.1]]))
print(clf.predict_proba([[0.9]]))

Gradient Boosting Decision Tree

正直、Kaggleで初めて見た。結構性能としては高性能らしく、かなり使われているよう

X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.ensemble import GradientBoostingClassifier
clf = GradientBoostingClassifier()
clf.fit(X, y)
print(clf.predict([[1.1]]))
print(clf.predict_proba([[0.9]]))

Unsupervised Machine Learning(教師なし学習)

K-Means(K平均法)

超有名、かつ割りと高速で有名なクラスタリング手法K平均法
その汎用性から皆さんの機械学習で実装されることも多いとか少ないとか

X = [[0], [1], [2], [3],[4],[5],[10],[100]]
from sklearn.cluster import KMeans
clf = KMeans(n_clusters=2)
clf.fit(X)
print(clf.predict([[1.1]]))

n_clustersがクラスタの分割数です。

Gaussian Mixture Model(GMM)

有名なクラスタリング手法、一つ一つのクラスタが正規分布として表現され、
その重ね合わせによって構築されるクラスタリング手法
クラスタリングとして利用する場合こちらはn_componentsでクラスタの数を指定することができます。
K-平均法よりはこちらの方が良いクラスタリングになると言われています。

X = [[0], [1], [2], [3],[4],[5],[10],[100]]
from sklearn.mixture import GMM
clf = GMM(n_components=2)
clf.fit(X)
print(clf.predict([[1.1]]))

BernoulliRBM

Restricted Boltzmann Machineの一種、正直あまり使ったことがない。
最後にLogistic Regressionとかを持ってきて利用するのが妥当だと思う。

import numpy as np
from sklearn.neural_network import BernoulliRBM
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
model = BernoulliRBM(n_components=2)
model.fit(X)
print model.transform(X)

その他

Principal Component Analysis(主成分分析)

次元圧縮などでよく利用されます。n_componentsで次元数を選択することができます。

from sklearn import decomposition
from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
y = iris.target

pca = decomposition.PCA(n_components=3)
pca.fit(X)
print X
X = pca.transform(X)
print X