Hoppa till huvudinnehåll

Polynomregression: Från räta linjer till kurvor

Utforska hur polynomregression hjälper till att modellera icke-linjära samband och förbättra prediktionsnoggrannheten i verkliga datasätt.
Uppdaterad 4 maj 2026  · 12 min läsa

När dina data böjer av är det inte rimligt att använda en rak linje för att uppskatta nya datapunkter. Gör du det får du en modell som missar mönstret, har stora residualer och dåliga prediktioner. Data från verkligheten beter sig sällan linjärt, oavsett om du modellerar hur läkemedelsdos påverkar respons, hur temperatur påverkar materialspänning eller hur tillgångspriser rör sig över tid.

Polynomregression löser detta genom att utvidga linjär regression så att den passar kurvor i stället för räta linjer. Lägg bara till några termer av högre gradtal - , - så kan modellen följa den faktiska formen på dina data.

I den här artikeln går jag igenom vad polynomregression är, matematiken bakom, hur du implementerar den i Python, och hur du undviker den fälla som de flesta hamnar i: överanpassning.

Om du är ny på maskininlärning, läs först vår guide till grunderna i linjär regression i Python.

Vad är polynomregression?

Polynomregression är algoritmen du väljer när en rät linje inte kan beskriva dina data.

Linjär regression modellerar sambandet mellan variabler som en rät linje. Det fungerar när sambandet faktiskt är linjärt – men de flesta verkliga data är inte det. Tänk på hur en bils bromssträcka förändras med hastighet, eller hur en växts tillväxttakt reagerar på gödsel. Dessa samband är krökta. En rät linje passar dem inte bra, vad du än gör.

Polynomregression utvidgar linjär regression genom att lägga till termer av högre gradtal i ekvationen. I stället för att anpassa y = b0 + b1x, anpassar du något i stil med y = b0 + b1x + b2x² + b3x³. Gradtalet på polynomet – det där n i ”n:te graden” – styr hur många svängar kurvan kan göra.

Kort och gott, här är den avgörande skillnaden mellan de två:

  • Linjär regression: Anpassar en rät linje. En koefficient per variabel, en frihetsgrad i kurvan.

  • Polynomregression: Anpassar en kurva. Varje ytterligare term (, , ...) ger modellen mer flexibilitet att följa datans form.

Linjär kontra polynomregression

Linjär kontra polynomregression

Under ytan är polynomregression fortfarande en linjär modell. ”Linjär” syftar här på hur modellen hanterar sina koefficienter, inte kurvans form. Du lägger till nya funktioner (, ) och anpassar en linjär ekvation ovanpå dem.

Så när ska du faktiskt använda den?

Välj polynomregression när residualdiagrammet från en linjär modell visar ett mönster – det är ett tecken på att sambandet inte är linjärt. Den passar också bra när din domänkunskap antyder ett krökt samband, till exempel inom fysik, biologi eller ekonomi.

Nackdelen är att polynom av högre grad kan bli instabila. Ett polynom av grad 2 eller 3 räcker för de flesta verkliga kurvor, men går du högre riskerar du att anpassa brus i stället för signal.

Varför använda polynomregression?

De flesta verkliga samband mellan variabler är inte linjära.

En rät linje kan komma nära, men ”nära” räcker inte när du förutsäger något känsligt. Om sambandet i data böjer av kommer en linjär modell konsekvent att missa den böjen.

Polynomregression gör ett bättre jobb genom att låta modellen böja sig. I stället för att tvinga en rät linje genom dina data anpassar du en kurva som kan följa sambandet.

Här är några områden inom olika branscher där det gör verklig skillnad:

  • Biologi och medicin: Dos–respons-samband är sällan linjära. En låg dos kan ha liten effekt, en medelhög fungerar bra, och en hög dos ger biverkningar. Den S-formade kurvan kräver en polynommodell för att fångas
  • Teknik: Spänning–töjning i material, aerodynamiskt motstånd och termisk expansion följer alla icke-linjära mönster som polynomregression modellerar väl
  • Finans: Tillgångsavkastning, optionspriser och efterfrågekurvor visar ofta avtagande eller tilltagande effekter som en rät linje inte kan representera
  • Maskininlärningspipelines: Polynomfunktioner är ett snabbt sätt att lägga till icke-linearitet i en linjär modell utan att byta till en mer komplex algoritm

