Scikit-learnのモデルをまとめてみた
皆さんこんにちは
お元気ですか。私は元気です。
今日は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