class ManualDataWidget(tk.Frame): DISTRIBUTIONS = [] def __init__(self, master, initial_num_points=200, initial_dispersion=50): super().__init__(master) config_label = tk.Label(self, width=33, text="Manual", anchor="w") config_label.pack() self.distribution_dropdown = DropdownWidget(self, "Distribution", ["Uniform", "Gaussian"]) self.num_points_slider = SliderWidget(self, "Number of Points", min_val=1, max_val=500, initial_value=initial_num_points) self.dispersion_slider = SliderWidget(self, "Dispersion", min_val=1, max_val=200, initial_value=initial_dispersion) def get_distribution(self): return self.distribution_dropdown.get_value() def get_num_points(self): return self.num_points_slider.get_value() def get_dispersion(self): return self.dispersion_slider.get_value()
class MLPWidget(ClassifierWidget): CLASSIFIER_NAME = "Multi-Layer Perceptron" CLASSIFIER_FUNCTION = MLPClassifier def __init__(self, master, initial_num_hidden_layers=3, initial_num_neurons_layer=10): super().__init__(master, self.CLASSIFIER_NAME) self.num_hidden_layers_val_slider = SliderWidget(self, "Hidden layers", min_val=1, max_val=10, initial_value=initial_num_hidden_layers) self.num_neurons_layer_val_slider = SliderWidget(self, "Neurons/Layer", min_val=1, max_val=100, initial_value=initial_num_neurons_layer) def get_classifier(self): hidden_layer_sizes = tuple([self.num_neurons_layer_val_slider.get_value()]*self.num_neurons_layer_val_slider.get_value()) return self.CLASSIFIER_FUNCTION(hidden_layer_sizes=hidden_layer_sizes, max_iter=500)
class KNNWidget(ClassifierWidget): CLASSIFIER_NAME = "k-Nearest Neighbours" CLASSIFIER_FUNCTION = KNeighborsClassifier def __init__(self, master, k=3): super().__init__(master, self.CLASSIFIER_NAME) self.k_val_slider = SliderWidget(self, "k", min_val=1, max_val=32, initial_value=k) def get_classifier(self): return self.CLASSIFIER_FUNCTION( n_neighbors=self.k_val_slider.get_value())
class DecisionTreeWidget(ClassifierWidget): CLASSIFIER_NAME = "Decision Tree" CLASSIFIER_FUNCTION = DecisionTreeClassifier def __init__(self, master, max_depth=5): super().__init__(master, self.CLASSIFIER_NAME) self.max_depth_val_slider = SliderWidget(self, "Max tree depth", min_val=1, max_val=32, initial_value=max_depth) def get_classifier(self): return self.CLASSIFIER_FUNCTION( max_depth=self.max_depth_val_slider.get_value())
class ConfigWidget(tk.Frame): INITIAL_TT_RATIO = 70 def __init__(self, master): super().__init__(master, highlightbackground="gray", highlightthickness=1) self.master = master config_label = tk.Label(self, width=33, text="General", anchor="w") config_label.pack(side=tk.TOP) self.train_test_slider = SliderWidget( self, "Train/Test ratio", min_val=1, max_val=99, initial_value=self.INITIAL_TT_RATIO) def get_train_test_ratio(self): return self.train_test_slider.get_value()