drzewo decyzyjne i implementacja klasyfikatora
This commit is contained in:
parent
3a4fcf611e
commit
f96f8229a9
@ -61,7 +61,7 @@ class HousePOI:
|
|||||||
self.truck_fullness = Interface.truck_fullness.fullness
|
self.truck_fullness = Interface.truck_fullness.fullness
|
||||||
self.payment = payment
|
self.payment = payment
|
||||||
self.bin_fullness = bin_fullness
|
self.bin_fullness = bin_fullness
|
||||||
self.trash_type = guessed_trash_type
|
self.trash_type = guessed_trash_type[0]
|
||||||
|
|
||||||
if self.season == 'autumn':
|
if self.season == 'autumn':
|
||||||
season_autumn = 1
|
season_autumn = 1
|
||||||
@ -114,11 +114,11 @@ class HousePOI:
|
|||||||
if outcome == 1:
|
if outcome == 1:
|
||||||
Interface.truck_fullness.fullness[trash_type] += 0.25 # 0.25
|
Interface.truck_fullness.fullness[trash_type] += 0.25 # 0.25
|
||||||
|
|
||||||
debug(dec_tree, outcome, trash_type, guessed_trash_type, self.season, self.day, self.bin_fullness,
|
debug(dec_tree, outcome, trash_type, guessed_trash_type[0], guessed_trash_type[1], self.season, self.day, self.bin_fullness,
|
||||||
self.truck_fullness)
|
self.truck_fullness)
|
||||||
|
|
||||||
|
|
||||||
def debug(dec_tree, outcome, trash_type, guessed_trash_type, season, day, bin_fullness, truck_fullness):
|
def debug(dec_tree, outcome, trash_type, guessed_trash_type, filename, season, day, bin_fullness, truck_fullness):
|
||||||
HOUSE_NUMBER['House_number'] += 1
|
HOUSE_NUMBER['House_number'] += 1
|
||||||
print("Domek nr: " + str(HOUSE_NUMBER['House_number']))
|
print("Domek nr: " + str(HOUSE_NUMBER['House_number']))
|
||||||
if outcome == 1:
|
if outcome == 1:
|
||||||
@ -128,6 +128,7 @@ def debug(dec_tree, outcome, trash_type, guessed_trash_type, season, day, bin_fu
|
|||||||
print("Pora: " + season)
|
print("Pora: " + season)
|
||||||
print("Dzień: " + day)
|
print("Dzień: " + day)
|
||||||
print("Typ śmieci: " + trash_type)
|
print("Typ śmieci: " + trash_type)
|
||||||
|
print("Nazwa pliku: " + trash_type + str(filename))
|
||||||
print("Zaobserwowane: " + guessed_trash_type)
|
print("Zaobserwowane: " + guessed_trash_type)
|
||||||
print("Zapełnienie domu: " + str(bin_fullness))
|
print("Zapełnienie domu: " + str(bin_fullness))
|
||||||
print(truck_fullness)
|
print(truck_fullness)
|
||||||
|
30
src/decisiontree.py
Normal file
30
src/decisiontree.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from sklearn import tree
|
||||||
|
from sklearn.tree import DecisionTreeClassifier
|
||||||
|
|
||||||
|
|
||||||
|
def encode_category(category, categories):
|
||||||
|
encoded = pd.get_dummies(categories).astype(int)
|
||||||
|
if category in encoded.columns:
|
||||||
|
return encoded[category].values.tolist()
|
||||||
|
else:
|
||||||
|
return [0] * len(encoded.columns)
|
||||||
|
|
||||||
|
|
||||||
|
data = pd.read_csv('tree_data.csv')
|
||||||
|
data_encoded = pd.get_dummies(data, columns=['trash_types', 'season', 'day'])
|
||||||
|
|
||||||
|
X = data_encoded.drop('decision', axis=1)
|
||||||
|
y = data_encoded['decision']
|
||||||
|
|
||||||
|
clf = DecisionTreeClassifier()
|
||||||
|
decision_tree = clf.fit(X, y)
|
||||||
|
|
||||||
|
with open('./tree_in_txt.txt', "w") as file:
|
||||||
|
file.write(tree.export_text(decision_tree, feature_names=X.columns.tolist()))
|
||||||
|
|
||||||
|
|
||||||
|
def decision(conditions):
|
||||||
|
new_conditions = pd.DataFrame(conditions)
|
||||||
|
new_decision = decision_tree.predict(new_conditions)
|
||||||
|
return new_decision
|
48
src/trashtype.py
Normal file
48
src/trashtype.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import tensorflow as tf
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import os
|
||||||
|
import PIL
|
||||||
|
import random
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
|
||||||
|
def trash_type_def(trash_type):
|
||||||
|
img_num = 0
|
||||||
|
img_height, img_width = 180, 180
|
||||||
|
|
||||||
|
if trash_type == 'biological':
|
||||||
|
img_num = random.randint(1, 985)
|
||||||
|
if trash_type == 'glass':
|
||||||
|
img_num = random.randint(1, 501)
|
||||||
|
if trash_type == 'paper':
|
||||||
|
img_num = random.randint(1, 594)
|
||||||
|
if trash_type == 'plastic':
|
||||||
|
img_num = random.randint(1, 482)
|
||||||
|
|
||||||
|
filename = trash_type + str(img_num)
|
||||||
|
class_names = ['biological', 'glass', 'paper', 'plastic']
|
||||||
|
trash_classification_model = tf.keras.models.load_model('../trash-classification/m_with_data_augmentation.h5')
|
||||||
|
test_image_path = "../trash-classification/trash/test/"+trash_type+"/"+filename+".jpg"
|
||||||
|
|
||||||
|
img = tf.keras.utils.load_img(
|
||||||
|
test_image_path, target_size=(img_height, img_width)
|
||||||
|
)
|
||||||
|
img_array = tf.keras.utils.img_to_array(img)
|
||||||
|
img_array = tf.expand_dims(img_array, 0)
|
||||||
|
|
||||||
|
predictions = trash_classification_model.predict(img_array)
|
||||||
|
score = tf.nn.softmax(predictions[0])
|
||||||
|
|
||||||
|
name = class_names[np.argmax(score)]
|
||||||
|
|
||||||
|
file_path = "../trash-classification/trash/test/"+trash_type+"/"+filename+".jpg"
|
||||||
|
img_show = Image.open(file_path)
|
||||||
|
img_numpy_format = np.asarray(img_show)
|
||||||
|
plt.imshow(img_numpy_format)
|
||||||
|
plt.suptitle(filename)
|
||||||
|
plt.draw()
|
||||||
|
plt.pause(1)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
return [name, img_num]
|
67
src/tree.py
Normal file
67
src/tree.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import csv
|
||||||
|
import random
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
truck_fullness = [0, 1]
|
||||||
|
trash_types = ['paper', 'plastic', 'glass', 'mixed']
|
||||||
|
payment = [0, 1]
|
||||||
|
bin_fullness = [0, 1]
|
||||||
|
day = ['monday', 'wednesday', 'friday']
|
||||||
|
season = ['spring', 'summer', 'autumn', 'winter']
|
||||||
|
dump_fullness = [0, 1]
|
||||||
|
trash = [0, 1]
|
||||||
|
# spring: monday = plastic, wednesday = glass, friday = biological & paper
|
||||||
|
# summer: monday = glass, wednesday = biological & plastic, friday = paper
|
||||||
|
# autumn: monday = biological & plastic, wednesday = glass, friday = paper
|
||||||
|
# winter: monday = paper, wednesday = biological & plastic, friday = glass
|
||||||
|
|
||||||
|
with open('tree_data.csv', 'w', newline='') as csvfile:
|
||||||
|
writer = csv.writer(csvfile)
|
||||||
|
|
||||||
|
writer.writerow(
|
||||||
|
['dump_fullness', 'truck_fullness', 'trash', 'payment', 'bin_fullness', 'trash_types', 'season', 'day',
|
||||||
|
'decision'])
|
||||||
|
rows = set()
|
||||||
|
|
||||||
|
positives = [(0, 0, 1, 1, 1, 'glass', 'spring', 'wednesday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'glass', 'summer', 'monday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'glass', 'autumn', 'wednesday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'glass', 'winter', 'friday', 1),
|
||||||
|
|
||||||
|
(0, 0, 1, 1, 1, 'paper', 'spring', 'friday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'paper', 'summer', 'friday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'paper', 'autumn', 'friday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'paper', 'winter', 'monday', 1),
|
||||||
|
|
||||||
|
(0, 0, 1, 1, 1, 'plastic', 'spring', 'monday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'plastic', 'summer', 'wednesday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'plastic', 'autumn', 'monday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'plastic', 'winter', 'wednesday', 1),
|
||||||
|
|
||||||
|
(0, 0, 1, 1, 1, 'mixed', 'spring', 'friday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'mixed', 'summer', 'wednesday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'mixed', 'autumn', 'monday', 1),
|
||||||
|
(0, 0, 1, 1, 1, 'mixed', 'winter', 'wednesday', 1)]
|
||||||
|
|
||||||
|
for positive in positives:
|
||||||
|
rows.add(positive)
|
||||||
|
|
||||||
|
while len(rows) < 200:
|
||||||
|
rand_1 = random.choice(dump_fullness)
|
||||||
|
rand_2 = random.choice(truck_fullness)
|
||||||
|
rand_3 = random.choice(trash)
|
||||||
|
rand_4 = random.choice(payment)
|
||||||
|
rand_5 = random.choice(bin_fullness)
|
||||||
|
rand_6 = random.choice(trash_types)
|
||||||
|
rand_7 = random.choice(season)
|
||||||
|
rand_8 = random.choice(day)
|
||||||
|
|
||||||
|
rows.add((rand_1, rand_2, rand_3, rand_4, rand_5, rand_6, rand_7, rand_8, 0))
|
||||||
|
|
||||||
|
rows_tuple = tuple(rows)
|
||||||
|
|
||||||
|
for elem in rows_tuple:
|
||||||
|
writer.writerow(elem)
|
||||||
|
|
||||||
|
dt = pd.read_csv('tree_data.csv')
|
||||||
|
print(dt.head())
|
Loading…
Reference in New Issue
Block a user