TECH I.S.

機械学習 - Train/Test(トレーニング/テスト)


モデルを評価する

機械学習では、特定のイベントの結果を予測するモデルを作成します。例えば前の章で、重量とエンジンのサイズが分かっているときに車のCO2排出量を予測しました。

モデルが十分に優れているかどうかを測定するには、Train/Testというメソッドを使用できます。


Train/Testとは

Train/Testは、モデルの精度を測定する方法です。

データセットをトレーニングセットとテストセットの2つのセットに分割するため、Train/Testと呼ばれます。


トレーニングに80%、テストに20%。


トレーニングセットを使用してモデルを*トレーニング*します。

テストセットを使用してモデルを*テスト*します。


モデルを*トレーニング*するということは、モデルを*作成する*ことを意味します。

モデルを*テスト*するということは、モデルの精度をテストすることを意味します。


データセットから始める

テストするデータセットから始めます。

今回使用するデータセットは、店舗にいる100人の顧客とその買い物習慣を示しています。

import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x plt.scatter(x, y) plt.show()

結果:

x軸は、購入するまでの分数を表します。

y軸は、購入に費やされた金額を表します。

実行例(開発準備中)»


Train/Testに分割

*トレーニング*セットは、元のデータの80%をランダムに選択する必要があります。

*テスト*セットは残りの20%である必要があります。

train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]




トレーニングセットを表示する

トレーニングセットを使用して同じ散布図を表示します。

plt.scatter(train_x, train_y) plt.show()

結果:

元のデータセットと似ているので、妥当な選択であると思われます。

実行例(開発準備中)»


テストセットの表示

テストセットが完全に異なるものではないことを確認するために、テストセットも見ていきます。

plt.scatter(test_x, test_y) plt.show()

結果:

テストセットも元のデータセットのように見えます。

実行例(開発準備中)»


データセットを適合させる

データセットはどのようなものですか?今回最も適合するのは多項式回帰なので、多項式回帰の線を引いてみましょう。

データポイントを通る線を描くには、matplotlibモジュールのplot()メソッドを使用します。

データポイントを通る多項式回帰直線を描画します。

import numpy import matplotlib.pyplot as plt numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) myline = numpy.linspace(0, 6, 100) plt.scatter(train_x, train_y) plt.plot(myline, mymodel(myline)) plt.show()

結果:

実行例(開発準備中)»

データセットの外側の値を予測しようとすると、奇妙な結果が得られる可能性がありますが、この結果は、データセットが多項式回帰に適合するという提案を裏付けるものです。例:この線は、顧客が店内で6分間過ごすと200ドル相当の購入を行うことを示しています。これはおそらく過剰適合の兆候です。

しかし、R-squaredスコアはどうでしょうか? R-squaredスコアは、データセットがモデルにどの程度適合しているかを示す良い指標です。


R2

R-squaredとも呼ばれるR2を覚えていますか?

x軸とy軸の関係を測定し、値の範囲は0から1です。0は関係がないことを意味し、1は完全に関係があることを意味します。

sklearnモジュールには、この関係を見つけるのに役立つr2_score()というメソッドがあります。

この場合、顧客が店に滞在する時間と消費金額との関係を測定したいと考えています。

トレーニングデータは多項式回帰にどの程度適合しますか?

import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(train_y, mymodel(train_x)) print(r2)

自分で試してみる(開発準備中)»

注意:結果0.799は、OK関係があることを示しています。

テストセットの持ち込み

これで、少なくともトレーニングデータに関しては問題のないモデルを作成できました。

次に、テストデータを使用してモデルをテストし、同じ結果が得られるかどうかを確認します。

テストデータを使用して R2スコアを見つけてみましょう。

import numpy from sklearn.metrics import r2_score numpy.random.seed(2) x = numpy.random.normal(3, 1, 100) y = numpy.random.normal(150, 40, 100) / x train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:] mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4)) r2 = r2_score(test_y, mymodel(test_x)) print(r2)

自分で試してみる(開発準備中)»

注意: 結果0.809は、モデルがテストセットにも適合していることを示しており、このモデルを使用して将来の値を予測できると確信しています。


値を予測する

モデルが正常であることを確認したので、新しい値の予測を開始できます。

買い物客が店に5分間とどまるとしたら、どれくらいのお金を使うでしょうか?

print(mymodel(5))

実行例(開発準備中)»

この例では、次の図に対応しているように、顧客が22.88ドルを使うと予測しました。
***


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細