Het Kiezen van de Kenmerken
Veeg om het menu te tonen
Bij het werken met veel features weet je vaak niet welke belangrijk zijn. Je kunt een model trainen met allemaal, controleren welke features niet behulpzaam zijn en vervolgens opnieuw trainen met alleen de invloedrijke features.
Waarom features uit het model verwijderen?
Het toevoegen van een feature die niet gerelateerd is aan de target introduceert ruis en verslechtert de voorspellingen. Veel nutteloze features stapelen ruis op en verminderen de modelkwaliteit verder.
Hoe weet je of de features goed of slecht zijn?
OLS biedt statistische tests tijdens de training. Elke feature krijgt een t-testresultaat, weergegeven in de summary()-tabel, dat aangeeft of deze een significante invloed heeft op de target.
123456789import pandas as pd import statsmodels.api as sm file_link='https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/heights_two_feature.csv' df = pd.read_csv(file_link) # Open the file X,y = df[['Father', 'Mother']], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Create X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train an OLS object print(regression_model.summary()) #Get the summary
Waar we in geïnteresseerd zijn, is de p-waarde voor elke feature.
Kortom, hoe lager de p-waarde, hoe groter het vertrouwen dat het kenmerk invloedrijk is
In de statistiek stellen we een significantieniveau in, meestal 0,05. Als de p-waarde van een feature deze drempel overschrijdt, wordt deze als niet invloedrijk beschouwd.
In de praktijk kunnen iets hogere p-waarden (net boven 0,05) het model nog steeds ondersteunen. Het is veiliger om het model te testen met en zonder zo'n feature. Maar als de p-waarde erg hoog is (>0,4), kun je deze met vertrouwen verwijderen.
p-waarde varieert van 0 tot 1, dus wanneer we spreken over een lage p-waarde bedoelen we minder dan 0,05 en een hoge p-waarde betekent meestal groter dan 0,3-0,5.
In ons voorbeeld kregen we p-waarden voor de lengte van de moeder en de constante van respectievelijk 0,087 en 0,051. Als we kenmerken met een p-waarde > 0,05 verwijderen, krijgen we het onderstaande resultaat (links).
Zelfs visueel kunnen we zien dat het model met constante (rechts) beter is, dus het is beter om deze niet uit het model te verwijderen.
Kleine datasets leveren vaak hogere p-waarden op (0,05–0,2), zelfs voor betekenisvolle features. P-waarden geven het vertrouwen weer: met meer data wordt het eenvoudiger om echt invloedrijke features van ruis te onderscheiden.
Hoe verwijder je slechte features?
Verwijder eenvoudigweg de kolom die bij de feature hoort uit X_tilde. Dit kan met de volgende code:
X_tilde = X_tilde.drop(___, axis=1)
Bijvoorbeeld, om de kolommen 'const' en 'Mother' te verwijderen, gebruik je:
X_tilde = X_tilde.drop(['Mother', 'const'], axis=1)
En maak vervolgens een nieuw OLS-object aan met het bijgewerkte X_tilde:
regression_model=sm.OLS(y, X_tilde)
1. Welke van de features moet je BEHOUDEN?
2. Kies de ONJUISTE uitspraak.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Het Kiezen van de Kenmerken
Bij het werken met veel features weet je vaak niet welke belangrijk zijn. Je kunt een model trainen met allemaal, controleren welke features niet behulpzaam zijn en vervolgens opnieuw trainen met alleen de invloedrijke features.
Waarom features uit het model verwijderen?
Het toevoegen van een feature die niet gerelateerd is aan de target introduceert ruis en verslechtert de voorspellingen. Veel nutteloze features stapelen ruis op en verminderen de modelkwaliteit verder.
Hoe weet je of de features goed of slecht zijn?
OLS biedt statistische tests tijdens de training. Elke feature krijgt een t-testresultaat, weergegeven in de summary()-tabel, dat aangeeft of deze een significante invloed heeft op de target.
123456789import pandas as pd import statsmodels.api as sm file_link='https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/heights_two_feature.csv' df = pd.read_csv(file_link) # Open the file X,y = df[['Father', 'Mother']], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Create X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train an OLS object print(regression_model.summary()) #Get the summary
Waar we in geïnteresseerd zijn, is de p-waarde voor elke feature.
Kortom, hoe lager de p-waarde, hoe groter het vertrouwen dat het kenmerk invloedrijk is
In de statistiek stellen we een significantieniveau in, meestal 0,05. Als de p-waarde van een feature deze drempel overschrijdt, wordt deze als niet invloedrijk beschouwd.
In de praktijk kunnen iets hogere p-waarden (net boven 0,05) het model nog steeds ondersteunen. Het is veiliger om het model te testen met en zonder zo'n feature. Maar als de p-waarde erg hoog is (>0,4), kun je deze met vertrouwen verwijderen.
p-waarde varieert van 0 tot 1, dus wanneer we spreken over een lage p-waarde bedoelen we minder dan 0,05 en een hoge p-waarde betekent meestal groter dan 0,3-0,5.
In ons voorbeeld kregen we p-waarden voor de lengte van de moeder en de constante van respectievelijk 0,087 en 0,051. Als we kenmerken met een p-waarde > 0,05 verwijderen, krijgen we het onderstaande resultaat (links).
Zelfs visueel kunnen we zien dat het model met constante (rechts) beter is, dus het is beter om deze niet uit het model te verwijderen.
Kleine datasets leveren vaak hogere p-waarden op (0,05–0,2), zelfs voor betekenisvolle features. P-waarden geven het vertrouwen weer: met meer data wordt het eenvoudiger om echt invloedrijke features van ruis te onderscheiden.
Hoe verwijder je slechte features?
Verwijder eenvoudigweg de kolom die bij de feature hoort uit X_tilde. Dit kan met de volgende code:
X_tilde = X_tilde.drop(___, axis=1)
Bijvoorbeeld, om de kolommen 'const' en 'Mother' te verwijderen, gebruik je:
X_tilde = X_tilde.drop(['Mother', 'const'], axis=1)
En maak vervolgens een nieuw OLS-object aan met het bijgewerkte X_tilde:
regression_model=sm.OLS(y, X_tilde)
Bedankt voor je feedback!