Skip to content

Commit a3da27d

Browse files
committed
Update Algorithms
1 parent b1d1417 commit a3da27d

File tree

20 files changed

+757
-756
lines changed

20 files changed

+757
-756
lines changed

Util/Util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def gen_xor(size=100, scale=1, one_hot=True):
149149
return np.c_[x, y].astype(np.float32), np.argmax(z, axis=1)
150150

151151
@staticmethod
152-
def gen_spin(size=50, n=7, n_class=7, scale=4, one_hot=True):
152+
def gen_spiral(size=50, n=7, n_class=7, scale=4, one_hot=True):
153153
xs = np.zeros((size * n, 2), dtype=np.float32)
154154
ys = np.zeros(size * n, dtype=np.int8)
155155
for i in range(n):

Zhihu/NN/_extra/one/Test.py

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1-
from Util.Util import DataUtil
2-
from Zhihu.NN._extra.one.Networks import *
3-
4-
np.random.seed(142857) # for reproducibility
5-
6-
7-
def main():
8-
9-
nn = NNDist()
10-
epoch = 1000
11-
12-
timing = Timing(enabled=True)
13-
timing_level = 1
14-
nn.feed_timing(timing)
15-
16-
x, y = DataUtil.gen_spin(100)
17-
18-
nn.add(ReLU((x.shape[1], 24)))
19-
nn.add(ReLU((24,)))
20-
nn.add(Softmax((y.shape[1],)))
21-
22-
nn.fit(x, y, epoch=epoch)
23-
nn.visualize_2d(x, y)
24-
nn.evaluate(x, y)
25-
26-
timing.show_timing_log(timing_level)
27-
28-
if __name__ == '__main__':
29-
main()
1+
from Util.Util import DataUtil
2+
from Zhihu.NN._extra.one.Networks import *
3+
4+
np.random.seed(142857) # for reproducibility
5+
6+
7+
def main():
8+
9+
nn = NNDist()
10+
epoch = 1000
11+
12+
timing = Timing(enabled=True)
13+
timing_level = 1
14+
nn.feed_timing(timing)
15+
16+
x, y = DataUtil.gen_spiral(100)
17+
18+
nn.add(ReLU((x.shape[1], 24)))
19+
nn.add(ReLU((24,)))
20+
nn.add(Softmax((y.shape[1],)))
21+
22+
nn.fit(x, y, epoch=epoch)
23+
nn.visualize_2d(x, y)
24+
nn.evaluate(x, y)
25+
26+
timing.show_timing_log(timing_level)
27+
28+
if __name__ == '__main__':
29+
main()

Zhihu/NN/_extra/two/Test.py

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
1-
from Zhihu.NN._extra.two.Networks import *
2-
3-
from Util.Util import DataUtil
4-
5-
np.random.seed(142857) # for reproducibility
6-
7-
8-
def main():
9-
10-
nn = NNDist()
11-
epoch = 1000
12-
13-
timing = Timing(enabled=True)
14-
timing_level = 1
15-
nn.feed_timing(timing)
16-
17-
x, y = DataUtil.gen_spin(100)
18-
19-
nn.add(ReLU((x.shape[1], 24)))
20-
nn.add(ReLU((24,)))
21-
nn.add(Softmax((y.shape[1],)))
22-
23-
nn.fit(x, y, epoch=epoch, verbose=2, metrics=["acc", "f1_score"], train_rate=0.8)
24-
nn.draw_logs()
25-
nn.visualize_2d(x, y)
26-
27-
timing.show_timing_log(timing_level)
28-
29-
if __name__ == '__main__':
30-
main()
1+
from Zhihu.NN._extra.two.Networks import *
2+
3+
from Util.Util import DataUtil
4+
5+
np.random.seed(142857) # for reproducibility
6+
7+
8+
def main():
9+
10+
nn = NNDist()
11+
epoch = 1000
12+
13+
timing = Timing(enabled=True)
14+
timing_level = 1
15+
nn.feed_timing(timing)
16+
17+
x, y = DataUtil.gen_spiral(100)
18+
19+
nn.add(ReLU((x.shape[1], 24)))
20+
nn.add(ReLU((24,)))
21+
nn.add(Softmax((y.shape[1],)))
22+
23+
nn.fit(x, y, epoch=epoch, verbose=2, metrics=["acc", "f1_score"], train_rate=0.8)
24+
nn.draw_logs()
25+
nn.visualize_2d(x, y)
26+
27+
timing.show_timing_log(timing_level)
28+
29+
if __name__ == '__main__':
30+
main()