Den röda tråden i alla dessa fall är densamma: sambandet mellan indata och utdata förändras vid olika värden på x. Linjär regression antar att förändringen är konstant. Polynomregression gör det inte.

Med det sagt är polynomregression ingen mirakelkur.

Den fungerar bäst när du har domänkunskap som antyder ett krökt samband, eller när residualdiagrammet tydligt visar ett mönster som en rät linje inte kan åtgärda. Använd den med ett specifikt problem i åtanke – inte bara för att ditt linjära models inte är tillräckligt högt.

Förstå matematiken bakom polynomregression

Att kunna grunderna i matematiken bakom polynomregression hjälper dig att förstå den bättre.

Polynomtermer

I linjär regression ser modellen ut så här:

Formel för linjär regression

Formel för linjär regression

Det är en indata, en koefficient, en rät linje. Polynomregression utvidgar detta genom att lägga till termer av högre gradtal:

Formel för polynomregression

Formel för polynomregression

Varje ny term – , och så vidare – ger modellen ytterligare en ”sväng” att arbeta med. Ett polynom av grad 2 kan passa en enkel kurva. Ett polynom av grad 3 kan passa en kurva som byter riktning en gång. Gradtalet n styr hur flexibel modellen är.

Den underliggande algoritmen förblir densamma. Du lägger bara till nya funktioner. behandlas som sin egen indata, precis som x. Modellen anpassar fortfarande en linjär ekvation – bara ovanpå transformerade funktioner.

Minsta kvadratmetoden

Att anpassa en polynomregressionsmodell fungerar på samma sätt som linjär regression – det vill säga med minsta kvadratmetoden.

Idén är att hitta koefficienterna som minimerar summan av kvadrerade residualer:

Formel för SSR

Formel för SSR

Varje kvadrerad skillnad är en residual – gapet mellan vad modellen förutsäger och vad som observerades. Att kvadrera dem säkerställer att negativa och positiva fel inte tar ut varandra, och straffar stora fel mer än små.

I praktiken sköter ditt bibliotek detta åt dig. Men att veta att minsta kvadrat är målfunktionen hjälper dig att förstå varför avvikare skadar polynommodeller så mycket – en enskilt stor residual kvadreras och drar koefficienterna i sin riktning.

Tolka koefficienter

I linjär regression har b1 en enkel tolkning: för varje enhets ökning i x förändras y med b1.

Polynomregression är lite mer invecklad. När din modell inkluderar b_1x + b_2x^2 beror effekten av xy på det aktuella värdet av x – du kan inte läsa b2 isolerat och dra en slutsats. Kurvans lutning ändras hela tiden, vilket du ser genom att ta derivatan med avseende på x:

Derivata med avseende på x

Derivata med avseende på x

Själva lutningen är en funktion av x. Det betyder att effekten av en enhets förändring i x är olika i varje punkt på kurvan.

Det är därför du inte bör försöka tolka individuella koefficienter i en polynommodell. Titta i stället på kurvan som helhet. Plotta dina prediktioner mot dina data.

Tillämpningar av polynomregression inom data science

Polynomregression dyker upp i många fält eftersom krökta samband finns överallt i verkliga data.

Finans

Finansiella data rör sig sällan i räta linjer.

Tillgångspriser, intäktstillväxt och efterfrågekurvor tenderar alla att accelerera, bromsa in eller vända riktning beroende på marknadsläge. En linjär modell antar en konstant förändringstakt, vilket nästan aldrig stämmer. Polynomregression låter dig modellera dessa skiften – till exempel hur konsumenternas efterfrågan sjunker långsamt först, sedan kraftigt när priserna passerar en viss nivå.

Den är också användbar för trendanalys över tid. När du anpassar en kurva till historiska prisdata eller modellerar hur ett nyckeltal växer under olika faser av en konjunkturcykel, uppskattar ofta ett polynom av grad 2 eller 3 formen mycket bättre än en rät linje.

