tu je uryvok kodu z mojho skveleho Džava téem programu kde prepocitavam vahy.Najprv treba nainicializovat vahy nahodne v rozmedzi <0,1> a do learningRatu hodit rozumne cislo(povedzme 0,1 to znie dost rozumne).
Kazde zavolanie metody step() prejde celu mnozinu bodov,pre kazdy bod vypocita vystup podla vzorca [1].Ak je rovnaky ako predpokladany vystup(ten je zadany v subore) je vsetko ok a vzorec[2] nic nezmeni.To robime dookola az kym sa neprestanu menit vahy.AK sa podari prejst celu mnozinu bodov bez toho aby sa zmenili vahy tak sme dospeli k vysledku,otvarame sampanske a kricime "poje... perceptron,uz ta mam".Samozrejme ukoncime vypocet.
public void step(){
...
for (int i = 0;i < pointField.getLength();i++){ //pointField je mnozina bodov nacitanych zo vstupneho suboru
MyPoint point = pointField.getPoint(i);
output = -weights[0] + weights[1] * point.getX() + weights[2] * point.getY(); //Vzorec [1].Tento vzorec urci vypocitany vysledok output.
if (output <= 0) output = 0;
else output = 1;
//[2] point.getGroup() urci prislusnost bodu k nultej,alebo prvej mnozine(to je ten posledny prameter vo vstupnom subore.)
weights[0] += learningRate*(point.getGroup() - output) * (-1);
//pokial je ocakavany vystup zhodny s vyocitanym,vsetko je ok,vahy sa nemenia
weights[1] += learningRate*(point.getGroup() - output) * point.getX();
weights[2] += learningRate*(point.getGroup() - output) * point.getY();
...
}
Snad som niekomu pomohol.A ak nie,chyba je na vasej strane prijmaca:P