Progress Bar

- added progress bar
- divided dataset into validation, test, learning
- added patience for learning
This commit is contained in:
2024-04-22 15:41:13 +02:00
parent b4bd976a9d
commit 1fb277bc70
3 changed files with 88 additions and 50 deletions

View File

@@ -1,16 +1,17 @@
from learning.data import Dataset
from learning.supervised import LinearRegression
from learning.ml import MLRegression
from typing import Callable
def auto_mpg() -> tuple[int, int, MLRegression]:
def auto_mpg() -> tuple[int, MLRegression]:
df = Dataset("datasets\\auto-mpg.csv", "MPG")
df.to_numbers(["HP"])
df.handle_na()
df.regularize(excepts=["Cylinders","Year","Origin"])
return (5000, 1000, LinearRegression(df, learning_rate=0.0001))
return (1000, LinearRegression(df, learning_rate=0.0001))
def automobile() -> tuple[int, int, MLRegression]:
def automobile() -> tuple[int, MLRegression]:
df = Dataset("datasets\\regression\\automobile.csv", "symboling")
attributes_to_modify = ["fuel-system", "engine-type", "drive-wheels", "body-style", "make", "engine-location", "aspiration", "fuel-type", "num-of-cylinders", "num-of-doors"]
@@ -18,23 +19,27 @@ def automobile() -> tuple[int, int, MLRegression]:
df.to_numbers(["normalized-losses", "bore", "stroke", "horsepower", "peak-rpm", "price"])
df.handle_na()
df.regularize(excepts=attributes_to_modify)
return (5000, 1000, LinearRegression(df, learning_rate=0.002))
return (1000, LinearRegression(df, learning_rate=0.004))
def power_plant() -> tuple[int, int, MLRegression]:
def power_plant() -> tuple[int, MLRegression]:
df = Dataset("datasets\\regression\\power-plant.csv", "energy-output")
df.regularize()
return (1000, 80, LinearRegression(df, learning_rate=0.1))
return (80, LinearRegression(df, learning_rate=0.1))
epoch, skip, ml = automobile()
ml.learn(epoch)
ml.plot(skip=skip)
"""
for _ in range(0, epoch):
train_err = lr.learning_step()
test_err = lr.test_error()
plot.update("training", train_err)
plot.update("test", test_err)
plot.update_limits()
"""
def learn_dataset(function:Callable[..., tuple[int, MLRegression]], epochs:int=100000, verbose=True)-> None:
skip, ml = function()
ml.learn(epochs, verbose=verbose)
err_tests = ml.test_loss()
err_valid = ml.validation_loss()
err_learn = ml.learning_loss()
print(f"Loss value: tests={err_tests:1.5f}, valid={err_valid:1.5f}, learn={err_learn:1.5f}")
ml.plot(skip=skip)
if __name__ == "__main__":
learn_dataset(auto_mpg)