Linear Vector Quantization Neural Network
Linear Vector Quantization Neural Network
java
67: }
68:
69: private double ComputeEuclideanDistance(double[] vector1, double[]
vector2){
70: double result;
71: double distance =0;
72: for(int j=0;j<inputdimension;j++){
73: distance += Math.pow((vector1[j] - vector2[j]), 2);
74: }
75: result = distance;
76: return result;
77: }
78:
79: private void TrainLVQ(int maxiteration){
80: euclideandistance = new double[numberofcluster];
81: System.out.print("Training LVQ");
82: for(int iter=0;iter<maxiteration;iter++){
83: for(int k=0;k<numberofinput;k++){
84: //Get the winning neuron
85: winningneuron = 0;
86: for(int i=0;i<numberofcluster;i++){
87: euclideandistance[i] =
ComputeEuclideanDistance(weights[i],inputvector[k]);
88: if(i!=0){
89:
if(euclideandistance[i]<euclideandistance[winningneuron]){
90: winningneuron = i;
91: }
92: }
93: //System.out.println(euclideandistance[i]);
94: }
95: if(targetcluster[k] == winningneuron){
96: for(int i=0;i<inputdimension;i++){
97: weights[winningneuron][i] += learnrate *
(inputvector[k][i] - weights[winningneuron][i]);
98: }
99: }
100: else{
101: for(int i=0;i<inputdimension;i++){
102: weights[winningneuron][i] =
weights[winningneuron][i] - (learnrate * (inputvector[k][i] -
weights[winningneuron][i]));
103: }
104: }
105:
106: //System.out.println("Winner:"+winningneuron);
107: //Update the winning neuron
108: }
109: learnrate = LearningRateDecay(learnrate);
110: System.out.print(".");
111: //System.out.println("Learn Rate:"+learnrate);
112: }
113: }
114:
115: private void MappingInputVector(){
116: System.out.println("\n \n"+"Mapping Input Vectors:");
117: for(int k=0;k<numberofinput;k++){
118: winningneuron = 0;
119: for(int i=0;i<numberofcluster;i++){
120: euclideandistance[i] = ComputeEuclideanDistance(weights[i],
inputvector[k]);
121: if(i!=0){
122:
if(euclideandistance[i]<euclideandistance[winningneuron]){
123: winningneuron = i;
124: }
125: }
126: //System.out.println(euclideandistance[i]);
127: }
128: System.out.println("Input["+k+"] -> Cluster
No:"+winningneuron);
129: }
130: }
131:
132: public void RunLVQ(){
133: DefineParameters();
134: DefineInput();
135: DefineCluster();
136: InitializeWeigths();
137: TrainLVQ(50);
138: MappingInputVector();
139: }
140:
141: public void DefineParameters(){
142: numberofcluster = 2;
143: inputdimension = 4;
144: numberofinput = 4;
145: learnrate = 0.6;
146: }
147:
148: public static void main(String[] args){
149: LVQ lvq = new LVQ();
150: lvq.RunLVQ();
151: }
152:
153: //define variables
154: private double[][] inputvector;
155: private double[][] weights;
156: private double[] euclideandistance;
157: private int[] targetcluster;
158: private int numberofcluster;
159: private int inputdimension;
160: private int numberofinput;
161: private double learnrate;
162: private int winningneuron;
163: }