Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- // from http://stackoverflow.com/a/686373
- float rand_weight (float min, float max) {
- return min + ((float) rand()) / ((float) (RAND_MAX / (max - min)));
- }
- int main() {
- srand(time(NULL));
- float sets[1000][3];
- float weights[3] = {
- rand_weight(-.001, .001),
- rand_weight(-.001, .001),
- rand_weight(-.001, .001)
- };
- float learning_rate = .001;
- float p0, p1;
- char desired_out[2];
- int count = 0;
- while (1) {
- scanf("%f,%f,%s\n", &p0, &p1, desired_out);
- if (p0 == 0 && p1 == 0 && desired_out[0] == '0') break;
- sets[count][0] = p0;
- sets[count][1] = p1;
- sets[count][2] = desired_out[0] == '+' ? 1 : -1;
- count++;
- }
- // The training process starts
- while (1) {
- int i;
- float old_weights[] = {weights[0], weights[1], weights[2]};
- //printf("Interation: %d\n", ++j);
- for (i = 0; i < count; i++) {
- float out = sets[i][0] * weights[0] + sets[i][1] * weights[1] + weights[2] >= 0 ? 1 : -1;
- float delta = learning_rate * (sets[i][2] - out);
- weights[0] += delta * sets[i][0];
- weights[1] += delta * sets[i][1];
- weights[2] += delta;
- }
- //printf("Weights: %f, %f, %f\n", weights[0], weights[1], weights[2]);
- if (old_weights[0] == weights[0] && old_weights[1] == weights[1] && old_weights[2] == weights[2]) break;
- }
- while (scanf("%f,%f\n", &p0, &p1) != EOF) {
- char* out_str = p0 * weights[0] + p1 * weights[1] + weights[2] >= 0 ? "+1" : "-1";
- printf("%s\n", out_str);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment