commit_natalia4
This commit is contained in:
parent
c0e4e47232
commit
b7f9beea4d
@ -25,7 +25,7 @@ def main():
|
||||
X = model_tree[feature_cols]
|
||||
#separacja danych etykieta
|
||||
y = model_tree.number
|
||||
|
||||
|
||||
|
||||
#podział danych na zestaw treningowy i testowy; 70% trening 30% test
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
|
||||
|
@ -126,7 +126,7 @@ class Dish(object):
|
||||
self.price = int(price)
|
||||
self.fatContent = random.randint(0, 16)
|
||||
self.fiberContent = random.randint(0, 16)
|
||||
self.spicy = random.randint(0, 1)
|
||||
self.spicy = random.randint(0, 5)
|
||||
|
||||
|
||||
class Plate(object):
|
||||
|
@ -89,35 +89,85 @@ Na końcu model (z większym wskaźnikiem trafności) zostaje zapisany do pliku
|
||||
<img src="https://git.wmi.amu.edu.pl/s444412/DSZI_2020_Projekt/raw/master/Restaurant/Natalia/polecanie_1.png" >
|
||||
|
||||
|
||||
## Integracja z projektem ##
|
||||
|
||||
Po uruchomieniu programu i wybraniu na ekranie głównym opcji *Ciężkostrawność dań*, uruchomiona zostaje funkcja *Evaluate()*, która ładuje z pliku model drzewa. Zainicjowany zostaje również przykładowy stan restauracji (dodanie kilku klientów, przypisanie im stołów i talerzy). Wywoływany jest też przykładowy ruch kelnera, który podchodzi do kilku stolików i pomaga w ocenie strawności dania, przy pomocy funkcji *predictDigest()*:
|
||||
### Integracja z projektem ###
|
||||
|
||||
Po uruchomieniu programu, należy nacisnąć na przycisk *Polecanie dań*, a wtedy uruchomiona zostaje funkcja *Tree_natalia()*, która ładuje z pliku model drzewa. Zainicjowany zostaje również przykładowy stan restauracji (dodanie kilku klientów, przypisanie im stołów i talerzy). Wywoływany jest też przykładowy ruch kelnera, który podchodzi do kilku stolików i pomaga w doborze dania.
|
||||
```python
|
||||
def predictDigest(dish, client, model):
|
||||
data = []
|
||||
data.append(client.age)
|
||||
data.append(dish.fatContent)
|
||||
data.append(dish.fiberContent)
|
||||
data.append(client.sex)
|
||||
data.append(dish.spicy)
|
||||
prediction = model.predict([data])
|
||||
if prediction == 1:
|
||||
messagebox.showinfo("opinia", "Z tym może być ciężko. " + str(data))
|
||||
return prediction
|
||||
else:
|
||||
messagebox.showinfo("opinia", "Z tym nie będzie tak źle! " + str(data))
|
||||
return prediction
|
||||
def Tree_natalia(d):
|
||||
if d == 1:
|
||||
loaded_model = joblib.load('Natalia/final_model.sav')
|
||||
messagebox.showinfo("Zaczynamy!", "Zaczynamy!")
|
||||
|
||||
prefer1 = Dish("prefer1", 40, 20, 15)
|
||||
prefer2 = Dish("prefer2", 25, 10, 10)
|
||||
prefer3 = Dish("prefer3", 55, 25, 28)
|
||||
|
||||
plate1 = Plate(prefer1, "Natalia/danie1.png")
|
||||
plate2 = Plate(prefer2, "Natalia/danie2.png")
|
||||
plate3 = Plate(prefer3, "Natalia/danie3.png")
|
||||
|
||||
client1 = Client(25, 1, 45, 1)
|
||||
client2 = Client(41, 0, 22, 4)
|
||||
client3 = Client(10, 0, 32, 8)
|
||||
|
||||
client1.takePlateAndEat(plate1)
|
||||
client2.takePlateAndEat(plate2)
|
||||
client3.takePlateAndEat(plate3)
|
||||
|
||||
bot.goByAStar((tables[1].pos[0] + 1, tables[1].pos[1]))
|
||||
opinion = show_predict(prefer1, client1, loaded_model)
|
||||
|
||||
bot.goByAStar((tables[3].pos[0] + 1, tables[3].pos[1]))
|
||||
opinion = show_predict(prefer2, client2, loaded_model)
|
||||
|
||||
bot.goByAStar((tables[5].pos[0] + 1, tables[5].pos[1]))
|
||||
opinion = show_predict(prefer3, client3, loaded_model)
|
||||
|
||||
```
|
||||
|
||||
Funkcja jako parametry przyjmuje obiekty danie, klient i załadowany model. Parametry potrzebne modelowi do wyznaczenia wyniku pobierane są z odpowiednich obiektów i jako tablica przekazywane do funkcji *predict()*. Następnie, w zależności od otrzymanego wyniku wyświetlany jest odpowiedni komunikat i dane jakie podlegały ocenie.
|
||||
Następnie przy pomocy funkcji *show_predict()* wyświetlane jest zdjęcie poleconego dania.
|
||||
Funkcja jako parametry przyjmuje obiekty danie, klient i załadowany model.
|
||||
```python
|
||||
def show_predict(dish, client, model):
|
||||
data = []
|
||||
data.append(client.age)
|
||||
data.append(dish.fatContent)
|
||||
data.append(dish.fiberContent)
|
||||
data.append(client.sex)
|
||||
data.append(dish.spicy)
|
||||
prediction = model.predict([data])
|
||||
|
||||
|
||||
if prediction == 1:
|
||||
ShowImg("Natalia/danie1.png")
|
||||
return prediction
|
||||
elif prediction == 2:
|
||||
ShowImg("Natalia/danie2.png")
|
||||
return prediction
|
||||
elif prediction == 3:
|
||||
ShowImg("Natalia/danie3.png")
|
||||
return prediction
|
||||
elif prediction == 4:
|
||||
ShowImg("Natalia/danie4.png")
|
||||
return prediction
|
||||
elif prediction == 5:
|
||||
ShowImg("Natalia/danie5.png")
|
||||
return prediction
|
||||
elif prediction == 6:
|
||||
ShowImg("Natalia/danie6.png")
|
||||
return prediction
|
||||
else:
|
||||
ShowImg("Natalia/danie7.png")
|
||||
return prediction
|
||||
|
||||
```
|
||||
|
||||
Pola *fatContent*, *fiberContent*, *spicy* klasy *Dish* w momencie tworzenia instancji klasy są ustawiane na losowo wygenerowaną liczbę z odpowiednich przedziałów:
|
||||
|
||||
```python
|
||||
self.fatContent = random.randint(0, 16)
|
||||
self.fiberContent = random.randint(0, 16)
|
||||
self.spicy = random.randint(0, 1)
|
||||
self.spicy = random.randint(0, 5)
|
||||
```
|
||||
|
||||
Po zakończeniu trasy wyświetlany jest stosowny komunikat, a aplikacja zostaje wyłączona.
|
Loading…
Reference in New Issue
Block a user