始める無料で始める

どうしてそれが最適なのか?

回帰パラメータを求めるために使った関数 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 はすでに名前空間にあります。ここでは、fertilityy_datailliteracyx_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()
コードを編集して実行