Vinnaren i pepparkakshustävlingen!
2022-07-07, 09:24
  #1
Medlem
Hej! Sitter och testar lite med MLPRegressor från sklearn. Jag märkte att om jag kör cross validation så får jag en modell med bättre score än om jag kör utan. Min fråga är hur jag hämtar ut just den bästa modellen och använder mig av den.

Kod:
import pandas as pd
from sklearn
.neural_network import MLPRegressor
from sklearn
.model_selection import cross_validate


dataset 
pd.read_csv("TSLA.csv")

dataset["Close"]
dataset.drop(["Close""Date"], axis=1)

model MLPRegressor(random_state=1,
                     
max_iter=5000,
                     
verbose=True,
                     
hidden_layer_sizes=(10, ))

cv_results cross_validate(modelXy,
                            
cv=10verbose=3,
                            
scoring="neg_mean_squared_error",
                            
return_estimator=True)

for 
current in cv_results.keys():
    print(
"{0}:".format(current))
    print(
cv_results[current])
    print() 

Jag använder Tesla datasetet som finns på kaggle.com.

Som output får jag:

Citat:
test_score:
[ -2.27087831 -0.62080632 -7.70970914 -44.14671272 -14.9313784
-25.50519682 -13.61407291 -35.84139504 -50.3002465 -57.67208527]

Jag vill alltså använda mig av modell nummer 2 (med index 1).

Enligt mitt kursmaterial står det så här:

Citat:
With both scores and models available, a data engineer may review the scores and select a model with the desired score. The model may then be retrieved using the model's index (or score).

Och deras förslag på att göra detta är:

Kod:
# Specificy the index of the model
# to retrieve from the list of estimators.
model cv_results["estimators"][1

Men längre än så kommer jag inte, och finns ingen mer information i kursen. Kör jag sista raden med kod får jag: KeyError: 'estimators', och vet inte hur jag ska fortsätta härifrån.

Någon som har några tips? Eller har jag missförstått något?
Citera
2022-07-07, 09:39
  #2
Medlem
Jasper.Newtons avatar
Kan du förklara lite mer vad det här är för nåt så kan jag hjälpa dig? Ser ut som programmering?
Citera
2022-07-07, 10:02
  #3
Medlem
Citat:
Ursprungligen postat av Jasper.Newton
Kan du förklara lite mer vad det här är för nåt så kan jag hjälpa dig? Ser ut som programmering?

Jadå! Det är Neural Networks i Python. Jag har en .csv fil med Teslas aktier över en 10-års period.
Filen har lite drygt 2400 rader och fem kolumner.

Kolumnerna är; Open, High, Low, Close och Volume.

Målet är att med hjälp av datan i alla kolumner utan Close, förutspå värdet av Close.

Finns flera andra machine learning algoritmer som passar bättre, har använt dom med, men vill testa att få till ett så bra resultat som möjligt med Neural Networks, även kallat MLP.
Citera
2022-07-07, 12:49
  #4
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av insertrandomname
Jadå! Det är Neural Networks i Python. Jag har en .csv fil med Teslas aktier över en 10-års period.
Filen har lite drygt 2400 rader och fem kolumner.

Kolumnerna är; Open, High, Low, Close och Volume.

Målet är att med hjälp av datan i alla kolumner utan Close, förutspå värdet av Close.

Finns flera andra machine learning algoritmer som passar bättre, har använt dom med, men vill testa att få till ett så bra resultat som möjligt med Neural Networks, även kallat MLP.
Prova att lägga till: return_estimator=True
i cross_validate-anropet.

https://scikit-learn.org/stable/modu...cross_validate
Citera
2022-07-07, 13:23
  #5
Medlem
Offices avatar
Vill du verkligen använda dig av cross_validate? Visst du kan som Enterprise skriver låta cross_validate returnera alla modeller i en tuple, men det känns inte som det är rätt väg att gå. Att du får bra score är bara att du har tränat/testat modellen på fördelaktig data och inget som säger att den kommer prestera bra generellt.

För att verkligen få till en bra och robust modell så borde du använda dig av GridSearchCV, HalvingGridSearchCV eller någon annan hyper-parameter optimizer.
Citera
2022-07-07, 18:13
  #6
Medlem
Citat:
Ursprungligen postat av Enterprise
Prova att lägga till: return_estimator=True
i cross_validate-anropet.

https://scikit-learn.org/stable/modu...cross_validate

Jag har det med i koden ovanför, fick alla 10 modeller i en tuple. Men som jag förstod det ska man kunna välja den modellen som presterade bäst, och använda sig av den till andra uppgifter. Men jag kanske missförstått hela grejen.

Citat:
Ursprungligen postat av Office
Vill du verkligen använda dig av cross_validate? Visst du kan som Enterprise skriver låta cross_validate returnera alla modeller i en tuple, men det känns inte som det är rätt väg att gå. Att du får bra score är bara att du har tränat/testat modellen på fördelaktig data och inget som säger att den kommer prestera bra generellt.

För att verkligen få till en bra och robust modell så borde du använda dig av GridSearchCV, HalvingGridSearchCV eller någon annan hyper-parameter optimizer.

Cross-validate delen var bara med som en parantes i ANN delen av kursen, sista sidan faktiskt. Var inte mycket till förklaring om för och nackdelar, men man vill ju åtminstone testa. Men jag ger nog upp det spåret. Tack för tipset om GridSearchCV, det har jag sett nämnas några gånger. Är sommarlov nu, men alltid roligt att lära sig något nytt, så det ska jag läsa mig på.

Är förresten nybörjare, så hur robust själva modellen är spelar kanske inte så stor roll i nuläget, inte scoren heller, mest bara att lära mig alla steg till färdiga modeller i olika algoritmer. Tråkigt bara när man inte förstår, lär sig inte mycket då.
Citera
2022-07-07, 18:29
  #7
Medlem
Offices avatar
Citat:
Ursprungligen postat av insertrandomname
Jag har det med i koden ovanför, fick alla 10 modeller i en tuple. Men som jag förstod det ska man kunna välja den modellen som presterade bäst, och använda sig av den till andra uppgifter. Men jag kanske missförstått hela grejen.
Nu sitter jag på mobilen och använder själv aldrig cross_validate, men jag tror du har lagt på ett s för mycket, ”estimators” istället för ”estimator” här:
Kod:
model = cv_results["estimators"][1]

Men att välja modell efter hur bra den presterar på en viss del av tränings/test-datan är lite fel väg att gå. Det är inte alls säkert att resultatet blir så bra när den väl ska användas.

Citat:
Ursprungligen postat av insertrandomname
Cross-validate delen var bara med som en parantes i ANN delen av kursen, sista sidan faktiskt. Var inte mycket till förklaring om för och nackdelar, men man vill ju åtminstone testa. Men jag ger nog upp det spåret. Tack för tipset om GridSearchCV, det har jag sett nämnas några gånger. Är sommarlov nu, men alltid roligt att lära sig något nytt, så det ska jag läsa mig på.

Är förresten nybörjare, så hur robust själva modellen är spelar kanske inte så stor roll i nuläget, inte scoren heller, mest bara att lära mig alla steg till färdiga modeller i olika algoritmer. Tråkigt bara när man inte förstår, lär sig inte mycket då.
Vad är det för kurs?
__________________
Senast redigerad av Office 2022-07-07 kl. 18:33.
Citera
2022-07-07, 18:43
  #8
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av insertrandomname
Jag har det med i koden ovanför, fick alla 10 modeller i en tuple. Men som jag förstod det ska man kunna välja den modellen som presterade bäst, och använda sig av den till andra uppgifter. Men jag kanske missförstått hela grejen.



Cross-validate delen var bara med som en parantes i ANN delen av kursen, sista sidan faktiskt. Var inte mycket till förklaring om för och nackdelar, men man vill ju åtminstone testa. Men jag ger nog upp det spåret. Tack för tipset om GridSearchCV, det har jag sett nämnas några gånger. Är sommarlov nu, men alltid roligt att lära sig något nytt, så det ska jag läsa mig på.

Är förresten nybörjare, så hur robust själva modellen är spelar kanske inte så stor roll i nuläget, inte scoren heller, mest bara att lära mig alla steg till färdiga modeller i olika algoritmer. Tråkigt bara när man inte förstår, lär sig inte mycket då.

Jag kan inte alls sklearn eller neurala nätverk, men är det den estimator med lägst score som är "bäst"?

Du har ju score i nummerordning och du har estimatorerna i nummerordning

Kod:
cv_results["estimator"]
Citat:
[MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True),
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True)]
Kod:
cv_results["estimator"][1]
Citat:
MLPRegressor(hidden_layer_sizes=(10,), max_iter=5000, random_state=1,
verbose=True)
Citera
2022-07-07, 19:04
  #9
Medlem
Citat:
Ursprungligen postat av Office
Nu sitter jag på mobilen och använder själv aldrig cross_validate, men jag tror du har lagt på ett s för mycket, ”estimators” istället för ”estimator” här:
Kod:
model = cv_results["estimators"][1]

Men att välja modell efter hur bra den presterar på en viss del av tränings/test-datan är lite fel väg att gå. Det är inte alls säkert att resultatet blir så bra när den väl ska användas.


Vad är det för kurs?

Det kan stämma med att det blev ett s som inte borde vara där! Sitter själv på mobilen, men ska testa det.

Kursen heter Applied Machine learning, lite dumt att hoppa på den som första programmerings-kurs kanske, men tycker ämnet är intressant så valde att starta där.
https://www.noroff.no/en/studies/voc...chine-learning

Ska studera back-end till hösten, så det blir lite allt möjligt till slut.
Citera
2022-07-07, 19:08
  #10
Medlem
Citat:
Ursprungligen postat av Enterprise
Jag kan inte alls sklearn eller neurala nätverk, men är det den estimator med lägst score som är "bäst"?

Du har ju score i nummerordning och du har estimatorerna i nummerordning

Kod:
cv_results["estimator"]

Kod:
cv_results["estimator"][1]

Ja, precis. Jag ska komma så nära noll som möjligt. Men nu fick jag ju svar av dig att jag hade ett s på slutet av "estimator" som gav mig en felkod! Tack!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback