Pythonチュートリアル

Pythonホーム Pythonイントロ Pythonはじめに Python構文 Pythonコメント Python変数 Pythonデータ型 Python番号 Pythonキャスティング Python文字列 Pythonブール値 Python演算子 Pythonリスト Pythonタプル Pythonセット Python辞書 Python If ... Else PythonのWhileループ PythonForループ Python関数 Python Lambda Python配列 Pythonクラス/オブジェクト Pythonの継承 Pythonイテレータ Pythonスコープ Pythonモジュール Pythonの日付 Python数学 Python JSON Python RegEx Python PIP Python試してみてください... Pythonユーザー入力 Python文字列フォーマット

ファイル処理

Pythonファイル処理 Python読み取りファイル Python書き込み/ファイルの作成 Pythonファイルの削除

Pythonモジュール

NumPyチュートリアル パンダ攻略 Scipyチュートリアル

Python Matplotlib

Matplotlibイントロ Matplotlibはじめに Matplotlib Pyplot Matplotlibプロット Matplotlibマーカー Matplotlibライン Matplotlibラベル Matplotlibグリッド Matplotlibサブプロット Matplotlib散布図 Matplotlibバー Matplotlibヒストグラム Matplotlib円グラフ

機械学習

入門 平均中央値モード 標準偏差 パーセンタイル データ配信 正規データ分布 散布図 線形回帰 多項式回帰 重回帰 規模 トレーニング/テスト デシジョンツリー

Python MySQL

MySQLはじめに MySQLデータベースの作成 MySQLテーブルの作成 MySQL挿入 MySQL Select MySQL Where MySQL Order By MySQL削除 MySQLドロップテーブル MySQLアップデート MySQLの制限 MySQL参加

Python MongoDB

MongoDBはじめに MongoDBデータベースの作成 MongoDBCreateコレクション MongoDBインサート MongoDB検索 MongoDBクエリ MongoDBソート MongoDB削除 MongoDBドロップコレクション MongoDBアップデート MongoDBの制限

Pythonリファレンス

Pythonの概要 Python組み込み関数 Python文字列メソッド Pythonリストメソッド Python辞書メソッド Pythonタプルメソッド Pythonセットメソッド Pythonファイルメソッド Pythonキーワード Pythonの例外 Python用語集

モジュールリファレンス

ランダムモジュール リクエストモジュール 統計モジュール 数学モジュール cMathモジュール

Pythonハウツー

リストの重複を削除する 文字列を逆にする 2つの数字を追加する

Pythonの例

Pythonの例 Pythonコンパイラ Python演習 Pythonクイズ Python証明書

機械学習-トレーニング/テスト


モデルを評価する

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

モデルが十分に優れているかどうかを測定するために、Train / Testと呼ばれる方法を使用できます。


トレイン/テストとは

トレーニング/テストは、モデルの精度を測定する方法です。

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

トレーニング用に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軸は、購入に費やされた金額を表します。



トレイン/テストに分割

トレーニングセットは、元のデータの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()

結果:

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


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

データセットはどのように見えますか?私の意見では、最適なのは多項式回帰だと思うので、多項式回帰の線を引きましょう。

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

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

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スコアは、私のデータセットがモデルにどの程度適合しているかを示す良い指標です。


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ドルを費やすと予測しました。