sklearnと分類アルゴリズム

7531 ワード

【ガイド】周知のように、Scikit-learn(以前はscikits.learnと呼ばれていた)はPythonプログラミング言語用の無料ソフトウェアマシン学習ライブラリである.ベクトルマシン,ランダム森林,勾配増強,k−meansおよびDBSCANをサポートするなど,種々の分類,回帰およびクラスタリングアルゴリズムを有し,Python数値および科学ライブラリNumPyおよびSciPyと相互運用することを目的としている.本稿では、論理回帰、素朴ベイズ、KNN、SVM、意思決定ツリーなど、一般的な機械学習分類アルゴリズムについて説明します.
01論理回帰(Logistic regression)
論理回帰は、彼の名前に「回帰」が含まれているにもかかわらず、回帰ではなく分類された線形モデルである.論理回帰は文献ではlogit回帰,最大エントロピー分類または対数線形分類器とも呼ばれる.次に、sklearnにおける論理回帰のインタフェースについて説明します.class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='warn', max_iter=100, multi_class='warn', verbose=0, warm_start=False, n_jobs=None)の一般的なパラメータについて説明します.
penalty:罰則項目.一般的には「l 1」または「l 2」です.
dual:このパラメータはliblinearソルバを使用する「l 2」ペナルティにのみ適用されます.一般的に、サンプル数が特徴数より大きい場合、このパラメータはFalseに設定されます.
C:正規化強度(小さい値はより強い正規化を示す)は、正の浮動小数点数でなければなりません.
solver:パラメータソルバ.一般的には{‘newton−cg’,‘lbfgs’,‘liblinear’,‘sag’,‘saga’}がある.
multi_class:多分類問題変換、「ovr」を使用すると、多分類問題を複数の二分類に変換して題視する.「multinomial」を使用すると、損失関数は確率分布全体の多項式フィット損失になります.
あまり使われないパラメータはここでは紹介しませんが、詳細を知りたい場合はsklearnの公式サイトで確認してください.
ケース:
ここではsklearnに内蔵されたデータセットであるirisデータセットを使用します.これは3つの分類の問題です.次に、論理回帰を使用して分類します.
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0, solver='lbfgs',
                         multi_class='multinomial').fit(X, y)

以上,predictという関数を用いてテストセットを予測できる完全な論理回帰モデルを訓練した.
clf.predict(X[:2, :])

予測の確率を知りたければpredit_probaという関数は予測を行う.
clf.predict_proba(X[:2, :])

私たちの予測の正確性を知りたければ,scoreという関数によって私たちのモデルの良し悪しを判断することができる.
clf.score(X, y)

02地味ベイズ
素朴ベイズ法は,与えられたクラス変数値の場合,素朴仮定の各ペアの特徴間に条件独立性があるベイズ定理に基づく監督学習アルゴリズムのセットである.以下、いくつかの素朴なベイズの方法を紹介します.
1.ガウス素朴ベイズ(GaussianNB)
ガウスの素朴なベイズの原理はこの文章を見ることができます.http://i.stanford.edu/pub/cstr/reports/cs/tr/79/773/CS-TR-79-773.pdf
ここでは、sklearnを使用してGaussianNBを実現する方法を紹介します.
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d"
      % (iris.data.shape[0],(iris.target != y_pred).sum()))

2.多項式素朴ベイズ(MultinomialNB/MNB)
ここではランダムにデータのセットを生成し,MultinomialNBアルゴリズムを用いて学習した.
import numpy as np
X = np.random.randint(50, size=(1000, 100))
y = np.random.randint(6, size=(1000))
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X, y)

print(clf.predict(X[2:3]))


3.相補的な素朴ベイズ(ComplementNB/CBB)
ComplementNBは標準多項式素朴ベイズ(MNB)アルゴリズムの改良であり,特にアンバランスデータセットに適している.
具体的には、ComplementNBは、各クラスからの補足統計を使用してモデルの重みを計算する.CNBの発明者は、実験結果により、CNBのパラメータ推定がMNBのパラメータ推定よりも安定であることを示した.さらに、テキスト分類タスクでは、CNBは通常、MNBよりも優れている(通常はかなりの利点である).
CNBのsklearnインタフェース:
class sklearn.naive_bayes.ComplementNB(alpha=1.0, fit_prior=True, class_prior=None, norm=False)

