Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ed:lab_04 [2024/03/10 19:35]
pszwed [Rozwiązanie 2]
ed:lab_04 [2024/03/21 02:25] (current)
pszwed [Funkcja do rysowania wykresów]
Line 12: Line 12:
 ===== 1. Cechy wielomianowe 2 stopnia =====  ===== 1. Cechy wielomianowe 2 stopnia ===== 
 **Umieść kod w klasie  ''LinearRegressionPolynomialFeaturesOrderTwo''** **Umieść kod w klasie  ''LinearRegressionPolynomialFeaturesOrderTwo''**
 +
 +**Ponieważ przetwarzane są kolejne zbiory, najwygodniej będzie umieścić kod w funkcji postaci\\
 +''static void processDataset(SparkSession spark,String filename,Function<Double,Double> f_true)''**
 +
  
 **1.** Dodaj do zbioru danych kolumnę ''X2'' zawierającą po prostu wynik wyrażenia "X*X" **1.** Dodaj do zbioru danych kolumnę ''X2'' zawierającą po prostu wynik wyrażenia "X*X"
Line 42: Line 46:
 **4.** Wyświetl wyniki. Przy wyświetlaniu aproksymowanej funkcji wywoływana jest funkcja ''lrModel.predict()''. Jako argument musisz dostarczyć wektor zawierający zarówno wartość wejściową, jak i jej kwadrat. Możesz to zrealizować dodają parametr order do funkcji plot (przyda się przy regresji 3-stopnia) lub po prostu dodając element. **4.** Wyświetl wyniki. Przy wyświetlaniu aproksymowanej funkcji wywoływana jest funkcja ''lrModel.predict()''. Jako argument musisz dostarczyć wektor zawierający zarówno wartość wejściową, jak i jej kwadrat. Możesz to zrealizować dodają parametr order do funkcji plot (przyda się przy regresji 3-stopnia) lub po prostu dodając element.
  
-**5.** Przetwórz wszystkie pliki i wyświetl ich wykresy+**5.** Przetwórz wszystkie pliki i wyświetl ich wykresy oraz w każdym przypadku podaj równanie regresji
  
 Niewątpliwie ciekawym wykresem jest dopasowanie wielomianu 2-stopnia do danych wygenerowanych z wielomianu 3 stopnia  Niewątpliwie ciekawym wykresem jest dopasowanie wielomianu 2-stopnia do danych wygenerowanych z wielomianu 3 stopnia 
Line 96: Line 100:
 **Kod umieść w klasie ''LinearRegressionPolynomialFeaturesPipeline''** **Kod umieść w klasie ''LinearRegressionPolynomialFeaturesPipeline''**
  
-**Ponieważ przetwarzane są kolejne zbiory, najlepiej umieść kod w funkcji postci ''static void processDataset(SparkSession spark,String filename,int degree,Function<Double,Double> f_true)''**+**Ponieważ przetwarzane są kolejne zbiory, najwygodniej będzie umieścić kod w funkcji postaci\\ 
 +''static void processDataset(SparkSession spark,String filename,int degree,Function<Double,Double> f_true)''**
  
  
-Dodawanie manualne cech jako kolumn zbioru danych jest zbyt żmudne - zachodzi konieczność nazywania tych kolumn, później modyfikacji kodu w kilku miejscach. Raczej buduje się ciąg przetwarzania: ''Pipeline'', którego elementami są wstępne przetwarzanie danych i budowa modelu estymatora. Rozszerzenie cech o cechy wielomianowe jest dokonywane za pomocą odpowiedniej funkcji transformującej dane tablicowe :  ''PolynomialExpansion''.+Dodawanie manualne cech jako kolumn zbioru danych jest zbyt żmudne - zachodzi konieczność nazywania tych kolumn, później modyfikacji kodu w kilku miejscach. Raczej buduje się ciąg przetwarzania: ''Pipeline'', którego elementami są wstępne przetwarzanie danych i budowa modelu estymatora.  
 + 
 +Rozszerzenie cech o cechy wielomianowe jest dokonywane za pomocą odpowiedniej funkcji transformującej dane tablicowe :  ''PolynomialExpansion''.
  
 ==== Budowa ciągu przetwarzania  ==== ==== Budowa ciągu przetwarzania  ====
Line 168: Line 175:
 </code> </code>
  
-Aby przetworzyć je za pomocą ''pipeline'' musimy zamienić je na Dataset<Row> zawierający kolumnę o nazwie ''X'' z odpowiednimi wartościami.+Aby przetworzyć je za pomocą ''pipeline'' musimy zamienić je na obiekt typu Dataset<Row> zawierający kolumnę o nazwie ''X'' z odpowiednimi wartościami.
  
 **2.** Zamiana wartości double na ''Row'' **2.** Zamiana wartości double na ''Row''
  
-Przeiteruj przez elementy fx i dla każdego z nich utwórz obiekt ''Row'', np. wołając ''Row r = RowFactory.create(d);'' lub odpowiednią funkcje strumienia. Zbierz wynik w ''List<Row> rows''+Przeiteruj przez elementy fx i dla każdego z nich utwórz obiekt ''Row'', np. wołając ''Row r = RowFactory.create(d);'' lub umieść takie odwzorowanie w odpowiedniej funkcji strumienia. Zbierz wynik w ''List<Row> rows''
  
 **3.** Zdefiniuj schemat i utwórz zbiór danych: **3.** Zdefiniuj schemat i utwórz zbiór danych:
Line 281: Line 288:
   * ''xy-005.csv'' dla cech wielomianowych 2 stopnia   * ''xy-005.csv'' dla cech wielomianowych 2 stopnia
  
-Zapisz rysunki, zbierz metryki.+Zapisz rysunki metryki.
  
 ==== Rozwiązanie 2 ==== ==== Rozwiązanie 2 ====
Line 298: Line 305:
 Można oczywiście ustawić seed i otrzymać powtarzalne wyniki (np. seed =3 wydaje się całkiem dobry). Można oczywiście ustawić seed i otrzymać powtarzalne wyniki (np. seed =3 wydaje się całkiem dobry).
  
-**2.** Zbierz w tabelce metryki dla obu sposobów ustalania podziału  +**2.** Wróć do poprzedniego rozwiązania 
- +Stały podział może być całkiem dobry, jeżeli wcześniej dane zostały losowo pomieszane. Jest to częste podejście przy publikacji zbiorów testowych.
-**3.** Wróć do poprzedniego rozwiązania +
-Stały podział może być całkiem dobry, jeżeli wcześniej dane zostały losowo pomieszane +
  
 Dodaj przed podziałem następujący kod i porównaj wyniki: Dodaj przed podziałem następujący kod i porównaj wyniki:
Line 308: Line 313:
 df = df.orderBy(org.apache.spark.sql.functions.rand(3)); df = df.orderBy(org.apache.spark.sql.functions.rand(3));
 </code> </code>
 +
 +**3.** Zbierz w tabelce metryki dla wszystkich sposobów ustalania podziału 
 +
  
    
  
ed/lab_04.1710095748.txt.gz · Last modified: 2024/03/10 19:35 by pszwed
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0