User:Cortiz

From Noisebridge
Revision as of 22:47, 11 March 2009 by Cortiz (talk | contribs)
Jump to navigation Jump to search

Didnt know how to make a page so i just pasted it here.

C code for the machine learning class 03/11/09

I used a different scale than the rest of the class. I worked entirely with integers, threshold is 500.

cheers.

/*=================================================================
Author:         Cristian Ortiz (co.ortiz@gmail.com)
Description:    Coded for the perceptron class @noisebridge. peace.
===================================================================*/

#include <stdio.h>
#include <stdlib.h>

int dot_prod(int * A, int * B, int n){
    int i=0;
    int R=0;
    for(i=0;i<n;i++){
        R+=A[i]*B[i];
    }
    return R;
}
int * sca_prod(int * A, int n, int x){
    int i=0;
    int * R;
    for(i=0;i<n;i++){
        R[i]=A[i]*x;
    }
    return R;
}
int main(void) {
    int input_vec[]={1,0,0,1,0,1,1,1,0,1,1,1};
    int expected[]={1,1,1,0};
    int input_offset=0;
    int w_vec[]={1,1,1};
    int learned=0;
    int i=0;
    int output=0;
    int dot_result=0;
	int * pvec;
	int th=500;
    int adjust=0;	
    
    while (learned!=4){
        //printf("input offset: %d\n", input_offset);
        pvec=input_vec+(input_offset*3);
        dot_result=dot_prod(pvec, w_vec, 3);
        output=(dot_result>th);
        printf("ouput: %d supposed to be %d", output, expected[input_offset]);
        
        if(output==expected[input_offset]){printf("\t\t\t<OK!>\n");}
        else {printf("\t\t\t<Miss!>\n");}
        
        if(output>expected[input_offset]){adjust=-1;}
        else if (output<expected[input_offset]){adjust=1;}
        else { learned++; }
        
        if(output!=expected[input_offset]){
            for(i=0;i<3;i++){
            	w_vec[i]=w_vec[i]+(input_vec[i+input_offset*3]*(adjust));
            	printf("new w_vec[%d]: %d\n", i, w_vec[i]);	
            }
            learned=0;
        }
        input_offset=(input_offset==3)?0:input_offset+1;
    }
    for(i=0;i<3;i++){
        printf("Final w_vec[%d]=%d\n", i, w_vec[i]);
    }
    return 0;
}