どうしてそれが最適なのか?
回帰パラメータを求めるために使った関数 np.polyfit() は、最適 な傾きと切片を見つけます。これは残差平方和(RSS: residual sum of squares)として知られる、残差の二乗和を最小化するように最適化しています。この演習では、最適化される関数である RSS を、傾きパラメータ a に対してプロットします。そのために、切片は最適化で得られた値に固定します。次に、RSS を傾きに対してプロットしましょう。最小になるのはどこでしょうか?
この演習はコースの一部です
Pythonで学ぶ統計思考(パート2)
演習の手順
- RSS を計算するための傾きの値を指定します。
np.linspace()を使って、0から0.1の範囲に200個の点を取得します。たとえば、0から0.5の範囲に100個の点を得るには次のように書きます:np.linspace(0, 0.5, 100)。 - 上で作成した配列を使って、
np.empty_like()により RSS を格納する配列rssを初期化します。empty_like()は、与えられた配列(この場合はa_vals)と同じ形状と型の新しい配列を返します。 - 傾きに対する RSS の合計を計算する
forループを書きます。ヒント:RSS はnp.sum((y_data - a * x_data - b)**2)で与えられます。前の演習で計算した変数bはすでに名前空間にあります。ここでは、fertilityがy_data、illiteracyがx_dataです。 - RSS(
rss)を傾き(a_vals)に対してプロットします。 - プロットを表示するには Submit を押してください!
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Specify slopes to consider: a_vals
a_vals = ____
# Initialize sum of square of residuals: rss
rss = ____
# Compute sum of square of residuals for each value of a_vals
for i, a in enumerate(a_vals):
rss[i] = ____((____ - a*____ - b)**2)
# Plot the RSS
plt.plot(____, ____, '-')
plt.xlabel('slope (children per woman / percent illiterate)')
plt.ylabel('sum of square of residuals')
plt.show()