From: Jérôme Benoit Date: Wed, 14 Nov 2018 12:45:35 +0000 (+0100) Subject: Fix TP3 exo2. X-Git-Url: https://git.piment-noir.org/?p=TP_AA.git;a=commitdiff_plain;h=5d8acd865d25e611bf3cbee51d563e509ab3e93d Fix TP3 exo2. Signed-off-by: Jérôme Benoit --- diff --git a/TP3/exo1/tp3_exo1.py b/TP3/exo1/tp3_exo1.py index 02416ba..9efcb98 100755 --- a/TP3/exo1/tp3_exo1.py +++ b/TP3/exo1/tp3_exo1.py @@ -52,10 +52,10 @@ def perceptron_nobias(X, Y): classification_error = 1 while not classification_error == 0: classification_error = 0 - for i in range(X.shape[0]): - if Y[i] * np.dot(w, X[i]) <= 0: + for x, y in zip(X, Y): + if y * np.dot(w, x) <= 0: classification_error += 1 - w = w + Y[i] * X[i] + w = w + y * x return w diff --git a/TP3/exo2/tp3_exo2.py b/TP3/exo2/tp3_exo2.py index 4ca092d..6317987 100755 --- a/TP3/exo2/tp3_exo2.py +++ b/TP3/exo2/tp3_exo2.py @@ -74,10 +74,10 @@ def perceptron_nobias(X, Y): classification_error = 1 while not classification_error == 0: classification_error = 0 - for i in range(X.shape[0]): - if Y[i] * np.dot(w, X[i]) <= 0: + for x, y in zip(X, Y): + if y * np.dot(w, x) <= 0: classification_error += 1 - w = w + Y[i] * X[i] + w = w + y * x return w @@ -102,7 +102,7 @@ def apply_plongement(sample, p): def f_from_k(coeffs, support_set, k, x): output = 0 for c, s in zip(coeffs, support_set): - output += c * s[0] * k(s[1], x) + output += c * s[1] * k(s[0], x) return output @@ -117,19 +117,21 @@ def kg(x, y, sigma=10): def perceptron_k(X, Y, k): coeffs = [] - support_set = np.array([]) + support_set = [] # Go in the loop at least one time classification_error = 1 while not classification_error == 0: classification_error = 0 - for i in range(X.shape[0]): - if Y[i] * f_from_k(coeffs, support_set, k, X[i]) <= 0: + for x, y in zip(X, Y): + if y * f_from_k(coeffs, support_set, k, x) <= 0: + if x not in support_set: + support_set.append((x, y)) + coeffs.append(1) + else: + coeffs[support_set.index((x, y))] += 1 classification_error += 1 - np.append(support_set, X[i]) - coeffs.append(1) - else: - coeffs[len(coeffs) - 1] = coeffs[len(coeffs) - 1] + 1 - return np.array(coeffs), support_set + print(classification_error) + return np.array(coeffs), np.array(support_set) def f(w, x, y): @@ -139,17 +141,19 @@ def f(w, x, y): pl.scatter(X[:, 0], X[:, 1], c=Y, s=training_set_size) pl.title(u"Perceptron - hyperplan") -# coeffs, support_set = perceptron_k(X, Y, k1) +coeffs, support_set = perceptron_k(X, Y, k1) # coeffs, support_set = perceptron_k(X, Y, kg) res = training_set_size -# for c, X in zip(coeffs, support_set): -# pl.plot(X[0], 'xr') - -X = apply_plongement(X, plongement_phi) -w = perceptron_nobias(X, Y) for x in range(res): for y in range(res): - if abs(f(w, -3 / 2 + 3 * x / res, -3 / 2 + 3 * y / res)) < 0.01: - pl.plot(-3 / 2 + 3 * x / res, -3 / 2 + 3 * y / res, 'xb') + if abs(f_from_k(coeffs, support_set, k1, [-3 / 2 + 3 * x / res, -3 / 2 + 3 * y / res])) < 0.01: + pl.plot(-3 / 2 + 3 * x / res, -3 / 2 + 3 * y / res, 'xr') + +# X = apply_plongement(X, plongement_phi) +# w = perceptron_nobias(X, Y) +# for x in range(res): +# for y in range(res): +# if abs(f(w, -3 / 2 + 3 * x / res, -3 / 2 + 3 * y / res)) < 0.01: +# pl.plot(-3 / 2 + 3 * x / res, -3 / 2 + 3 * y / res, 'xb') pl.show()