Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
1K views

Linear Vector Quantization Neural Network

The implementation of linear vector quantization neural network for clustering data using supervised learning principle.

Uploaded by

Denny Hermawanto
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views

Linear Vector Quantization Neural Network

The implementation of linear vector quantization neural network for clustering data using supervised learning principle.

Uploaded by

Denny Hermawanto
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

C:\Documents and Settings\Denny Hermawanto\Desktop\code\LVQ.

java

1: /* LVQ for pattern clustering


2: * Copyright: Denny Hermawanto - 2006
3: * Mail: d_3_nny@yahoo.com
4: *
5: * Suppose we have data patterns (1;1;0;0),(0;0;0;1),(0;0;1;0),(1;1;0;0).
6: * We want to assign the patterns to two classes:
7: *
8: * Vector Class
9: * (1;1;0;0) 0
10: * (0;0;0;1) 1
11: * (0;0;1;0) 0
12: * (1;1;0;0) 0
13: */
14:
15: public class LVQ{
16:
17: private void DefineInput(){
18: inputvector = new double[numberofinput][inputdimension];
19:
20: inputvector[0][0] = 1;
21: inputvector[0][1] = 1;
22: inputvector[0][2] = 0;
23: inputvector[0][3] = 0;
24:
25: inputvector[1][0] = 0;
26: inputvector[1][1] = 0;
27: inputvector[1][2] = 0;
28: inputvector[1][3] = 1;
29:
30: inputvector[2][0] = 0;
31: inputvector[2][1] = 0;
32: inputvector[2][2] = 1;
33: inputvector[2][3] = 0;
34:
35: inputvector[3][0] = 1;
36: inputvector[3][1] = 1;
37: inputvector[3][2] = 0;
38: inputvector[3][3] = 0;
39: }
40:
41: private void DefineCluster(){
42: targetcluster = new int[numberofinput];
43: targetcluster[0] = 0;
44: targetcluster[1] = 1;
45: targetcluster[2] = 0;
46: targetcluster[3] = 0;
47: }
48:
49: private double RandomNumberGenerator(){
50: java.util.Random rnd = new java.util.Random();
51: return rnd.nextDouble();
52: }
53:
54: private double LearningRateDecay(double currentlearningrate){
55: double result = 0;
56: result = 0.8 * currentlearningrate;
57: return result;
58: }
59:
60: private void InitializeWeigths(){
61: weights = new double[numberofcluster][inputdimension];
62: for(int i=0;i<numberofcluster;i++){
63: for(int j=0;j<inputdimension;j++){
64: weights[i][j] = RandomNumberGenerator();
65: }
66: }

Print Date: 3/15/2011. Time: 9:00:37 PM 1/3


C:\Documents and Settings\Denny Hermawanto\Desktop\code\LVQ.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: }

Print Date: 3/15/2011. Time: 9:00:37 PM 2/3


C:\Documents and Settings\Denny Hermawanto\Desktop\code\LVQ.java

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: }

Print Date: 3/15/2011. Time: 9:00:37 PM 3/3

You might also like