0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

機械学習 過学習について

Last updated at Posted at 2020-05-06

○この記事の要点
過学習を再現したのでメモ
過学習:学習データには対応できるが、未知のデータには対応できない。応用力がない感じ。

#○ソースコード(Python):モデルの過学習と過学習の確認

モデルの過学習と過学習の確認方法
from sklearn.datasets import load_boston
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
%matplotlib inline

# データ準備。ボストンの住宅価格
data = load_boston()
X = data.data[:, [5,]] # 説明変数として、部屋数だけを抽出
y = data.target

# 学習用データとテスト用データに分離
train_X, test_X = X[:400], X[400:]
train_y, test_y = y[:400], y[400:]

# ハイパーパラメータを変更したSVR(サポートベクトルマシン(カーネル法))での学習
model_s = SVR(C=1.0, kernel='rbf') # 正則化パラメータが1でrbfカーネルを使用
model_s.fit(train_X, train_y)
# 学習データを利用した予測
s_pred = model_s.predict(train_X)
# テストデータを利用した予測(未知のデータに対する予測)
s_pred_t = model_s.predict(test_X)

# グラフ表示
fig, ax = plt.subplots()
ax.scatter(train_X, train_y, color='red', marker='s', label='data')
ax.plot(train_X, s_pred, color='blue', label='svr_rbf curve(train)')
ax.plot(test_X, s_pred_t, color='orange', label='svr_rbf curve(test)')
ax.legend()
plt.show()

print("○訓練データの平均二乗誤差と決定係数")
print(mean_squared_error(train_y, s_pred))
print(r2_score(train_y, s_pred))
print("○テストデータの平均二乗誤差と決定係数")
print(mean_squared_error(test_y, s_pred_t))
print(r2_score(test_y, s_pred_t))

結果
ダウンロード.png
○訓練データの平均二乗誤差と決定係数
30.330756428515905
0.6380880725968641
○テストデータの平均二乗誤差と決定係数
69.32813164021485
-1.4534559402985217

学習データの線(青)は割といい感じに線引きしているが、テストデータの線(オレンジ)は微妙。
平均二乗誤差と決定係数の値を見ても明らか。
これが過学習。

過学習を防ぐ方法には以下のようにいろいろあるが、それらの説明はまた今度。
・学習(訓練)データの数を増やす
・交差検証を行う
・ハイパーパラメーターを調整する(モデルを簡単なものにする)
・特徴量を削減する
・正則化を実施する

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?