Я новичок в машинном обучении, а также в программировании на Python, я хочу реализовать алгоритм с нуля, используя только numpy, который является правилом обучения персептрона для набора данных linnerud.
Если персептрон не сходится, нужно будет запустить для1000 итераций, а также необходимо протестировать этот алгоритм на наборе данных Linnerrud, используя все 3 атрибута и только результат chinups.
Вектор должен быть определен как двоичные классы для результата chinups следующим образом:
if(chinups>median(chinups)) then chinups=0 else chinups=1
Мне нужно использовать эти классы (0/1) для обучения персептрона и построения таблицы вероятностей. В конце концов мне нужно 20 значений прогноза, выводимых персептроном, где каждое значение представляет собой взвешенную сумму (точечное произведение весов персептрона со значениями атрибута)
То, что я получаю, кажется неверным. Если бы кто-нибудь мог помочь мне с этим, было бы заметно. Ниже приведен мой код:
import numpy as np
import matplotlib.pyplot as plot
import os
from numpy import arange
from sklearn.datasets import load_linnerud
def perceptron(linnerud):
pathName = os.path.dirname(os.path.abspath(__file__))
myfile = open(pathName+'\perceptron_results.txt', 'w')
data = linnerud['data']
target = linnerud['target']
chinup = []
for i in target:
chinup.append(i[0])
median = np.sum(chinup) / 20
#print(median)
binary = []
for j in chinup:
#print(j)
if j > median:
binary.append(0)
else:
binary.append(1)
weights = np.zeros([3,1])
iteration = 1000
for i in arange(0,iteration):
counter = 0
converged = True
for rowVal in data:
predVal = np.dot(rowVal,weights)
if predVal < 0:
predicted = 0
else:
predicted = 1
if predicted != binary[counter]:
converged = False
if binary[counter] == 0 :
weights = weights - np.expand_dims(rowVal,1)
else:
weights = weights + np.expand_dims(rowVal,1)
counter = counter + 1
if converged == True:
print("Error occurred")
break
finalPred = np.dot(data,weights)
myfile.write(str(finalPred)+'\n')
#print(finalPred)
print("\nProbability values appended in gnb_result,txt file")
plot.plot(finalPred,'bo');
plot.plot([0,20],[0,0])
plot.show()
My Output is this:
[[ 2845.]
[ -2316.]
[ -1906.]
[ 8874.]
[ 8926.]
[ 1693.]
[ 5421.]
[ 4877.]
[ 15905.]
[-14406.]
[ 13369.]
[ 2546.]
[ 5238.]
[ -4733.]
[ 3337.]
[ 954.]
[ 2243.]
[ 7887.]
[ 11835.]
[ 489.]]