Jensen-holm commited on
Commit
03176c2
·
1 Parent(s): 9e506b7

adding accuracy score metric

Browse files
Files changed (5) hide show
  1. example/main.py +18 -6
  2. example/mushrooms.csv +0 -0
  3. example/test.py +0 -0
  4. nn/nn.py +2 -8
  5. nn/train.py +15 -2
example/main.py CHANGED
@@ -1,17 +1,29 @@
1
  import requests
2
 
3
- with open("iris.csv", "rb") as csv:
4
- iris_data = csv.read()
 
 
5
 
6
  ARGS = {
7
- "epochs": 10000,
8
  "hidden_size": 8,
9
  "learning_rate": 0.0001,
10
  "test_size": 0.1,
11
  "activation": "relu",
12
- "features": ["sepal width", "sepal length", "petal width", "petal length"],
13
- "target": "species",
14
- "data": iris_data.decode("utf-8"),
 
 
 
 
 
 
 
 
 
 
15
  }
16
 
17
  if __name__ == "__main__":
 
1
  import requests
2
 
3
+ with open("mushrooms.csv", "rb") as csv:
4
+ data = csv.read()
5
+
6
+ # class,cap-shape,cap-surface,cap-color,bruises,odor,gill-attachment,gill-spacing,gill-size,gill-color,stalk-shape,stalk-root,stalk-surface-above-ring,stalk-surface-below-ring,stalk-color-above-ring,stalk-color-below-ring,veil-type,veil-color,ring-number,ring-type,spore-print-color,population,habitat
7
 
8
  ARGS = {
9
+ "epochs": 1_000,
10
  "hidden_size": 8,
11
  "learning_rate": 0.0001,
12
  "test_size": 0.1,
13
  "activation": "relu",
14
+ "features": [
15
+ "cap-shape",
16
+ "cap-surface",
17
+ "cap-color",
18
+ "bruises",
19
+ "odor",
20
+ "gill-attachment",
21
+ "gill-spacing",
22
+ "gill-size",
23
+ "gill-color",
24
+ ],
25
+ "target": "class",
26
+ "data": data.decode("utf-8"),
27
  }
28
 
29
  if __name__ == "__main__":
example/mushrooms.csv ADDED
The diff for this file is too large to render. See raw diff
 
example/test.py DELETED
File without changes
nn/nn.py CHANGED
@@ -26,7 +26,6 @@ class NN:
26
  self.loss_hist: list[float] = None
27
  self.func_prime: Callable = None
28
  self.func: Callable = None
29
- self.df: pd.DataFrame = None
30
  self.X: pd.DataFrame = None
31
  self.y: pd.DataFrame = None
32
  self.y_dummy: pd.DataFrame = None
@@ -34,16 +33,11 @@ class NN:
34
  self.output_size: int = None
35
 
36
  def set_df(self, df: pd.DataFrame) -> None:
37
-
38
- # issue right now here because we need a way to convert
39
- # back and forth from dummies and non dummy vars
40
-
41
  assert isinstance(df, pd.DataFrame)
42
- self.df = df
43
- self.y = df[self.target]
44
  x = df[self.features]
45
- self.y_dummy = pd.get_dummies(self.y, columns=self.target)
46
  self.X = pd.get_dummies(x, columns=self.features)
 
47
  self.input_size = len(self.X.columns)
48
  self.output_size = len(self.y_dummy.columns)
49
 
 
26
  self.loss_hist: list[float] = None
27
  self.func_prime: Callable = None
28
  self.func: Callable = None
 
29
  self.X: pd.DataFrame = None
30
  self.y: pd.DataFrame = None
31
  self.y_dummy: pd.DataFrame = None
 
33
  self.output_size: int = None
34
 
35
  def set_df(self, df: pd.DataFrame) -> None:
 
 
 
 
36
  assert isinstance(df, pd.DataFrame)
 
 
37
  x = df[self.features]
38
+ y = df[self.target]
39
  self.X = pd.get_dummies(x, columns=self.features)
40
+ self.y_dummy = pd.get_dummies(y, columns=self.target)
41
  self.input_size = len(self.X.columns)
42
  self.output_size = len(self.y_dummy.columns)
43
 
nn/train.py CHANGED
@@ -1,5 +1,5 @@
1
  from sklearn.model_selection import train_test_split
2
- from sklearn.metrics import log_loss, accuracy_score, f1_score
3
  from typing import Callable
4
  from nn.nn import NN
5
  import numpy as np
@@ -81,7 +81,8 @@ def train(nn: NN) -> dict:
81
  )
82
 
83
  return {
84
- "log loss": log_loss(y_true=y_test, y_pred=y_hat)
 
85
  }
86
 
87
 
@@ -107,3 +108,15 @@ def hidden_weight_prime(data, error):
107
 
108
  def output_weight_prime(hidden_output, error):
109
  return np.dot(hidden_output.T, error)
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from sklearn.model_selection import train_test_split
2
+ from sklearn.metrics import log_loss
3
  from typing import Callable
4
  from nn.nn import NN
5
  import numpy as np
 
81
  )
82
 
83
  return {
84
+ "log loss": log_loss(y_true=y_test, y_pred=y_hat),
85
+ "accuracy": accuracy_score(y_true=y_test, y_pred=y_hat)
86
  }
87
 
88
 
 
108
 
109
  def output_weight_prime(hidden_output, error):
110
  return np.dot(hidden_output.T, error)
111
+
112
+
113
+ def accuracy_score(y_true, y_pred):
114
+ # Ensure y_true and y_pred have the same shape
115
+ if y_true.shape != y_pred.shape:
116
+ raise ValueError("Input shapes do not match.")
117
+
118
+ # Calculate the accuracy
119
+ num_samples = len(y_true)
120
+ num_correct = np.sum(y_true == y_pred)
121
+
122
+ return num_correct / num_samples