初心者 python学習~1~
アヤメの分類に挑戦!
学習のアウトプットのために書いています。
python学習の手始めに、アヤメの分類を行いました。アヤメという植物はSetosa、Versicolor、Virginicaという3つの品種に分かれており、がく片の幅、がく片の長さ、花びらの幅、花びらの長さという4つの要素で分類することができます。
今回はこのアヤメの4つの要素がまとめられたデータを学習用データとテスト用データにわけ、pythonで学習用データを学習させ、テストデータを与えた際に、正確に分類するというプログラムを作っていきます。
import pandas as pd・・・①
from sklearn.model_selection import train_test_split・・・②
from sklearn.metrics import accuracy_score・・・③
iris_data=pd.read_csv("IRIS.csv",encoding="utf-8")・・・④
y=iris_data.loc[:,"Name"]・・・⑤
x=iris_data.loc[:,["sepal.length" ,"sepal.width" , "petal.length" , "petal.width" ]]・・・⑥
x_train,x_test,y_train,y_test=train_test_split(x,y, test_size=0.2,train_size=0.8,shuffle=True)・・・⑦
clf=SVC()・・・⑧
clf.fit(x_train,y_train)・・・⑨
y_pred=clf.predict(x_test)・・・⑩
print("正解率=",accuracy_score(y_test,y_pred))・・・⑪
コードは以上です。エディターはJupyter Notebookを用いました。
各コードを解説していきます。
①pythonのデータ解析用ライブラリであるpandasをインポートし利用できるようにします。Pandasではパソコンのメモリ容量が許す限り、大量のデータをDataFrameに読み込んで処理を行うことが出来ます。
②train_test_splitはscikit-learnでデータを学習用とテスト用に分けるための関数です。アヤメデータを分けるのに必要なのでここでインポートしています。
③テスト結果を評価するためのパッケージです。sklearn.metrics.accuracy_score
④pandasライブラリのread_csv()メソッドを利用しIRIS.csvファイルを読み込んでいます。このメソッドは読み込んだ結果として、pandasのDataframeオブジェクトを返します。読み込んだデータを変数iris_dataに代入しています。
⑤⑥ではデータを2つに分けています。一つは品種名(y)、もう一つはがく片の幅、がく片の長さ、花びらの幅、花びらの長さ(x)といったデータです。
データの分離には、Dataframeオブジェクトのloc()メソッドを利用すると簡単に分離できます。
⑦x、yをそれぞれ学習用データをテスト用に分離します。train_test_split()メソッドの登場です。ここではテストデータ:学習データ=2:8で分けていて(test_size=0.2,train_size=0.8)、学習用データやテストデータに偏りが出ないようにshuffle=Trueパラメーターを指定しています。
これによりx、yデータをランダムに並び替えた後にデータを抽出するようにしている。
⑧分類器を作成しています。アルゴリズムはSVCを利用。変数clfは(classfier=分類器)の略です。
⑨fit()メソッドでデータを学習します。ここでは引数に学習させたいデータを渡します。今回は(x_train,y_train)
⑩ここではテストデータから結果を予測しています。予測にはpredict()メソッドを利用します。このメソッドはテストデータの配列を指定すると、予測結果を返してくれます。今回はx_testxを渡しています。
⑪accuracy_score()メソッドは正解率の計算を行ってくれます。
正しい結果(y_test)と予測結果(y_pred)を指定すると、正解率を返してくれます。
補足:データの分離に関して
ライブラリ:pandas メソッド:loc()
データをラベルと入力データに分離する(列による分類)←ポイント!
ライブラリ:scikit-learn メソッド:train_test_split()
データを学習用とテスト用に分離する(行による分類)
test_sizeとtrain_sizeパラメーターを指定することで比率を指定可能
まだまだ分かっていないことだらけですが、いろいろな手法を使えるようになりたいです。
この記事が気に入ったらサポートをしてみませんか?