Teknik

Fysiska processer är några av de bästa exemplen på icke-linjära samband.

Spänning och töjning i material, strömningsdynamik, termisk expansion och aerodynamiskt motstånd följer alla kurvor, inte linjer. Många styrande ekvationer i fysik är i sin natur polynoma. Polynomregression ger dig ett datadrivet sätt att anpassa dessa kurvor när du har mätningar men ingen ren, sluten formel.

Ett bra exempel är luftmotstånd, som ökar med kvadraten på hastigheten. En linjär modell underskattar motståndet vid höga hastigheter, medan ett polynom av grad 2 passar sambandet korrekt.

Maskininlärning

Inom maskininlärning används polynomregression ofta som en teknik för feature engineering snarare än som en fristående modell.

Genom att lägga till polynomtermer – , , interaktionstermer – i din funktionsuppsättning ger du en linjär modell möjlighet att passa icke-linjära mönster utan att byta till en mer komplex algoritm. Detta är ett vanligt första steg när din linjära modell underanpassar och du vill öka flexibiliteten innan du tar till något som beslutsträd eller neurala nätverk.

Den är också användbar som baslinjemodell.

Innan du tränar en mer komplex modell berättar en polynomregression hur stor del av variationen en enkel kurva kan förklara. Om ett polynom av grad 3 redan tar dig nästan hela vägen kanske du inte behöver något mer komplext.

Hur du väljer rätt gradtal för polynomregression

Att välja polynomets gradtal är ett av de viktigaste besluten du tar. Blir det fel åt något håll får du en mindre träffsäker modell.

Som tur är räcker några rader Pythonkod för att göra jobbet.

Överanpassning vs. underanpassning

Underanpassning inträffar när gradtalet är för lågt. Ett polynom av grad 1 på krökta data missar mönstret – hög bias, dåliga prediktioner och en modell som presterar dåligt på både tränings- och nya data.

Överanpassning är det motsatta problemet, och det är farligare eftersom det ser bra ut till en början. Ett polynom med högt gradtal kan gå genom varje datapunkt i din träningsmängd med nästan noll fel. Men modellen memorerar bara bruset. Den faller isär på nya data.

Du kan se detta genom att jämföra träningsfel mot testfel över olika gradtal:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

np.random.seed(42)

# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

for deg in [1, 2, 12]:
    poly = PolynomialFeatures(deg)
    model = LinearRegression()
    model.fit(poly.fit_transform(x_train), y_train)

    train_err = mean_squared_error(y_train, model.predict(poly.transform(x_train)))
    test_err  = mean_squared_error(y_test,  model.predict(poly.transform(x_test)))

    print(f"Degree {deg:>2} | Train MSE: {train_err:.4f} | Test MSE: {test_err:.4f}")

MSE för olika gradtal

MSE för olika gradtal

Eller, visuellt presenterat:

Data anpassad med olika polynomgrader

Data anpassad med olika polynomgrader

Grad 1 visar högt fel på båda uppsättningarna – det är underanpassning. Grad 2 är välbalanserad. Grad 12 har lägre träningsfel men mycket högre testfel – det är överanpassning.

Korsvalidering

Det rätta sättet att hitta bästa gradtal är korsvalidering – specifikt k-faldig korsvalidering.

Idén är att dela dina data i k delmängder, sedan träna på k-1 av dem och testa på den du höll ute, och upprepa tills varje delmängd har varit testmängd en gång. Slutligen genomsnittar du felet över alla vikningar, gör detta för varje kandidatgrad och väljer den med lägst genomsnittligt testfel.

Implementationen är mycket enklare än förklaringen:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt

np.random.seed(42)

# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)

# Test degrees 1 through 10
degrees = range(1, 11)
mean_errors = []

for deg in degrees:
    model = make_pipeline(PolynomialFeatures(deg), LinearRegression())
    scores = cross_val_score(model, x, y, cv=5, scoring="neg_mean_squared_error")
    mean_errors.append(-scores.mean())
    print(f"Degree {deg:>2} | Mean error: {-scores.mean():.4f}")

