2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

機械学習レシピ#4 Let’s Write a Pipeline

Posted at

  • 教室付き学習の為の基本的なパイプラインコード化
  • 複数の分類器が同じ問題を解く様子を見る
  • アルゴリズムがデータからものを学ぶとはどういうことか

SPAM分類器をつくる

受信メールにSPAMかSPAMでないかとラベル付けする関数

データを集めて、モデルを学習させる準備ができたとする。
しかし実際に運用を始める前に答える必要がある質問がある。
学習データにないEメールを分類するのに精度はどれくらいになるのか。
モデルを導入する前にうまく機能するのかできるだけ検証したい。

方法1) データセットを2つ(学習(モデルの学習用)とテスト(新データに対する精度検証))に分割

\begin{align}
f(x) &= y
\end{align}

xは入力(features)。yは出力(ラベル)

# import a dataset
from sklearn import datasets
iris = datasets.load_iris()

# 分類器を関数と考える1つの方法のため。特徴量x、ラベルyを呼び出す。
x = iris.data
y = iris.target

# x_trainとy_trainは学習セットの特徴量とラベル
# x_testとy_testはテストセットの特徴量とラベル
# test_size = .5はデータの半分をテストに使うことを意味
from sklearn.cross_validation import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = .5)

# 分類器をつくる。今回は決定木を利用。
from sklearn import tree
my_classifier = tree.DecisionTreeClassifier()

# 上の2行を下の2行に置き換えればK近傍を使用した分類器を使うことができる。
# from sklearn.neighbors import KNeighborsClassifier
# my_classifier = KNeighborsClassifier()

# 学習データを使って分類器を学習させる
my_classifier.fit(x_train,y_train)

# 予測メソッドを呼び出しテストデータを分類。(分類器がテストデータの各行に対して予測)
predictions = my_classifier.predict(x_test)

# 予測した結果のラベルを出力
print predictions

# テストセットに対する分類器の精度(スコア)を確認
from sklearn.metrics import accuracy_score
print accuracy_score(y_test,predictions)

多種の分類器があるいっぽう、高レベルではそれらのインタフェースは似ている。

データから学ぶとは

ラベルと特徴は関数の関係に似ている。
xは入力(features)。yは出力(ラベル)

\begin{align}
f(x) &= y
\end{align}
def classify(features):
 # do some logic
 return label

教師付き学習で既にしってるように、この関数を自分たちでは書かず、学習データからそれを学ぶアルゴリズムが欲しい。

関数を学ぶとはどういう意味なのか?
関数は入力値から出力値への対応付けにすぎない。

例えばy=mx +b は直線の関数で、パラメータは2つ(傾きを表すmとy切片を表すb)。
これらのパラメータがあればxの異なる値に対する関数を図示できる。
classify関数にもいくつかパラメータがあるが、入力xは分類したい例の特徴量で、出力yはラベル。
この線をどうやって学ぶのか。
学習データを使ってモデルのパラメータを調整。
   ⇒どうやってパラメータを覚えるのか
      ⇒学習データを使って繰り返し調整する。
        適当に線を引いて、答えがあってたら線は変更せず、間違ってたらモデルのパラメータを調整してもっと正確になるようにする。

関数の本体はどのように見えるのか?
⇒アルゴリズム的に書きたい、学びたい部分。
我々一から始めているのではなく、どこからともなく関数の本体を引っ張ってきている。我々はモデルから始めている。モデルを試作品とか関数の本体を定義する規則と考えて良い。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?