背景
- データ分析、機械学習初心者
- KaggleのTitanic練習問題をなんとかやってみた
- 自然言語処理よりは画像認識が時間がかからなそうと聞いたので、やってみた
環境
-
Jupyter Notebook
- Google Colabへ移す予定
-
Pythonライブラリ
- pandas
- sklearn
- numpy
流れ
- データの読み込み、確認
- クレンジング(学習データとテストデータの分類)
- 分類器の作成
- 学習済みデータをもとに予測、正確性の確認
- テストデータをもとに予測
- 結果ファイル作成、提出
データ読み込み
- サイトにアクセスして、データタブから下記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")
フォーマットの確認
クレンジング
- クレンジング(学習データとテストデータの分類)
- 説明変数と目的変数をそれぞれ別の変数に代入する
- 複数列の値を全て取り出して、代入
- 学習データの説明変数、学習データの目的変数、テストデータの説明変数に分ける
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)