為什麼這是最佳?
你用來取得迴歸參數的 np.polyfit() 會找到「最佳」的斜率與截距。它是透過最小化殘差平方和(RSS,residual sum of squares)來達成的。在本練習中,你將繪製被最佳化的這個函式——RSS 對斜率參數 a 的關係圖。做法是先把截距固定為你在最佳化中得到的數值,然後繪出 RSS 與斜率的關係。它在哪裡達到最小?
本練習屬於課程
Statistical Thinking in Python(第 2 部分)
練習說明
- 指定要計算 RSS 的斜率取值。使用
np.linspace()在0到0.1的範圍內取得200個點。例如,若要在0到0.5的範圍內取得100個點,可以這樣使用np.linspace():np.linspace(0, 0.5, 100)。 - 使用
np.empty_like()與你上面建立的陣列來初始化一個名為rss的陣列,用來存放 RSS。empty_like()會回傳一個與給定陣列(此處為a_vals)形狀與型別相同的新陣列。 - 撰寫一個
for迴圈來計算各個斜率下的 RSS 總和。提示:RSS 為np.sum((y_data - a * x_data - b)**2)。你在上一個練習中計算的變數b已在命名空間中。此處將fertility視為y_data,illiteracy視為x_data。 - 繪製 RSS(
rss)相對於斜率(a_vals)的圖。 - 按下 Submit Answer 來查看圖表!
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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()