best_degree = np.argmin(mean_errors) + 1

Jämförelse av gradfel

Jämförelse av gradfel

Eller, visuellt representerat:

Jämförelse av korsvalideringsfel

Jämförelse av korsvalideringsfel

CV-felet sjunker när du lägger till användbara polynomtermer och stiger sedan igen när modellen börjar överanpassa.

När två gradtal ger liknande CV-fel, välj det lägre. En enklare modell som presterar lika bra är alltid det bättre valet.

Viktiga överväganden och begränsningar

Det finns ett par sätt som polynomregression kan leda dig till fel slutsatser. Låt oss gå igenom dem nu.

Känslighet för avvikare

Avvikare påverkar polynomregression mer än linjär regression.

Minsta kvadrat kvadrerar varje residual innan de summeras. En enda datapunkt långt från trenden bidrar med oproportionerligt stort fel, och modellen böjer kurvan för att minska det felet – även om det innebär att anpassningen förvrängs överallt annars.

Effekten blir värre ju högre gradtal. Ett höggradigt polynom har tillräcklig flexibilitet för att ”jaga” en avvikare, vilket drar bort kurvan från majoriteten av dina data för att passa en dålig punkt.

Ett sätt att komma runt detta är att städa dina data innan anpassning. Plotta dina data, identifiera avvikare och avgör om de representerar verklig signal eller brus. Om de är brus – mätfel, inmatningsmisstag, korrupta poster – ta bort dem. Om de är äkta, överväg en mer avvikarresistent anpassningsmetod som RANSAC eller Huber-regression.

Överanpassning

Varje gång du lägger till en polynomterm ger du modellen mer flexibilitet. Förr eller senare slutar den flexibiliteten att hjälpa, och modellen börjar passa det slumpmässiga bruset i dina träningsdata i stället för det verkliga mönstret. Resultatet är en kurva som fungerar bra på träningsdata men faller isär på nya data.

Det luriga är att överanpassning är osynlig om du bara tittar på träningsfelet. Ett polynom av grad 10 har nästan alltid lägre tränings-MSE än ett polynom av grad 2. Det betyder inte att det är en bättre modell.

Så här bör du tänka:

  • Börja lågt: Prova grad 2 eller 3 innan du går högre. De flesta verkliga kurvor behöver inte mer än så
  • Utvärdera alltid på hållna data: Träningsfel i sig säger inget om generalisering.
  • Korsvalidering: Använd det för att hitta graden där testfelet slutar förbättras.
  • Titta på kurvan: Om ditt polynom gör något vilt utanför intervallet för dina träningsdata är det ett tecken på överanpassning.

Polynomregression fungerar bäst när du har goda skäl att förvänta dig ett krökt samband och kan hålla gradtalet tillräckligt lågt.

Alternativ till polynomregression

Polynomregression är inte alltid rätt verktyg – några av dessa alternativ kan passa dig bättre, ordvits ej avsedd.

Splines

Splines löser problemet med global instabilitet.

När du anpassar ett polynom av grad 10 påverkas varje koefficient av varje datapunkt. En förändring i en del av dina data påverkar kurvan överallt annars. Splines undviker detta genom att dela upp dina data i segment och anpassa ett separat lågradigt polynom till varje segment. Segmenten sammanfogas vid punkter som kallas knutar, med villkor som håller den övergripande kurvan jämn i skarvarna.

Resultatet är en kurva som är flexibel där det behövs och stabil överallt annars.

I Python har både scipy och scikit-learn robusta implementationer av splines:

from scipy.interpolate import UnivariateSpline

spline = UnivariateSpline(x, y, k=3)
y_pred = spline(x_new)

Spline jämfört med ett höggradigt polynom

Spline jämfört med ett höggradigt polynom

För att upprepa: välj splines när dina data beter sig olika i olika områden, eller när en enda polynomkurva inte kan fånga formen utan att du måste gå till ett högt gradtal.

Support Vector Regression

Support Vector Regression (SVR) tar ett annat angreppssätt.

