Hoe is het optimaal?
De functie np.polyfit() die je gebruikte om je regressieparameters te krijgen, vindt de optimale helling en intercept. Hij optimaliseert de som van de kwadraten van de residuen, ook wel RSS genoemd (van residual sum of squares). In deze oefening plot je de functie die geoptimaliseerd wordt, de RSS, tegen de hellingsparameter a. Om dit te doen, fixeer je het intercept op de waarde die je in de optimalisatie vond. Plot daarna de RSS tegen de helling. Waar is deze minimaal?
Deze oefening maakt deel uit van de cursus
Statistical Thinking in Python (deel 2)
Oefeninstructies
- Specificeer de waarden van de helling waarvoor je de RSS wilt berekenen. Gebruik
np.linspace()om200punten te krijgen in het bereik tussen0en0.1. Bijvoorbeeld, om100punten te krijgen in het bereik tussen0en0.5, kun jenp.linspace()zo gebruiken:np.linspace(0, 0.5, 100). - Initialiseer een array,
rss, om de RSS te bevatten metnp.empty_like()en de array die je hierboven hebt gemaakt. De functieempty_like()retourneert een nieuwe array met dezelfde vorm en hetzelfde type als een gegeven array (in dit gevala_vals). - Schrijf een
for-lus om de som van de RSS voor de helling te berekenen. Hint: de RSS wordt gegeven doornp.sum((y_data - a * x_data - b)**2). De variabelebdie je in de vorige oefening hebt berekend staat al in je namespace. Hier isfertilitydey_dataenilliteracydex_data. - Plot de RSS (
rss) tegen de helling (a_vals). - Klik op Antwoord verzenden om de grafiek te zien!
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()