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:37]
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
- +
-**3.** 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. 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.
  
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.1710095864.txt.gz · Last modified: 2024/03/10 19:37 by pszwed
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0