左側に記事ディレクトリがあることに注意してくださいヽ(*^ー^)人(^ー^*)ノ
1 モデルのトレーニングプロセス
1.1 教室事例紹介
最初に写真を見てみましょう:
x=1 の場合は y=2 に対応し、x=2 の場合は y=4 に対応し、x=3 の場合は y=6 に対応します。x=4 のとき、対応する y は何ですか?
人間の脳の場合、すぐに結論を導き出すことができます。つまり、x=4 の場合、y=8 です。しかし、これはコンピュータにとって難しいことであり、人間の脳のように、コンピュータが対応する結論を導き出すには、どのようなプロセスを経なければならないのでしょうか? 関連するフローチャートは次のとおりです。
簡単に言えば、アルゴリズムを使用してデータセットをトレーニングし、モデルをトレーニングした後、将来の入力のためにモデルを通じて結果を直接予測できます。
図 1 のオレンジ色の部分がトレーニング セット (Training Set)、水色の部分がテスト セット (Test Set)に相当します. このプロセス全体を教師あり学習 (Supervised Learning)と呼びます. 教師あり学習は機械学習における学習方法. 正解のあるサンプルデータをトレーニングすることにより、目に見えないデータの結果を予測することを学習します. モデルが計算した値と正しい値との差に基づいてモデルを継続的に調整および最適化し、最終的に結果をより正確に予測できるモデルを取得します。
図 1 の場合、つまり、オレンジ色の部分を使用して対応するモデルをトレーニングし、テスト セット、つまり x=4 を入力して、x=4 の場合の対応する y 値をモデルに予測させます。
1.2 データセット、トレーニングセット、検証セット、テストセットの関係
データ セット (データ セット) には、トレーニング セット、検証セット、およびテスト セットが含まれます。
検証セット: モデルの一般化能力をテストするために、通常、トレーニング セットを 2 つの部分に分割します。1 つはトレーニング用、つまりトレーニング セットで、もう 1 つはモデルを評価するため、つまり検証セットです。
テスト セット: テスト セットは、モデルの一般化能力、つまり、目に見えないデータに対するモデルの予測能力を評価するために使用されます。
通常、トレーニング セットを使用してモデルをトレーニングし、テスト セットを使用してモデルの汎化能力をテストします。ただし、単純にトレーニング セットを使用してモデルをトレーニングすると、オーバーフィッティングが発生する傾向があります. オーバーフィッティングとは、機械学習モデルがトレーニング データに適応しすぎて、新しいデータにうまく一般化できない状況を指します. 簡単に言えば、画像ノイズなどの不要な機能を学習することです。
このとき, オーバーフィッティングの現象を軽減するために, 検証セットを使用する必要があります. モデルの汎化能力を評価することにより, 検証セットは開発者がモデルのハイパーパラメータ (ハイパーパラメータ) をより適切に調整し、可能な限りオーバーフィッティングのリスク。
テスト セットを直接使用して汎化能力を評価するのではなく、検証セットを使用してそれを評価するのはなぜですか? テスト セット データを使用してモデルの汎化能力を評価すると、オーバーフィッティングが発生しやすくなります。つまり、モデルがテスト セット データと一致しすぎます。
詳細については、次の記事を参照してください: http://t.csdn.cn/EAm93
2 モデル設定
2.1 線形モデル (線形モデル)
クラスで与えられた線形モデルは次のとおりです。
そのうち、 は予測値を表し、重みを表し、オフセットを表します. オフセットは、モデルがデータによりよく適合することを可能にし、モデルのパフォーマンスに重要な影響を与えます.
現在、私たちが解決しなければならない問題は、訓練されたモデルがより優れた汎化能力を持つようにとの値を決定することです。
最初にモデルを単純化してみましょう
此时我们根据原有的数据来画出对应示意图:
现在,我们需要不断调整值,使得的值和图中的‘True Line’一致。
2.2 损失函数(Loss Function)
那么如何确定呢?在机器学习中,通常会以一个随机数作为值,然后通过一个评估模型,来计算不同情况下与真实值对应的误差值,最终确定最拟合情况下的(比如图7中要确定哪条直线与True Line最拟合)。这种评估模型就叫做损失函数(Loss Function),课上用的损失函数模型如下:
我们根据损失函数,计算出不同值下的情况,我们的目的是,找到一个值,使得损失的均值(mean)降到最低。:
可以发现,上述评估过程中=2时,Loss均值是最小的,所以我们确定=2是最优值。
2.3 平均平方误差(Mean Square Error)
损失函数仅是对应一个样本的,而对于整个训练集来估算偏差,这时引入了一个新的模型:平均平方误差/均方误差(Mean Square Error), 即MSE。MSE越小,则说明模型的预测更接近实际值,模型更准确。MSE公式的意思是,对所有样本的预测值和真实值的差值的平方进行求和,然后除以样本总数。
于是能得到下表:
2.4 穷举法以及代码实现
上述评估过程所用到的方法,叫做穷举法(Exhaustive search),即采样一定范围内的值,计算每个可能的取值对应的Loss值,然后画出对应图像,根据图像性质来确定最优值。比如根据下图可知最低点就是的最优值
代码实现
import numpy as np
import matplotlib.pyplot as plt
'''训练集'''
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
'''线性函数'''
def forward(x):
return x * w
'''损失函数'''
def loss(x, y):
y_pred = forward(x) # 计算出y_hat
return (y_pred - y) * (y_pred - y)
w_list = [] # 用来保存权重
mse_list = [] # 用来保存对应权重的损失值
for w in np.arange(0.0, 4.1, 0.1): # 从0.0到4.1,间隔0.1生成权重序列
print('w=', w)
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
# 代码中使用zip(x_data, y_data)将x_data和y_data中的元素打包为一个tuple,方便同时遍历。
y_pred_val = forward(x_val) # 计算预测值(这边主要是用来打印用)
loss_val = loss(x_val, y_val) # 计算损失值
l_sum += loss_val # 求和
print('\t', '%.2f' % x_val, '%.2f' % y_val, '%.2f' % y_pred_val, '%.2f' % loss_val)
print('MSE=', l_sum / 3) # 总和除以样本总数,转变成MSE
w_list.append(w)
mse_list.append(l_sum / 3)
'''绘图'''
plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()