Zhihu/NN/two/Test.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
from Zhihu.NN.two.Network import *
2-
from Zhihu.NN.Layers import *
3-
4-
from Util.Util import DataUtil
5-
6-
np.random.seed(142857) # for reproducibility
7-
8-
9-
def main():
10-
11-
nn = NNDist()
12-
epoch = 1000
13-
14-
x, y = DataUtil.gen_spin(100)
15-
16-
nn.add(ReLU((x.shape[1], 24)))
17-
nn.add(ReLU((24,)))
18-
nn.add(CrossEntropy((y.shape[1],)))
19-
20-
nn.fit(x, y, epoch=epoch, verbose=2, metrics=["acc", "f1_score"], train_rate=0.8)
21-
nn.draw_logs()
22-
nn.visualize_2d(x, y)
23-
24-
if __name__ == '__main__':
25-
main()
1+
from Zhihu.NN.two.Network import *
2+
from Zhihu.NN.Layers import *
3+
4+
from Util.Util import DataUtil
5+
6+
np.random.seed(142857) # for reproducibility
7+
8+
9+
def main():
10+
11+
nn = NNDist()
12+
epoch = 1000
13+
14+
x, y = DataUtil.gen_spiral(100)
15+
16+
nn.add(ReLU((x.shape[1], 24)))
17+
nn.add(ReLU((24,)))
18+
nn.add(CrossEntropy((y.shape[1],)))
19+
20+
nn.fit(x, y, epoch=epoch, verbose=2, metrics=["acc", "f1_score"], train_rate=0.8)
21+
nn.draw_logs()
22+
nn.visualize_2d(x, y)
23+
24+
if __name__ == '__main__':
25+
main()

b_NaiveBayes/Original/Basic.py