共通パラメータの説明:
Alpha:プラス(ラプラス/LIdstone)スムージングパラメータ(スムージングなし0).
fit_prior:クラスの事前確率を学習するかどうか.偽であれば,統一先験を用いる.
class_prior:クラスの事前確率.指定した場合は、データに基づいてパイロットを調整しません.
norm:ウェイトの2回目の標準化を実行するかどうか.
ケース:
import numpy as np
X = np.random.randint(50, size=(1000, 100))
y = np.random.randint(6, size=(1000))
from sklearn.naive_bayes import ComplementNB
clf = ComplementNB()
clf.fit(X, y)

print(clf.predict(X[2:3]))

4.ベルヌーリ素朴ベイズ(BernoulliNB)
BernoulliNBは多重ベヌリー分布のデータに基づく素朴なベイズ訓練と分類アルゴリズムを実現した.BernoulliNBは、特定のデータセット、特にドキュメントの短いデータセットでよりよく表現される可能性があります.BernoulliNBのsklearnは前述のアルゴリズムインタフェースと似ている.
ケース:
import numpy as np
X = np.random.randint(50, size=(1000, 100))
y = np.random.randint(6, size=(1000))
from sklearn.naive_bayes import BernoulliNB
clf = BernoulliNB()
clf.fit(X, Y)

print(clf.predict(X[2:3]))

03 K-Nearest Neighbors (KNN)
KNNは、kがユーザによって指定された整数値である各クエリポイントの最近の近隣に基づいて学習を実現する.最も古典的な機械学習アルゴリズムの一つです.
KNNのskearnのインタフェースは以下の通りです.
class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)

共通パラメータの説明:
n_neighbors:隣接数は,KNNにおいて最も重要なパラメータである.
Algorithm:最近隣接するアルゴリズムを計算し、よく使われるアルゴリズムは{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}である.
ケース:
from sklearn import datasets
iris = datasets.load_iris()

from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(iris.data, iris.target) 

print(neigh.predict((iris.data))

print(neigh.predict_proba((iris.data))

04サポートベクトルマシン(SVM)
サポートベクトルマシン(SVms)は、分類、回帰、異常値検出のための監視学習方法です.ここでは分類方法だけを紹介します.ベクトルマシンをサポートする利点は、高次元空間で有効であることです.次元数がサンプル数より大きい場合でも有効であるため、小さなデータセットの場合、SVMは良好な性能を示すことができる.
SVMはsklearnに3つのインタフェースがあり、それぞれLinearSVC、SVC、NuSVCである.最も一般的に使われるのはSVCインタフェースです.
SVCのsklearnインタフェース:
class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)

共通パラメータの説明:
C:エラー項目のペナルティパラメータC
kernel:コア関数の選択.よく使われるコア関数は、「linear」、「poly」、「rbf」、「sigmoid」、「precomputed」です.
probability:予測時に確率推定を使用するかどうか.
ケース:
import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = SVC(C=1,kernel='rbf',gamma='auto')
clf.fit(X, y) 

print(clf.predict([[-0.8, -1]]))

拡張:SVMは二分類問題を解決するのに優れた優位性を持っているが、多分類問題を解決するのは難しい.一般的な解決策は、「一対一」の方法で多分類の問題を解決することです.具体的には、これがn_であると仮定するclassの分類問題は、n_を構築します.class*(n_class-1)/2個の二分類は,この多分類問題を解決する.
X = [[0], [1], [2], [3]]
Y = [0, 1, 2, 3]
clf = svm.SVC(gamma='scale', decision_function_shape='ovo')
clf.fit(X, Y) 

dec = clf.decision_function([[1]])
dec.shape[1] # 4 classes: 4*3/2 = 6

clf.decision_function_shape = "ovr"
dec = clf.decision_function([[1]])
dec.shape[1] # 4 classes

05決定ツリー
決定ツリーは十大古典アルゴリズムの一つとして,多分類問題をうまく処理できる.
決定ツリーのsklearnインタフェース:
class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)

共通パラメータの説明:
criterion:この関数は分割の根拠を測定するために使用されます.一般的な「gini」は、情報利得を計算するためにキニー係数とentropyを計算するために使用されます.
max_depth:ツリーの最大深さ.
min_samples_split:内部ノードを分割するために必要な最小サンプル数.
min_samples_leaf:リーフノードに必要な最小サンプル数.
ケース:
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state=0)
iris = load_iris()
clf.fit(iris.data, iris.target)

clf.predict(iris.data)
clf.predict_proba(iris.data)                       

06まとめ
本論文では,論理回帰,素朴ベイズ,KNN,SVM,および決定ツリーアルゴリズムのようないくつかの一般的な機械学習分類アルゴリズムを紹介した.同時にsklearnのpythonインタフェースも用いて各アルゴリズムの使用例を示した.
微信公衆番号「人工知能トップ」から転載