Python scikit-learnで学習②

前回の記事Python scikit-learnで学習してみるから続きscikit-learnで学習をやってみます!
「学習データとテストデータの割合」と「学習の繰り返し回数」を変えて
予測値がどのように変化するのか見てみます

回帰分析に使うデータです 練習時間とスコアのデータです(ダーツをイメージしました)
データは40件作成しました

学習データとテストデータの割合を変更

学習の繰り返し回数は1000回に固定します

学習データ:50% テストデータ:50%
正解と予測値の平均の差:122.03615159659951

学習データ:80% テストデータ:20%
正解と予測値の平均の差:96.92544867699897

学習データ:90% テストデータ:10%
正解と予測値の平均の差:67.66762450162437

学習の繰り返し回数を変更

学習データとテストデータの割合は「8:2」に固定します

学習の繰り返し回数:200回
正解と予測値の平均の差:96.96033203239628

学習の繰り返し回数:1000回
正解と予測値の平均の差:96.92544867699897
※画像は上の「学習データ:80% テストデータ:20%」と同じです

学習の繰り返し回数:10000回
正解と予測値の平均の差:96.92617541353572

分かったこと

学習データの割合を増やしたほうが予測値が正解に近づいた
学習の回数は増やしても予測値と正解の差はあまり変わらなかった

import numpy as np    
import pandas as pd    
from sklearn import preprocessing, linear_model    
from sklearn.model_selection import train_test_split    
import matplotlib.pyplot as plt    
%matplotlib inline    

data = pd.read_csv('./score.csv', header=0)    
pd.DataFrame(data)    

# 説明変数    
x = data[['train_hour']]  
# 目的変数    
y = data['score']    

#データの整形    
sc=preprocessing.StandardScaler()    
sc.fit(x)    
x_std = sc.transform(x)    

#学習データとテストデータに分割する    
#test_sizeがテストデータの割合  
X_train, X_test, Y_train, Y_test = train_test_split(x_std,     
                                                    y,     
                                                    test_size=0.2,     
                                                    random_state=0)    

#線形回帰モデルの生成および学習  
#max_iterの値が学習の繰り返し回数  
clf = linear_model.SGDRegressor(max_iter=1000)    
clf.fit(X_train, Y_train.values.ravel())    

print("回帰式の係数")    
print('y切片:', clf.intercept_)     
print('各項目の係数',clf.coef_)    

# グラフを表示    
plt.scatter(X_train, Y_train)    
plt.plot(X_train, clf.predict(X_train), color='red')    
plt.xlabel('train_hour')    
plt.ylabel('score')    
plt.show   

Y_pred = clf.predict(X_test)    

#与えられたデータに対する予測    
compare = pd.DataFrame(np.array([Y_test, Y_pred]).T)    
compare.columns = ['正解','予測値']    
compare  

# 正解と予測値の差の平均  
err = abs(compare.iloc[:, 0] - compare.iloc[:, 1])  

print('正解と予測値の平均の差:{}'.format(err.mean()))