def generateData3(n):
"""
- Generates a 2D linearly separable dataset with 2n samples.
+ Generates a 2D linearly separable dataset with about 2n samples.
The third element of the sample is the label
"""
# (xb, yb) est dans le carré centré à l’origine de côté 1
training_set_size = 150
-training_set = generateData2(training_set_size)
+training_set = generateData3(training_set_size)
data = np.array(training_set)
X = data[:, 0:2]
Y = data[:, -1]
return np.array(new_sample)
-def plongement(sample_element):
+def plongement_phi(sample_element):
return [1, sample_element[0], sample_element[1], sample_element[0] * sample_element[0], sample_element[0] * sample_element[1], sample_element[1] * sample_element[1]]
-def apply_plongement(sample):
+def apply_plongement(sample, p):
output = []
for i in range(sample.shape[0]):
- current = plongement(sample[i])
+ current = p(sample[i])
output.append(current)
return np.array(output)
def k1(X1, X2):
- return 1 + X1[0] * X2[0] + X1[1] * X2[1] + X1[0] * X1[0] * X2[0] * X2[0] + X1[0] * X1[1] * X2[0] * X1[1] + X1[1] * X2[1] * X2[1]
+ return 1 + X1[0] * X2[0] + X1[1] * X2[1] + X1[0] * X1[0] * X2[0] * X2[0] + X1[0] * X1[1] * X2[0] * X2[1] + X1[1] * X1[1] * X2[1] * X2[1]
+
+
+def kg(x, y, sigma=10):
+ return np.exp(-((x[0] - y[0])**2 + (x[1] - y[1])**2) / sigma**2)
def perceptron_k(X, Y, k):
print(perceptron_k(X, Y, k1))
+# print(perceptron_k(X, Y, kg))
-X = apply_plongement(X)
+X = apply_plongement(X, plongement_phi)
w = perceptron_nobias(X, Y)
print(w)