Den anpassar inte en kurva som minimerar kvadratfelet över alla punkter, utan försöker i stället hitta en funktion som håller sig inom en definierad felmarginal för så många punkter som möjligt, samtidigt som den ignorerar punkter som faller inom den marginalen. Det gör den mindre känslig för avvikare än polynomregression.

Kopplingen till polynomregression kommer via kernel-tricket. SVR med en polynomkärna kan passa icke-linjära samband liknande polynomregression – men med bättre generalisering och mer kontroll över anpassningen via regulariseringsparametrar.

from sklearn.svm import SVR

model = SVR(kernel="poly", degree=3, C=1.0, epsilon=0.1)
model.fit(x_train, y_train)

SVR jämfört med ett höggradigt polynom

SVR jämfört med ett höggradigt polynom

SVR är ett bra val när dina data har avvikare du inte kan ta bort, när du behöver mer kontroll över avvägningen mellan bias och varians, eller när polynomregression fortsätter att överanpassa trots korsvalidering.

Slutsats

I den här artikeln har jag visat hur polynomregression utvidgar linjär regression för att passa kurvor, hur minsta kvadratmetoden hittar de bästa koefficienterna och varför tolkning av enskilda koefficienter inte säger så mycket.

Gradtalet du väljer betyder mer än något annat. För lågt leder till underanpassning och för högt till överanpassning. Korsvalidering ger dig ett objektivt sätt att hitta den gyllene mitten. Och om polynomregression inte är rätt val är splines och SVR stabila alternativ värda att känna till.

Det bästa sättet att bygga intuition för allt detta är att använda det på dina egna data. Välj en datamängd där du misstänker ett icke-linjärt samband, anpassa en linjär modell först, plotta residualerna och se vad polynomregression gör annorlunda. Läs vår guide till icke-linjära modeller och insikter med R för att se denna pipeline i praktiken.

Vanliga frågor om polynomregression

Vad är polynomregression och när ska jag använda den?

Polynomregression är en utvidgning av linjär regression som anpassar en krökt linje till dina data i stället för en rak. Du använder den när sambandet mellan indata och utdata inte är linjärt – till exempel när ett residualdiagram från en linjär modell visar ett mönster. Det är ett bra första steg innan du tar till mer komplexa modeller som beslutsträd eller neurala nätverk.

Hur skiljer sig polynomregression från linjär regression?

Linjär regression anpassar en rät linje genom att modellera sambandet som y = b0 + b1x. Polynomregression lägger till termer av högre gradtal som och , vilket ger modellen tillräcklig flexibilitet för att följa kurvor i data. Båda använder samma minsta kvadratmetod – polynomregression behandlar bara dessa extra termer som ytterligare indatafunktioner.

Vilka är de största riskerna med att använda polynomregression?

De två största riskerna är överanpassning och känslighet för avvikare. Ett polynom med högt gradtal kan memorera bruset i dina träningsdata och prestera dåligt på nya data. Avvikare är farliga eftersom minsta kvadrat kvadrerar varje residual, vilket innebär att en enda dålig datapunkt kan dra bort kurvan från resten av dina data.

Hur väljer jag rätt gradtal för min polynomregressionsmodell?

Börja med grad 2 eller 3 – de flesta verkliga, krökta samband kräver inte mer än så. Använd därefter k-faldig korsvalidering för att jämföra genomsnittligt testfel över kandidatgrader och välj den där testfelet slutar förbättras. När två grader ger liknande resultat, välj alltid den lägre.

När ska jag använda splines eller SVR i stället för polynomregression?

Välj splines när dina data beter sig olika i olika områden, eller när ett enskilt polynom fortsätter att ge instabila kurvor i kanterna av ditt dataintervall. Och välj SVR med polynomkärna när avvikare är oundvikliga och du behöver en modell som inte böjer sig ur form för att ta hänsyn till dem. Båda alternativen ger dig mer kontroll över anpassningen till priset av viss tolkbarhet.

Ämnen

Lär dig med DataCamp

course

Bayesian Regression Modeling with rstanarm

4 timmar
7K
Learn how to leverage Bayesian estimation methods to make better inferences about linear regression models.
Se detaljerRight Arrow
Starta kursen
Se merRight Arrow