From 017b50f76aa71c2772548dd7b0275f03ff9cc073 Mon Sep 17 00:00:00 2001 From: Francisco Matias Date: Sun, 27 Aug 2017 02:17:10 -0300 Subject: [PATCH 1/4] Perceptron - Neural Network --- Neural_Network/perceptron.py | 125 +++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 Neural_Network/perceptron.py diff --git a/Neural_Network/perceptron.py b/Neural_Network/perceptron.py new file mode 100644 index 000000000..bbd16a808 --- /dev/null +++ b/Neural_Network/perceptron.py @@ -0,0 +1,125 @@ +''' + + Perceptron + w = w + N * (d(k) - y) * x(k) + + Using perceptron network for oil analysis, + with Measuring of 3 parameters that represent chemical characteristics we can classify the oil, in p1 or p2 + p1 = -1 + p2 = 1 + +''' + +import random + + +class Perceptron: + def __init__(self, sample, exit, learn_rate=0.01, epoch_number=1000, bias=-1): + self.sample = sample + self.exit = exit + self.learn_rate = learn_rate + self.epoch_number = epoch_number + self.bias = bias + self.number_sample = len(sample) + self.col_sample = len(sample[0]) + self.weight = [] + + def trannig(self): + for sample in self.sample: + sample.insert(0, self.bias) + + for i in range(self.col_sample): + self.weight.append(random.random()) + + self.weight.insert(0, self.bias) + + epoch_count = 0 + + while True: + erro = False + for i in range(self.number_sample): + u = 0 + for j in range(self.col_sample + 1): + u = u + self.weight[j] * self.sample[i][j] + y = self.sign(u) + if y != self.exit[i]: + + for j in range(self.col_sample + 1): + + self.weight[j] = self.weight[j] + self.learn_rate * (self.exit[i] - y) * self.sample[i][j] + erro = True + #print('Epoch: \n',epoch_count) + epoch_count = epoch_count + 1 + # if you want controle the epoch or just by erro + if erro == False: + #if epoch_count > self.epoch_number or not erro: + break + + def sort(self, sample): + sample.insert(0, self.bias) + u = 0 + for i in range(self.col_sample + 1): + u = u + self.weight[i] * sample[i] + + y = self.sign(u) + + if y == -1: + print('Sample: ', sample) + print('classification: P1') + else: + print('Sample: ', sample) + print('classification: P2') + + def sign(self, u): + return 1 if u >= 0 else -1 + + +samples = [ + [-0.6508, 0.1097, 4.0009], + [-1.4492, 0.8896, 4.4005], + [2.0850, 0.6876, 12.0710], + [0.2626, 1.1476, 7.7985], + [0.6418, 1.0234, 7.0427], + [0.2569, 0.6730, 8.3265], + [1.1155, 0.6043, 7.4446], + [0.0914, 0.3399, 7.0677], + [0.0121, 0.5256, 4.6316], + [-0.0429, 0.4660, 5.4323], + [0.4340, 0.6870, 8.2287], + [0.2735, 1.0287, 7.1934], + [0.4839, 0.4851, 7.4850], + [0.4089, -0.1267, 5.5019], + [1.4391, 0.1614, 8.5843], + [-0.9115, -0.1973, 2.1962], + [0.3654, 1.0475, 7.4858], + [0.2144, 0.7515, 7.1699], + [0.2013, 1.0014, 6.5489], + [0.6483, 0.2183, 5.8991], + [-0.1147, 0.2242, 7.2435], + [-0.7970, 0.8795, 3.8762], + [-1.0625, 0.6366, 2.4707], + [0.5307, 0.1285, 5.6883], + [-1.2200, 0.7777, 1.7252], + [0.3957, 0.1076, 5.6623], + [-0.1013, 0.5989, 7.1812], + [2.4482, 0.9455, 11.2095], + [2.0149, 0.6192, 10.9263], + [0.2012, 0.2611, 5.4631] +] + +exit = [-1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1] + +network = Perceptron(sample=samples, exit = exit, learn_rate=0.01, epoch_number=1000, bias=-1) + +network.trannig() + +while True: + i = 0 + sample = [] + while i < 3: + value = input('value: ') + value = float(value) + sample.insert(i, value) + i = i + 1 + + network.sort(sample) \ No newline at end of file From 419b7bba0d3ab2a61f14937a29d3c1eecc078351 Mon Sep 17 00:00:00 2001 From: Francisco Matias Date: Sun, 27 Aug 2017 08:20:28 -0300 Subject: [PATCH 2/4] Perceptron - Neural Network --- Graphs/Breadth_First_Search.py | 2 +- Graphs/Graph_list.py | 9 ++++++--- Graphs/Graph_matrix.py | 11 +++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Graphs/Breadth_First_Search.py b/Graphs/Breadth_First_Search.py index f3d9fd778..39c158a1d 100644 --- a/Graphs/Breadth_First_Search.py +++ b/Graphs/Breadth_First_Search.py @@ -42,4 +42,4 @@ g.add_edge(3,7) g.add_edge(4,8) g.add_edge(5,9) g.add_edge(6,10) -g.bfs(1) +g.bfs(4) diff --git a/Graphs/Graph_list.py b/Graphs/Graph_list.py index cb380bb31..fe795cc80 100644 --- a/Graphs/Graph_list.py +++ b/Graphs/Graph_list.py @@ -15,13 +15,16 @@ class Graph: -g = Graph(5) +g = Graph(100) -g.add_edge(1,3) +'''g.add_edge(1,3) g.add_edge(2,3) g.add_edge(3,4) g.add_edge(3,5) -g.add_edge(4,5) +g.add_edge(4,5)''' +for i in range(100): + for j in range(100): + g.add_edge(i,j) g.show() diff --git a/Graphs/Graph_matrix.py b/Graphs/Graph_matrix.py index 0141d2be8..e62df3d0c 100644 --- a/Graphs/Graph_matrix.py +++ b/Graphs/Graph_matrix.py @@ -18,13 +18,12 @@ class Graph: -g = Graph(5) +g = Graph(100) + +for i in range(100): + for j in range(100): + g.add_edge(i,j) -g.add_edge(1,3) -g.add_edge(2,3) -g.add_edge(3,4) -g.add_edge(3,5) -g.add_edge(4,5) g.show() From 4481f2848408f30edf25d5ab8a7692dbe9b5c30c Mon Sep 17 00:00:00 2001 From: Francisco Matias Date: Mon, 28 Aug 2017 10:25:52 -0300 Subject: [PATCH 3/4] -- --- Graphs/Graph_list.py | 8 +++----- Graphs/Graph_matrix.py | 10 +++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Graphs/Graph_list.py b/Graphs/Graph_list.py index fe795cc80..8e33cf55c 100644 --- a/Graphs/Graph_list.py +++ b/Graphs/Graph_list.py @@ -17,14 +17,12 @@ class Graph: g = Graph(100) -'''g.add_edge(1,3) +g.add_edge(1,3) g.add_edge(2,3) g.add_edge(3,4) g.add_edge(3,5) -g.add_edge(4,5)''' -for i in range(100): - for j in range(100): - g.add_edge(i,j) +g.add_edge(4,5) + g.show() diff --git a/Graphs/Graph_matrix.py b/Graphs/Graph_matrix.py index e62df3d0c..1998fec8d 100644 --- a/Graphs/Graph_matrix.py +++ b/Graphs/Graph_matrix.py @@ -20,10 +20,10 @@ class Graph: g = Graph(100) -for i in range(100): - for j in range(100): - g.add_edge(i,j) - - +g.add_edge(1,4) +g.add_edge(4,2) +g.add_edge(4,5) +g.add_edge(2,5) +g.add_edge(5,3) g.show() From 1bc3a17d5e3de8de4a3e765e38ac998ee1004da9 Mon Sep 17 00:00:00 2001 From: Francisco Matias Date: Mon, 28 Aug 2017 14:30:11 -0300 Subject: [PATCH 4/4] Improve --- Neural_Network/perceptron.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Neural_Network/perceptron.py b/Neural_Network/perceptron.py index bbd16a808..0cd89df16 100644 --- a/Neural_Network/perceptron.py +++ b/Neural_Network/perceptron.py @@ -52,6 +52,8 @@ class Perceptron: epoch_count = epoch_count + 1 # if you want controle the epoch or just by erro if erro == False: + print('\nEpoch:\n',epoch_count) + print('------------------------\n') #if epoch_count > self.epoch_number or not erro: break @@ -105,6 +107,7 @@ samples = [ [2.4482, 0.9455, 11.2095], [2.0149, 0.6192, 10.9263], [0.2012, 0.2611, 5.4631] + ] exit = [-1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1] @@ -114,12 +117,7 @@ network = Perceptron(sample=samples, exit = exit, learn_rate=0.01, epoch_number= network.trannig() while True: - i = 0 sample = [] - while i < 3: - value = input('value: ') - value = float(value) - sample.insert(i, value) - i = i + 1 - + for i in range(3): + sample.insert(i, float(input('value: '))) network.sort(sample) \ No newline at end of file