概要
有名なアヤメのデータをもとにしてアヤメの種類を推測するモデルを作成して、
実際にどの程度、正確に予測できるのかを確認する。
前提
- 必要なモジュールはimport済み。
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import metrics
やっていく
アヤメのデータを読み込んで、トレーニング用とテスト用に分ける
iris_data = load_iris()
X = iris_data.data
Y = iris_data.target
データの中身はこんな感じ
- iris_data
dataとしてがく片や花弁の長さ(*Length)と幅(*Width)が入っていて、
targetとしてアヤメの種類(Species)が載っている。
{'data': array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
(中略)
'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
(後略)
Xにはdataのみが、Yにはtargetのみが入っている。
モデルを作る
# インスタンスを作る
logreg = LogisticRegression()
# トレーニング用のデータとテスト用のデータにXとYを分ける。
# test_size=0.4はテストようにデータの4割を確保するということ。
# random_state=3 はデータを分けるときの乱数の種を固定にします。
# (test_sizeのパラメータを変えても分け方が一緒なのでどう変わるのかわかりやすいかも。)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.4, random_state=3)
# モデルを作る。
logreg.fit(X_train, Y_train)
# モデルを使ってテスト用のXからYを予想する。
Y_pred = logreg.predict(X_test)
# Y_test と Y_pred の値を比べてどれくらい正しく推測できたか確認する
metrics.accuracy_score(Y_test, Y_pred)
metrics.accuracy_score(Y_test, Y_pred)
の結果が
0.9333333333333333 で9割3分くらいは正しく推測できていました。