Raymond / linear-classifier.py
ewdlop's picture
Upload 6 files (#1)
7a1d574 verified
def linear_classifier(c1,c2, iteration, threshold):
w = [1, 0, 0]
total = len(c1) + len(c2)
correct = 0
step = 0.6
iteration = 0
while(correct < total):
iteration += 1
if(iteration >= threshold):
print("The dataset might be not linear separable")
break
for x in c1:
wx = 0
i = 0
j = 0
for xi in x:
if(i < len(w)):
wx += xi * w[i]
i += 1
if (wx <= 0):
for wj in w:
if(j < len(w)):
w[j] += step * x[j]
j+=1
correct = 1
else:
correct += 1
if(correct >= total):
pass
for x in c2:
wx = 0
i = 0
j = 0
for xi in x:
if(i < len(w)):
wx += xi * w[i]
i += 1
if (wx > 0):
for wj in w:
if(j < len(w)):
w[j] -= step * x[j]
j+=1
correct = 1
else:
correct += 1
if(correct >= total):
pass
print("Iterations: {0}".format(iteration))
print("=======Final Weights========================")
i = 0
for wi in w:
print("w{0}: {1}".format(i,str(wi)))
i+=1
print("=======Final Dot Products=============")
for x in c1:
wx = 0
i = 0
for xi in x:
if(i < len(w)):
wx += xi * w[i]
i += 1
print(wx)
print("======================================")
for x in c2:
wx = 0
i = 0
for xi in x:
if(i < len(w)):
wx += xi * w[i]
i += 1
print(wx)
print("=======End=================================")
print("=======Dataset 1==============================================")
c1 = [[1, 1, 3, 5], [1, 2, 3, 10], [1, 3, 5, 9]]
c2 = [[1, -2, -1,-7], [1, -3, -3,-5], [1, -4, 4,-10]]
linear_classifier(c1,c2,0.6,1000)
print("=======Dataset 2(not linear separable)==============================================")
c1 = [[1, 1, 3, 5], [1, -3, -3,-5], [1, 3, 5, 9]]
c2 = [[1, -2, -1,-7], [1, 2, 3, 10], [1, -4, 4,-10]]
linear_classifier(c1,c2,0.3,1000000)