Irisデータをsklearnで機械学習

Irisデータをsklearnで機械学習してみました。モデルはLogistic Regression。データをtrain、testに分割しますが、train量の割合を増加させながら、都度testの成績をチェックしてグラフ化すると、train量が増加するにつれ、成績が上昇することが確認出来ます。


import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import ShuffleSplit
from sklearn import linear_model

# matplotlibの準備
import matplotlib.pyplot as plt
%matplotlib inline
data = load_iris() # データをロード
X = data.data      # 特徴量
y = data.target    # ラベル

clf = linear_model.LogisticRegression() # 識別器を作成
# 学習データの分量を0.05刻みで増加させる
train_sizes = np.arange(0.1, 1.0, 0.05)
all_mean = []
all_std  = []

for train_size in train_sizes:

    ss = ShuffleSplit(
                    n_splits=100,
                    train_size=train_size,
                    test_size=1-train_size)

    scores = []
    for train_index, test_index in ss.split(X):

        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]

        clf.fit(X_train, y_train)
        score = clf.score(X_test, y_test)
        scores.append(score)

    scores = np.array(scores)
    print("train_size {0:.0f}%: {1:4.2f} +/- {2:4.2f} %".format(
        train_size * 100, 
        scores.mean() * 100, 
        scores.std()* 100))
    all_mean.append(scores.mean() * 100)
    all_std.append(scores.std() * 100)
plt.plot(train_sizes, all_mean)
plt.ylim(70,100)
plt.xlim(0,1)

コメントを残す