Poprawka
This commit is contained in:
parent
25578850d9
commit
549ef7cd85
@ -74,6 +74,15 @@ Przygotowanie zbioru uczącego i testowego dla drzewa:
|
|||||||
X_train = pd.get_dummies(products[feature_cols])
|
X_train = pd.get_dummies(products[feature_cols])
|
||||||
y_train = products.chance_of_survive
|
y_train = products.chance_of_survive
|
||||||
```
|
```
|
||||||
|
Uczenie drzewa i ewaluacja przy pomocy zbioru testowego:
|
||||||
|
``` python
|
||||||
|
self.predictor = clf.fit(X_train, y_train)
|
||||||
|
|
||||||
|
y_pred = self.predictor.predict(test_X)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Graficzna reprezentacja drzewa wygenerowanego dla tego zbioru uczącego:
|
Graficzna reprezentacja drzewa wygenerowanego dla tego zbioru uczącego:
|
||||||
![Przykładowe drzewo](Drzewo.png)
|
![Przykładowe drzewo](Drzewo.png)
|
||||||
|
|
||||||
@ -82,3 +91,45 @@ Wyniki ewaluacji zestawu testowego, znajdujące się w pliku Test_results.xlsx:
|
|||||||
|
|
||||||
Przewidywana wartość w zestawie testowym różni się od wartości faktycznej średnio o 0.87, jako że w raporcie wartości są pomnożone przez 10, daje to średnio
|
Przewidywana wartość w zestawie testowym różni się od wartości faktycznej średnio o 0.87, jako że w raporcie wartości są pomnożone przez 10, daje to średnio
|
||||||
0.087 wartości różnicy w czasie działania drzewa.
|
0.087 wartości różnicy w czasie działania drzewa.
|
||||||
|
|
||||||
|
|
||||||
|
##### Zastosowanie drzewa w części wspólnej projektu
|
||||||
|
|
||||||
|
Po podniesieniu paczki przez agenta odpalana jest funkcja szukająca najbliższego pasującego regału.
|
||||||
|
Przy poszukiwaniu takiego regału stosowana jest funkcja heurystyczna o następującym kodzie:
|
||||||
|
```python
|
||||||
|
def rack_heuristics(self, start, goal, can_place):
|
||||||
|
heur_can_place = not can_place
|
||||||
|
diff_x = pow(goal.x - start.x, 2)
|
||||||
|
diff_y = pow(goal.y - start.y, 2)
|
||||||
|
place_cost = 100 * float(heur_can_place)
|
||||||
|
return round(sqrt(diff_x + diff_y), 3) + float(place_cost)
|
||||||
|
```
|
||||||
|
Parametr can_place to wynik ewaluacji pola goal, przy pomocy drzewa:
|
||||||
|
```python
|
||||||
|
for rack in quarter_racks:
|
||||||
|
new_node = Node(rack.x_position, rack.y_position)
|
||||||
|
can_place = self.location_classifier.check_if_can_place(package, rack)
|
||||||
|
cost = self.rack_heuristics(start_node, new_node, can_place)
|
||||||
|
```
|
||||||
|
self.location_classifier, to obiekt klasy PackageLocationClassifier.
|
||||||
|
Klasa ta zawiera metodę check_if_can_place() :
|
||||||
|
```python
|
||||||
|
def check_if_can_place(self, package, tile):
|
||||||
|
category = package.category
|
||||||
|
cat_treshold = PACKAGE_PLACE_TRESHOLD[category]
|
||||||
|
fields = [[
|
||||||
|
tile.air_temperature,
|
||||||
|
tile.humidity,
|
||||||
|
category == "flammable",
|
||||||
|
category == "fragile",
|
||||||
|
category=="freezed" ,
|
||||||
|
category == "keep_dry",
|
||||||
|
category == "normal"
|
||||||
|
]]
|
||||||
|
|
||||||
|
quality_of_place = round(self.predictor.predict(fields)[0]/10, 2)
|
||||||
|
if quality_of_place > cat_treshold:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
```
|
@ -42,8 +42,6 @@ class PackageLocationClassifier():
|
|||||||
clf = DecisionTreeRegressor(ccp_alpha=0.02, min_samples_leaf=5, max_depth=5)
|
clf = DecisionTreeRegressor(ccp_alpha=0.02, min_samples_leaf=5, max_depth=5)
|
||||||
self.predictor = clf.fit(X_train, y_train)
|
self.predictor = clf.fit(X_train, y_train)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
y_pred = self.predictor.predict(test_X)
|
y_pred = self.predictor.predict(test_X)
|
||||||
|
|
||||||
evaluation = pd.DataFrame({'category': testset.category, 'temperature': testset.temperature , 'humid': testset.humidity ,'Actual': test_y, 'Predicted': y_pred})
|
evaluation = pd.DataFrame({'category': testset.category, 'temperature': testset.temperature , 'humid': testset.humidity ,'Actual': test_y, 'Predicted': y_pred})
|
||||||
@ -69,8 +67,6 @@ class PackageLocationClassifier():
|
|||||||
]]
|
]]
|
||||||
|
|
||||||
quality_of_place = round(self.predictor.predict(fields)[0]/10, 2)
|
quality_of_place = round(self.predictor.predict(fields)[0]/10, 2)
|
||||||
# print("{} - dopasowanie {}".format(package,quality_of_place))
|
|
||||||
# pdb.set_trace()
|
|
||||||
if quality_of_place > cat_treshold:
|
if quality_of_place > cat_treshold:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
Loading…
Reference in New Issue
Block a user