Help us understand the problem. What is going on with this article?

[機械学習] irisデータセットをSVMで分類しleave-one-out交差検証で分類精度を算出する

はじめに

大学院の研究でSVM(support vector machine)という教師ありデータ群に対して機械学習で分類を行う手法を扱おうと思っており,折角なので記事にしていきます.また今回はサンプル数がそこまで多くない機械学習を想定しているためleave-one-out交差検証という手法で訓練データとテストデータを分割しようと思います.

実装環境

・Google Colaboratory

データセット

使用したのは機械学習入門でよくみるirisデータセットです.サンプル数が150で4つの特徴量(sepal length, sepal width, petal length, petal width)をもち,それぞれに花の種類(setosa, versicolor, virginica)のラベルが付与されているものになります.

コード

from sklearn import svm
from sklearn.model_selection import LeaveOneOut
import numpy as np
from sklearn.datasets import load_iris

iris = load_iris()  # irisデータセットを読み込む

attribute=[]  # 初期化
label=[]  # 初期化

for x, y in zip(iris.data[], iris.target[]):
  data.append(x)
  target.append(y)

data = np.array(data)  # numpy行列に変換
target = np.array(target)  # numpy行列に変換

loo = LeaveOneOut()  # LOOCVのインスタンス生成
clf = svm.SVC(gamma="scale")  # SVMのインスタンス生成

entire_count = loo.get_n_splits(data)  # テスト回数取得
correct_answer_count=0  # 推定が正解だった数初期化

for train_index, test_index in loo.split(data):  # loo.split(data)で訓練データとテストデータを分割
    data_train, data_test = data[train_index], data[test_index]
    target_train, target_test = target[train_index], target[test_index]
    clf.fit(data_train, target_train)  # 学習させる
    result = clf.predict(data_test)  # テストデータからラベルを予測する
    if result == target_test:  # ラベルと元々のラベルが一致していれば+1
        correct_answer_count += 1

rate = (float(correct_answer_count) / float(entire_count))  # 正解率を計算
print(str(rate))  # 正解率を出力
出力
0.9666666666666667

終わりに

コードについてはライブラリをそのまま使えば簡単に実装できますね.推定精度は96.7%となりました.leave-one-out交差検証のデータ全体から一つをテストデータとして,その他全てを学習に用いるという特性上,サンプル数によっては時間がかかってしまうという弱点があるみたいです.しかし,今回はサンプル数が150だけだったため気になりませんでした.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした