Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
ed:lab_08 [2024/04/09 14:52] pszwed [3.2 Dobór progu prawdopodobieństwa] |
ed:lab_08 [2024/04/24 23:20] (current) pszwed [4. LogisticRegressionGrid - tworzenie tabeli ocen] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
Celem jest budowa modelu regresji logistycznej pozwalającej przewidywać, | Celem jest budowa modelu regresji logistycznej pozwalającej przewidywać, | ||
Line 14: | Line 14: | ||
=== Zbiory danych === | === Zbiory danych === | ||
- | * {{ : | + | * {{ : |
* {{ : | * {{ : | ||
Line 88: | Line 88: | ||
</ | </ | ||
- | **2.** Regresja logistyczna wymaga, aby atrybutów wejściowe były typu numerycznego. | + | **2.** Regresja logistyczna wymaga, aby atrybutów wejściowe były typu numerycznego. |
* przekonwertuj datę za pomocą funkcji '' | * przekonwertuj datę za pomocą funkcji '' | ||
* Dodaj kolumnę '' | * Dodaj kolumnę '' | ||
Line 110: | Line 110: | ||
</ | </ | ||
- | ===== 2. Analiza | + | ===== 2. LogisticRegressionAnalysis - analiza |
==== 2.1 Budowa modelu i interpretacja współczynników ==== | ==== 2.1 Budowa modelu i interpretacja współczynników ==== | ||
Line 139: | Line 139: | ||
**3.** Zinterpretuj współczynniki równania regresji (napisz kod lub zamieść wykonane obliczenia). Pamiętaj, że timestamp jest wyrażony w sekundach. | **3.** Zinterpretuj współczynniki równania regresji (napisz kod lub zamieść wykonane obliczenia). Pamiętaj, że timestamp jest wyrażony w sekundach. | ||
- | Poniższe wyniki były wygenerowane | + | Poniższe wyniki były wygenerowane |
< | < | ||
Wzrost OcenaC o 1 zwiększa logit o 0.719097, a szanse zdania razy 2.052578 czyli o 105.257821% | Wzrost OcenaC o 1 zwiększa logit o 0.719097, a szanse zdania razy 2.052578 czyli o 105.257821% | ||
Line 240: | Line 240: | ||
Instrukcja '' | Instrukcja '' | ||
- | ===== 3. Ocena wyników ===== | + | ===== 3. LogisticRegressionScores - ocena wyników ===== |
- | Napisz funkcję | + | Napisz funkcję |
* dokona podziału na zbiór treningowy i testowy | * dokona podziału na zbiór treningowy i testowy | ||
Line 249: | Line 249: | ||
<code java> | <code java> | ||
- | static | + | static |
int splitSeed = 123; | int splitSeed = 123; | ||
Dataset< | Dataset< | ||
Line 263: | Line 263: | ||
LogisticRegressionModel lrModel = lr.fit(df_train); | LogisticRegressionModel lrModel = lr.fit(df_train); | ||
+ | ... | ||
+ | return lrModel; | ||
+ | } | ||
</ | </ | ||
Line 367: | Line 369: | ||
**2.** Wyznacz programowo najlepszy próg. | **2.** Wyznacz programowo najlepszy próg. | ||
* Wpierw wyznacz maksymalną wartość F-measure (przykład kodu poniżej) | * Wpierw wyznacz maksymalną wartość F-measure (przykład kodu poniżej) | ||
- | * A następnie odpowiadającą jej wartość progu (używając '' | + | * A następnie odpowiadającą jej wartość progu (używając '' |
- | * W powyższej tabelce możesz sprawdzić, czy znalezione zostały właściwe wartości | + | * W powyższej tabelce możesz sprawdzić, czy znalezione zostały właściwe wartości |
<code java> | <code java> | ||
Line 374: | Line 376: | ||
</ | </ | ||
+ | **3.** Ustaw próg klasyfikatora | ||
<code java> | <code java> | ||
+ | lrModel.setThreshold(bestThreshold); | ||
</ | </ | ||
+ | ==== 3.3 Ewaluacja na zbiorze testowym ==== | ||
+ | |||
+ | **1.** Wywołaj funkcję predykcji i skonfiguruj ewaluator | ||
<code java> | <code java> | ||
+ | Dataset< | ||
+ | |||
+ | MulticlassClassificationEvaluator eval = new MulticlassClassificationEvaluator() | ||
+ | .setLabelCol(" | ||
+ | .setPredictionCol(" | ||
</ | </ | ||
+ | **2.** Wyznacz: | ||
+ | * accuracy | ||
+ | * weightedPrecision | ||
+ | * weightedRecall | ||
+ | * f1 | ||
+ | Oczekiwane są wartości rzędu 0.82-0.83 | ||
+ | |||
+ | Nazwy dostępnych metryk: | ||
+ | < | ||
+ | (f1|accuracy|weightedPrecision|weightedRecall|weightedTruePositiveRate| weightedFalsePositiveRate|weightedFMeasure|truePositiveRateByLabel| falsePositiveRateByLabel|precisionByLabel|recallByLabel|fMeasureByLabel| logLoss|hammingLoss)' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== 4. LogisticRegressionGrid - tworzenie tabeli ocen ===== | ||
+ | |||
+ | Celem jest utworzenie tabeli ocen postaci, jak poniżej | ||
+ | |||
+ | < | ||
+ | +--------------+------+----------+--------+--------+ | ||
+ | | ImieNazwisko|OcenaC| | ||
+ | +--------------+------+----------+--------+--------+ | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |' | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | **Uwaga:** wynik może się nieco różnić w zależności od konfiguracji, | ||
+ | |||
+ | **1.** Wytrenuj klasyfikator na zbiorze '' | ||
+ | |||
+ | **2.** Napisz funkcje | ||
+ | |||
+ | <code java> | ||
+ | void addClassificationToGrid(SparkSession spark, LogisticRegressionModel lrModel) | ||
+ | </ | ||
+ | która: | ||
+ | * Wczyta zbiór danych '' | ||
+ | * Przetworzy daty, tak aby stały się wartościami numerycznymi | ||
+ | * Skonfiguruje VectorAssembler | ||
+ | * Wywoła funkcję predykcji zmiennej '' | ||
+ | * Usunie nadmiarowe kolumny | ||
+ | * Za pomocą funkcji '' | ||
+ | * Wyświetli wynik | ||
+ | * Zapisze w pliku '' |