Överanpassning
Överanpassning
Titta på de två regressionslinjerna nedan. Vilken är bättre?
Enligt mätvärdena är den andra bättre. Då använder vi den för att förutsäga nya värden! Vi behöver förutsägelser för X_new = [0.2,0.5,2.7]
. Men när vi fick de faktiska målvariabelvärdena för de X_new
vi just förutsade, visade det sig att den första modellen gav en mycket bättre förutsägelse.
Detta beror på att den andra modellen överanpassar träningsdatan. Överanpassning innebär att den byggda modellen är för komplex och därför kan anpassa sig perfekt till träningsdatan, men den förutsäger inte osedda exempel särskilt bra.
Underfitting
Det finns också ett annat begrepp, underfitting. Det innebär att den byggda modellen är så enkel att den inte ens passar träningsdatan väl. I sådana fall blir även förutsägelserna för osedda instanser felaktiga.
Vi kan alltså försöka avgöra om modellen underanpassar eller överanpassar visuellt.
Vi vet redan att vi inte kan visualisera multipel linjär regression med många variabler. Finns det något annat sätt att avgöra om modellen överanpassar eller underanpassar? Det visar sig att det finns.
Tränings- och testuppdelning
Vi vill veta hur modellen presterar på osedda exempel. För detta behöver vi osedda exempel med de sanna målvariabelvärdena. Och vi har endast sanna målvariabelvärden i träningsuppsättningen. Lösningen är att dela upp träningsuppsättningen i två delar, en träningsuppsättning och en testuppsättning.
Nu kan vi bygga modellen med hjälp av träningsuppsättningen, beräkna metrikvärden på träningsuppsättningen (sedda exempel) och därefter beräkna metrikvärden på testuppsättningen (osedda exempel).
Det är viktigt att dela upp träningsuppsättningen slumpmässigt. Vanligtvis används cirka 20–30 % av träningsuppsättningen som testuppsättning, medan resterande 70–80 % används som träningsuppsättning. Scikit-learn tillhandahåller en enkel funktion för att slumpmässigt dela upp uppsättningen:
Till exempel, för att dela upp träningsuppsättningen i 70% träning/30% test, kan du använda följande kod:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 5.26
Överanpassning
Svep för att visa menyn
Överanpassning
Titta på de två regressionslinjerna nedan. Vilken är bättre?
Enligt mätvärdena är den andra bättre. Då använder vi den för att förutsäga nya värden! Vi behöver förutsägelser för X_new = [0.2,0.5,2.7]
. Men när vi fick de faktiska målvariabelvärdena för de X_new
vi just förutsade, visade det sig att den första modellen gav en mycket bättre förutsägelse.
Detta beror på att den andra modellen överanpassar träningsdatan. Överanpassning innebär att den byggda modellen är för komplex och därför kan anpassa sig perfekt till träningsdatan, men den förutsäger inte osedda exempel särskilt bra.
Underfitting
Det finns också ett annat begrepp, underfitting. Det innebär att den byggda modellen är så enkel att den inte ens passar träningsdatan väl. I sådana fall blir även förutsägelserna för osedda instanser felaktiga.
Vi kan alltså försöka avgöra om modellen underanpassar eller överanpassar visuellt.
Vi vet redan att vi inte kan visualisera multipel linjär regression med många variabler. Finns det något annat sätt att avgöra om modellen överanpassar eller underanpassar? Det visar sig att det finns.
Tränings- och testuppdelning
Vi vill veta hur modellen presterar på osedda exempel. För detta behöver vi osedda exempel med de sanna målvariabelvärdena. Och vi har endast sanna målvariabelvärden i träningsuppsättningen. Lösningen är att dela upp träningsuppsättningen i två delar, en träningsuppsättning och en testuppsättning.
Nu kan vi bygga modellen med hjälp av träningsuppsättningen, beräkna metrikvärden på träningsuppsättningen (sedda exempel) och därefter beräkna metrikvärden på testuppsättningen (osedda exempel).
Det är viktigt att dela upp träningsuppsättningen slumpmässigt. Vanligtvis används cirka 20–30 % av träningsuppsättningen som testuppsättning, medan resterande 70–80 % används som träningsuppsättning. Scikit-learn tillhandahåller en enkel funktion för att slumpmässigt dela upp uppsättningen:
Till exempel, för att dela upp träningsuppsättningen i 70% träning/30% test, kan du använda följande kod:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Tack för dina kommentarer!