ナイーブベイズ
教師あり学習の一種であるナイーブベイズについて、少し簡単なメモを残しておきます。
分類器の目標は、特徴変数が与えられた時に、このデータがどの分類に属すか()を判定することです。
(たとえば、irisデータの場合、に相当するものがsepal length sepal width, petal length, petal width
、に相当するものが、species。)
条件付き確率(:すなわち、データが与えられた時にである確率)をモデル化する手法の一つがナイーブベイズです。
(詳細は割愛しますが、モデル化の際にベイズの定理を用いていているものです。)
SVMも有名ですが、これは識別関数を求めにいくという部分で手法が異なります。
irisのデータで確認してみます。
from sklearn import datasets from sklearn.cross_validation import train_test_split from sklearn.naive_bayes import GaussianNB import matplotlib.pyplot as plt # import iris data iris = datasets.load_iris() X = iris.data Y = iris.target #訓練データとテストデータを作成 X_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.5,random_state=0) nb=GaussianNB() nb.fit(X_train,y_train) y_pred=nb.predict(X_test) fig = plt.figure() ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) ax1.scatter(X_test[:, 0], X_test[:, 1], c=y_pred) ax1.set_xlabel('x1') ax1.set_ylabel('x2') ax1.set_title("Predict") ax2.scatter(X_test[:, 0], X_test[:, 1], c=y_test) ax2.set_xlabel('x1') ax2.set_ylabel('x2') ax2.set_title("Actual") fig.tight_layout()
※実際は、特徴変数は2変数ではありませんが、簡単のため2軸でプロットしています。
正解率(=(正しく分類できた数)/(全体数))=94.667%
nb.score(X_test, y_test)