Lines changed: 90 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,90 @@
1-
import numpy as np
2-
from math import pi, exp
3-
4-
from Util.Timing import Timing
5-
from Util.Bases import ClassifierBase
6-
7-
sqrt_pi = (2 * pi) ** 0.5
8-
9-
10-
class NBFunctions:
11-
@staticmethod
12-
def gaussian(x, mu, sigma):
13-
return exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (sqrt_pi * sigma)
14-
15-
@staticmethod
16-
def gaussian_maximum_likelihood(labelled_x, n_category, dim):
17-
18-
mu = [np.sum(
19-
labelled_x[c][dim]) / len(labelled_x[c][dim]) for c in range(n_category)]
20-
sigma = [np.sum(
21-
(labelled_x[c][dim] - mu[c]) ** 2) / len(labelled_x[c][dim]) for c in range(n_category)]
22-
23-
def func(_c):
24-
def sub(_x):
25-
return NBFunctions.gaussian(_x, mu[_c], sigma[_c])
26-
return sub
27-
28-
return [func(_c=c) for c in range(n_category)]
29-
30-
31-
class NaiveBayes(ClassifierBase):
32-
NaiveBayesTiming = Timing()
33-
34-
def __init__(self, **kwargs):
35-
super(NaiveBayes, self).__init__(**kwargs)
36-
self._x = self._y = None
37-
self._data = self._func = None
38-
self._n_possibilities = None
39-
self._labelled_x = self._label_zip = None
40-
self._cat_counter = self._con_counter = None
41-
self.label_dic = self._feat_dics = None
42-
43-
self._params["lb"] = kwargs.get("lb", 1)
44-
45-
def feed_data(self, x, y, sample_weight=None):
46-
pass
47-
48-
def feed_sample_weight(self, sample_weight=None):
49-
pass
50-
51-
@NaiveBayesTiming.timeit(level=2, prefix="[API] ")
52-
def get_prior_probability(self, lb=1):
53-
return [(_c_num + lb) / (len(self._y) + lb * len(self._cat_counter))
54-
for _c_num in self._cat_counter]
55-
56-
@NaiveBayesTiming.timeit(level=2, prefix="[API] ")
57-
def fit(self, x=None, y=None, sample_weight=None, lb=None):
58-
if sample_weight is None:
59-
sample_weight = self._params["sw"]
60-
if lb is None:
61-
lb = self._params["lb"]
62-
if x is not None and y is not None:
63-
self.feed_data(x, y, sample_weight)
64-
self._func = self._fit(lb)
65-
66-
def _fit(self, lb):
67-
pass
68-
69-
@NaiveBayesTiming.timeit(level=1, prefix="[API] ")
70-
def predict_one(self, x, get_raw_result=False):
71-
if type(x) is np.ndarray:
72-
x = x.tolist()
73-
else:
74-
x = x[:]
75-
x = self._transfer_x(x)
76-
m_arg, m_probability = 0, 0
77-
for i in range(len(self._cat_counter)):
78-
p = self._func(x, i)
79-
if p > m_probability:
80-
m_arg, m_probability = i, p
81-
if not get_raw_result:
82-
return self.label_dic[m_arg]
83-
return m_probability
84-
85-
@NaiveBayesTiming.timeit(level=3, prefix="[API] ")
86-
def predict(self, x, get_raw_result=False):
87-
return np.array([self.predict_one(xx, get_raw_result) for xx in x])
88-
89-
def _transfer_x(self, x):
90-
return x
1+
import numpy as np
2+
from math import pi, exp
3+
4+
from Util.Timing import Timing
5+
from Util.Bases import ClassifierBase
6+
7+
sqrt_pi = (2 * pi) ** 0.5
8+
9+
10+
class NBFunctions:
11+
@staticmethod
12+
def gaussian(x, mu, sigma):
13+
return exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (sqrt_pi * sigma)
14+
15+
@staticmethod
16+
def gaussian_maximum_likelihood(labelled_x, n_category, dim):
17+
18+
mu = [np.sum(
19+
labelled_x[c][dim]) / len(labelled_x[c][dim]) for c in range(n_category)]
20+
sigma = [np.sum(
21+
(labelled_x[c][dim] - mu[c]) ** 2) / len(labelled_x[c][dim]) for c in range(n_category)]
22+
23+
def func(_c):
24+
def sub(x):
25+
return NBFunctions.gaussian(x, mu[_c], sigma[_c])
26+
return sub
27+
28+
return [func(_c=c) for c in range(n_category)]
29+
30+
31+
class NaiveBayes(ClassifierBase):
32+
NaiveBayesTiming = Timing()
33+
34+
def __init__(self, **kwargs):
35+
super(NaiveBayes, self).__init__(**kwargs)
36+
self._x = self._y = None
37+
self._data = self._func = None
38+
self._n_possibilities = None
39+
self._labelled_x = self._label_zip = None
40+
self._cat_counter = self._con_counter = None
41+
self.label_dic = self._feat_dics = None
42+
43+
self._params["lb"] = kwargs.get("lb", 1)
44+
45+
def feed_data(self, x, y, sample_weight=None):
46+
pass
47+
48+
def feed_sample_weight(self, sample_weight=None):
49+
pass
50+
51+
@NaiveBayesTiming.timeit(level=2, prefix="[API] ")
52+
def get_prior_probability(self, lb=1):
53+
return [(c_num + lb) / (len(self._y) + lb * len(self._cat_counter))
54+
for c_num in self._cat_counter]
55+
56+
@NaiveBayesTiming.timeit(level=2, prefix="[API] ")
57+
def fit(self, x=None, y=None, sample_weight=None, lb=None):
58+
if sample_weight is None:
59+
sample_weight = self._params["sw"]
60+
if lb is None:
61+
lb = self._params["lb"]
62+
if x is not None and y is not None:
63+
self.feed_data(x, y, sample_weight)
64+
self._func = self._fit(lb)
65+
66+
def _fit(self, lb):
67+
pass
68+
69+
@NaiveBayesTiming.timeit(level=1, prefix="[API] ")
70+
def predict_one(self, x, get_raw_result=False):
71+
if type(x) is np.ndarray:
72+
x = x.tolist()
73+
else:
74+
x = x[:]
75+
x = self._transfer_x(x)
76+
m_arg, m_probability = 0, 0
77+
for i in range(len(self._cat_counter)):
78+
p = self._func(x, i)
79+
if p > m_probability:
80+
m_arg, m_probability = i, p
81+
if not get_raw_result:
82+
return self.label_dic[m_arg]
83+
return m_probability
84+
85+
@NaiveBayesTiming.timeit(level=3, prefix="[API] ")
86+
def predict(self, x, get_raw_result=False):
87+
return np.array([self.predict_one(xx, get_raw_result) for xx in x])
88+
89+
def _transfer_x(self, x):
90+
return x

b_NaiveBayes/Original/GaussianNB.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def feed_data(self, x, y, sample_weight=None):
2323

2424
self._x, self._y = x.T, y
2525
self._labelled_x, self._label_zip = labelled_x, labels
26-
self._cat_counter, self.label_dic = cat_counter, {i: _l for _l, i in label_dic.items()}
26+
self._cat_counter, self.label_dic = cat_counter, {i: l for l, i in label_dic.items()}
2727
self.feed_sample_weight(sample_weight)
2828

2929
@GaussianNBTiming.timeit(level=1, prefix="[Core] ")
@@ -52,7 +52,7 @@ def func(input_x, tar_category):
5252

5353
def visualize(self, save=False):
5454
colors = plt.cm.Paired([i / len(self.label_dic) for i in range(len(self.label_dic))])
55-
colors = {_cat: _color for _cat, _color in zip(self.label_dic.values(), colors)}
55+
colors = {cat: color for cat, color in zip(self.label_dic.values(), colors)}
5656
for j in range(len(self._x)):
5757
tmp_data = self._x[j]
5858
x_min, x_max = np.min(tmp_data), np.max(tmp_data)

0 commit comments

Comments
 (0)