From f71413379786871f7883122e17fc460f22986930 Mon Sep 17 00:00:00 2001 From: andrzej Date: Mon, 11 May 2020 14:01:16 +0200 Subject: [PATCH] =?UTF-8?q?Poprawka,=20dodanie=20blok=C3=B3w=20kodu=20i=20?= =?UTF-8?q?screen=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Andrzej_Preibisz.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Andrzej_Preibisz.md b/Andrzej_Preibisz.md index 4d1cef2..b15093c 100644 --- a/Andrzej_Preibisz.md +++ b/Andrzej_Preibisz.md @@ -30,7 +30,7 @@ na przykład kładąc paczkę z lakierem/benzyną na regale lepiej mieć trochę kładąc książkę - że nie zniszczeje od wilgoci. W związku z tym zamiast prostej odpowiedzi Tak/Nie na pytanie czy dany obiekt można położyć na danym regale potrzebna była przewidywana wartość prawdopodobieństwa że w danym miejscu zachowa się on w dobrym stanie. Wszystkie te progi wynoszą odpowiednio: - `` + ``` python PACKAGE_PLACE_TRESHOLD = { "normal": 0.8, "freezed": 0.85, @@ -38,7 +38,7 @@ zachowa się on w dobrym stanie. Wszystkie te progi wynoszą odpowiednio: "flammable": 0.9, "keep_dry": 0.8 } - `` + ``` Zdecydowałem się więc na wybór drzewa regresyjnego. Biblioteką której użyłem w celu implementacji drzewa jest scikit-learn. Najważniejszym problemem oprócz dokładności oszacowań dokonanych przy pomocy drzewa było uniknięcie overfittingu(przepasowania), @@ -46,8 +46,10 @@ czyli sytuacji, w której drzewo perfekcyjnie dopasuje się do danych ze zbioru z danymi spoza tego zbioru poradzi sobie już dużo gorzej. Oprócz błędnej oceny danych innych niż ze zbioru uczącego sygnałem wskazującym na overfitting drzewa jest zbyt duża jego głębokość drzewa (odległość od korzenia do najdalszego liścia), oraz liście zawierające tylko 1 rekord. W celu uniknięcia overfittingu zdecydowałem się na ograniczenie maksymalnej głębokości drzewa, oraz na ustawienie minimalnej -ilości rekordów w liściu. Drzewo wraz z odpowiednimi ograniczeniami zdefiniowane jest w następujący sposób \ -``clf = DecisionTreeRegressor(ccp_alpha=0.02, min_samples_leaf=5, max_depth=5)`` +ilości rekordów w liściu. Drzewo wraz z odpowiednimi ograniczeniami zdefiniowane jest w następujący sposób +```python +clf = DecisionTreeRegressor(ccp_alpha=0.02, min_samples_leaf=5, max_depth=5) +``` gdzie argumenty min_samples_leaf, oraz max_depth oznaczają odpowiednio minimalną ilość rekordów(przykładów ze zbioru uczącego) w liściu, oraz maksymalną głębokość drzewa. Kryterium według którego mierzona jest "jakość" rozgałęzienia jest tzw. MSE(Mean Squared Error), czyli kwadrat odchylenia standardowego wartości przewidywanej wobec faktycznej. Dobierając te parametry wyszedłem z założenia że jeżeli 5 rekordów będzie w jednym liściu, to znaczy że najprawdopodbniej zachodzi @@ -59,7 +61,7 @@ produkt, kategorię produktu, temperature na regale, wilgotność powietrza na d Przykładowy rekord: ``frozen food,freezed,21, 0.5, 0.01, 0 `` . Zbiór testowy z kolei zawiera 26 rekordów w tym samym formacie. Zbiór uczący znajduje się w pliku package_location_classifier/trainset/trainset.csv, a testowy package_location/testset/testset.csv. Przygotowanie zbioru uczącego i testowego dla drzewa: - `` + ``` python products = pd.read_csv("package_location_classifier/trainset/trainset.csv", header=0, sep=",", names=cols_names) testset = pd.read_csv("package_location_classifier/testset/testset.csv", header=None, sep=",", names=cols_names) products = products.round({"chance_of_survive": 1}) @@ -71,10 +73,10 @@ Przygotowanie zbioru uczącego i testowego dla drzewa: products = products.sample(frac=1) X_train = pd.get_dummies(products[feature_cols]) y_train = products.chance_of_survive - `` + ``` Graficzna reprezentacja drzewa wygenerowanego dla tego zbioru uczącego: -[Przykładowe drzewo](Drzewo.png) +![Przykładowe drzewo](Drzewo.png) Wyniki ewaluacji zestawu testowego, znajdujące się w pliku Test_results.xlsx: -[Wyniki testu](Test_Results.png) +![Wyniki testu](Test_Results.png)