LogisticRegression

- implemented LR
- changed classes tree
This commit is contained in:
2024-04-28 19:32:43 +02:00
parent ed0cfb3aa2
commit 969338196b
6 changed files with 124 additions and 68 deletions

View File

@@ -1,34 +1,48 @@
from learning.data import Dataset
from learning.supervised import LinearRegression
from learning.ml import MLRegression
from learning.supervised import LinearRegression, LogisticRegression, MultiLogisticRegression
from learning.ml import MLAlgorithm
from typing import Callable
def auto_mpg() -> tuple[int, MLRegression]:
df = Dataset("datasets\\auto-mpg.csv", "MPG")
def auto_mpg() -> tuple[int, MLAlgorithm]:
ds = Dataset("datasets\\auto-mpg.csv", "MPG")
df.to_numbers(["HP"])
df.handle_na()
df.regularize(excepts=["Cylinders","Year","Origin"])
return (1000, LinearRegression(df, learning_rate=0.0001))
ds.to_numbers(["HP"])
ds.handle_na()
ds.regularize(excepts=["Cylinders","Year","Origin"])
return (1000, LinearRegression(ds.as_ndarray(), learning_rate=0.0001))
def automobile() -> tuple[int, MLRegression]:
df = Dataset("datasets\\regression\\automobile.csv", "symboling")
def automobile() -> tuple[int, MLAlgorithm]:
ds = 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"]
df.factorize(attributes_to_modify)
df.to_numbers(["normalized-losses", "bore", "stroke", "horsepower", "peak-rpm", "price"])
df.handle_na()
df.regularize(excepts=attributes_to_modify)
return (1000, LinearRegression(df, learning_rate=0.004))
ds.factorize(attributes_to_modify)
ds.to_numbers(["normalized-losses", "bore", "stroke", "horsepower", "peak-rpm", "price"])
ds.handle_na()
ds.regularize(excepts=attributes_to_modify)
return (1000, LinearRegression(ds.as_ndarray(), learning_rate=0.004))
def power_plant() -> tuple[int, MLRegression]:
df = Dataset("datasets\\regression\\power-plant.csv", "energy-output")
df.regularize()
return (80, LinearRegression(df, learning_rate=0.1))
def power_plant() -> tuple[int, MLAlgorithm]:
ds = Dataset("datasets\\regression\\power-plant.csv", "energy-output")
ds.regularize()
return (80, LinearRegression(ds.as_ndarray(), learning_rate=0.1))
def electrical_grid() -> tuple[int, MLAlgorithm]:
ds = Dataset("datasets\\classification\\electrical_grid.csv", "stabf")
ds.factorize(["stabf"])
ds.regularize()
return (1000, LogisticRegression(ds.as_ndarray(), learning_rate=0.08))
def frogs() -> tuple[int, MLAlgorithm]:
ds = Dataset("datasets\\classification\\frogs.csv", "Species")
ds.remove(["Family", "Genus", "RecordID"])
ds.factorize(["Species"])
return (1000, MultiLogisticRegression(ds.as_ndarray(), learning_rate=0.08))
def learn_dataset(function:Callable[..., tuple[int, MLRegression]], epochs:int=100000, verbose=True)-> None:
def learn_dataset(function:Callable[..., tuple[int, MLAlgorithm]], epochs:int=10000, verbose=True)-> MLAlgorithm:
skip, ml = function()
ml.learn(epochs, verbose=verbose)
@@ -38,8 +52,8 @@ def learn_dataset(function:Callable[..., tuple[int, MLRegression]], epochs:int=1
print(f"Loss value: tests={err_tests:1.5f}, valid={err_valid:1.5f}, learn={err_learn:1.5f}")
ml.plot(skip=skip)
return ml
if __name__ == "__main__":
learn_dataset(automobile)
ml = learn_dataset(electrical_grid)
print(ml.accuracy(ml.testset))