LoginSignup
0
0

More than 3 years have passed since last update.

なにはともあれ、ロジスティック回帰で機械学習してみる

Last updated at Posted at 2019-08-20

概要

有名なアヤメのデータをもとにしてアヤメの種類を推測するモデルを作成して、
実際にどの程度、正確に予測できるのかを確認する。

前提

  • 必要なモジュールは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分くらいは正しく推測できていました。

0
0
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
0
0