Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Linear Classifier in C
//clang 3.7.0 //Linear Classifier in C Copyright(C) 2016 Henry Kroll III www.thenerdshow.com //usr/local/bin/anch -std=c99 -keep -run "$0" "$@" ; exit #include <stdio.h> #include <stdlib.h> #define RPT(i, n) for (int i=n;i--;) #define LN 3 double weights[LN] = {0.0, 0.0, 0.0}; int training_set[][6][LN] = {{{1, 0, 0}, {1}}, {{1, 0, 1}, {1}}, {{1, 1, 0}, {1}}, {{1, 1, 1}, {0}}, {{-1}} }; //dot product double dot_product (int *values, double *weights) { double sum = 0.0, value, weight; RPT (i, LN) { value = (double)values[i], weight = weights[i]; sum += value * weight; } return sum; } int main (void) { double threshold = 0.5; double learning_rate = 1.0; RPT (iter, 50) { RPT (i, 60) putchar ('=') ;putchar ('\n'); int error_count = 0; for (int i=0;training_set[i][0][0]>=0;i++) { int *input_vector = training_set[i][0]; int *desired_output = training_set[i][1]; double result = dot_product (input_vector, weights) > threshold; double error = (double)*desired_output - result; int fail = (int)(abs(error) + threshold); printf ("(%i, %i, %i) ", input_vector[0], input_vector[1], input_vector[2]); printf ("goal: %i got: %4.2f error: %5.2f %s\n", *desired_output, result, error, fail?"fail":"success"); if (fail) { error_count++; RPT (index, LN) { int value = input_vector[index]; double fact = learning_rate * error * (double)value; weights[index] += fact; } } } if (error_count == 0) { RPT (i, 60) putchar ('=') ;putchar ('\n'); printf ("Success in %i iterations.", 50-iter); break; } } return EXIT_SUCCESS; }
run
|
edit
|
history
|
help
0
Bucles: Triángulos Lateral Derecho
Tablero de ajedrez
Bucles: Suma de n números tecleados hasta introducir 0
UDP - Pytagorova veta
Vectores: Burbuja ordenación
Punteros: strcpy
ternary test c89
Příklad 3 min max #define
Triangulo Lateral Izquierdo
Regiones A y B