Poprawka, dodanie bloków kodu i screenów
This commit is contained in:
parent
e6a68c5f04
commit
f714133797
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user