LoginSignup
1
2

More than 1 year has passed since last update.

SIGNATE練習問題(アヤメ画像分析)をやってみた

Posted at

背景

  • データ分析、機械学習初心者
  • KaggleのTitanic練習問題をなんとかやってみた
  • 自然言語処理よりは画像認識が時間がかからなそうと聞いたので、やってみた

環境

  • Jupyter Notebook

    • Google Colabへ移す予定
  • Pythonライブラリ

    • pandas
    • sklearn
    • numpy

流れ

  1. データの読み込み、確認
  2. クレンジング(学習データとテストデータの分類)
  3. 分類器の作成
  4. 学習済みデータをもとに予測、正確性の確認
  5. テストデータをもとに予測
  6. 結果ファイル作成、提出

データ読み込み

  • サイトにアクセスして、データタブから下記3ファイルをダウンロードしておく
    • train.tsv
    • test.tsv
    • sample_submit.csv

  • Pythonにて、ライブラリimport、データ読み込み
ayame_recognition.py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.model_selection import cross_val_score
from sklearn.metrics import accuracy_score
import numpy as np


Traindata=pd.read_csv("train.tsv",delimiter="\t")
Testdata=pd.read_csv("test.tsv",delimiter="\t")

フォーマットの確認

  • SIGNATEのサイトからフォーマットを確認する
    • ヘッダーと、データ型を把握しておく
    • 評価版データの目的変数(Class)を出すことが今回の趣旨である
    • アヤメ品種が3種類あること把握しておく
      image.png
      image.png

クレンジング

  • クレンジング(学習データとテストデータの分類)
    • 説明変数と目的変数をそれぞれ別の変数に代入する
    • 複数列の値を全て取り出して、代入
    • 学習データの説明変数、学習データの目的変数、テストデータの説明変数に分ける
ayame_recognition.py
X=Traindata.loc[:,['sepal length in cm','sepal width in cm','petal length in cm','petal width in cm']]
Y=Traindata.loc[:,['class']]
Xt=Testdata.loc[:,['sepal length in cm','sepal width in cm','petal length in cm','petal width in cm']]
  • 学習用データは、さらに学習用データと試験用データに分類する(2割がテストデータ)
ayame_recognition.py
X_train,X_test,y_train,y_test = train_test_split(X,Y,test_size = 0.2)

分類器の作成

 * sklearnから分類器を呼び出して、分類した学習用データを入れる
 * fit関数で機械学習する
ayame_recognition.py
clf = svm.SVC()
clf.fit(X_train,y_train)

学習済みデータをもとに予測、正確性の確認

  • 分類器に対して、テストデータを入れて、sklearnのpredict関数で予測する
ayame_recognition.py
y_pred = clf.predict(X_test)
  • 予測したデータと、実際のデータ(classが入ったy_test)が正しい確認する
ayame_recognition.py
accuracy = accuracy_score(y_test,y_pred)
print(accuracy*100,'%')
  • 100.0 %と出たら、予測が正しそう

テストデータをもとに予測(本番)

ayame_recognition.py
X_pred = np.array(Xt)
y_pred = clf.predict(X_pred)

結果ファイル作成、提出

  • ヘッダー無しにする
ayame_recognition.py
Submit=Testdata.loc[:,['id']]
Submit['result']=y_pred
Submit.to_csv("submit.csv",header=False,index=False)
1
2
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
1
2