Skip to content

Instantly share code, notes, and snippets.

@MurageKibicho
Created January 28, 2025 19:55
Show Gist options
  • Select an option

  • Save MurageKibicho/514d0cf25b67af0979d09fb4e070ba5a to your computer and use it in GitHub Desktop.

Select an option

Save MurageKibicho/514d0cf25b67af0979d09fb4e070ba5a to your computer and use it in GitHub Desktop.
test
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef struct iris_dataset_struct
{
double inputs[4];
double output[3];
} iris_dataset_holder;
iris_dataset_holder iris_dataset_holder_array[ ] =
{
//{ Sepal Length, Sepal Width, Petal Length, Petal Width} {Iris-setosa,Iris-versicolor, Iris-virginica}
{ { 5.1, 3.5, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.9, 3.0, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.7, 3.2, 1.3, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.6, 3.1, 1.5, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.6, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.4, 3.9, 1.7, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 4.6, 3.4, 1.4, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.4, 1.5, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.4, 2.9, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.9, 3.1, 1.5, 0.1 }, { 1.0, 0.0, 0.0 } },
{ { 5.4, 3.7, 1.5, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.8, 3.4, 1.6, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.8, 3.0, 1.4, 0.1 }, { 1.0, 0.0, 0.0 } },
{ { 4.3, 3.0, 1.1, 0.1 }, { 1.0, 0.0, 0.0 } },
{ { 5.8, 4.0, 1.2, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.7, 4.4, 1.5, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 5.4, 3.9, 1.3, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.5, 1.4, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 5.7, 3.8, 1.7, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.8, 1.5, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 5.4, 3.4, 1.7, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.7, 1.5, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 4.6, 3.6, 1.0, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.3, 1.7, 0.5 }, { 1.0, 0.0, 0.0 } },
{ { 4.8, 3.4, 1.9, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.0, 1.6, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.4, 1.6, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 5.2, 3.5, 1.5, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.2, 3.4, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.7, 3.2, 1.6, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.8, 3.1, 1.6, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.4, 3.4, 1.5, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 5.2, 4.1, 1.5, 0.1 }, { 1.0, 0.0, 0.0 } },
{ { 5.5, 4.2, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.9, 3.1, 1.5, 0.1 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.2, 1.2, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.5, 3.5, 1.3, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.9, 3.1, 1.5, 0.1 }, { 1.0, 0.0, 0.0 } },
{ { 4.4, 3.0, 1.3, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.4, 1.5, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.5, 1.3, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 4.5, 2.3, 1.3, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 4.4, 3.2, 1.3, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.5, 1.6, 0.6 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.8, 1.9, 0.4 }, { 1.0, 0.0, 0.0 } },
{ { 4.8, 3.0, 1.4, 0.3 }, { 1.0, 0.0, 0.0 } },
{ { 5.1, 3.8, 1.6, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 4.6, 3.2, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.3, 3.7, 1.5, 0.2 }, { 1.0, 0.0, 0.0 } },
{ { 5.0, 3.3, 1.4, 0.2 }, { 1.0, 0.0, 0.0 } },
// Iris-versicolor
{ { 7.0, 3.2, 4.7, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 6.4, 3.2, 4.5, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 6.9, 3.1, 4.9, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 5.5, 2.3, 4.0, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 6.5, 2.8, 4.6, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 5.7, 2.8, 4.5, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 6.3, 3.3, 4.7, 1.6 }, { 0.0, 1.0, 0.0 } },
{ { 4.9, 2.4, 3.3, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 6.6, 2.9, 4.6, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 5.2, 2.7, 3.9, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 5.0, 2.0, 3.5, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 5.9, 3.0, 4.2, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 6.0, 2.2, 4.0, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 6.1, 2.9, 4.7, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 5.6, 2.9, 3.6, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 6.7, 3.1, 4.4, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 5.6, 3.0, 4.5, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 5.8, 2.7, 4.1, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 6.2, 2.2, 4.5, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 5.6, 2.5, 3.9, 1.1 }, { 0.0, 1.0, 0.0 } },
{ { 5.9, 3.2, 4.8, 1.8 }, { 0.0, 1.0, 0.0 } },
{ { 6.1, 2.8, 4.0, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 6.3, 2.5, 4.9, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 6.1, 2.8, 4.7, 1.2 }, { 0.0, 1.0, 0.0 } },
{ { 6.4, 2.9, 4.3, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 6.6, 3.0, 4.4, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 6.8, 2.8, 4.8, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 6.7, 3.0, 5.0, 1.7 }, { 0.0, 1.0, 0.0 } },
{ { 6.0, 2.9, 4.5, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 5.7, 2.6, 3.5, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 5.5, 2.4, 3.8, 1.1 }, { 0.0, 1.0, 0.0 } },
{ { 5.5, 2.4, 3.7, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 5.8, 2.7, 3.9, 1.2 }, { 0.0, 1.0, 0.0 } },
{ { 6.0, 2.7, 5.1, 1.6 }, { 0.0, 1.0, 0.0 } },
{ { 5.4, 3.0, 4.5, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 6.0, 3.4, 4.5, 1.6 }, { 0.0, 1.0, 0.0 } },
{ { 6.7, 3.1, 4.7, 1.5 }, { 0.0, 1.0, 0.0 } },
{ { 6.3, 2.3, 4.4, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 5.6, 3.0, 4.1, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 5.5, 2.5, 4.0, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 5.5, 2.6, 4.4, 1.2 }, { 0.0, 1.0, 0.0 } },
{ { 6.1, 3.0, 4.6, 1.4 }, { 0.0, 1.0, 0.0 } },
{ { 5.8, 2.6, 4.0, 1.2 }, { 0.0, 1.0, 0.0 } },
{ { 5.0, 2.3, 3.3, 1.0 }, { 0.0, 1.0, 0.0 } },
{ { 5.6, 2.7, 4.2, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 5.7, 3.0, 4.2, 1.2 }, { 0.0, 1.0, 0.0 } },
{ { 5.7, 2.9, 4.2, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 6.2, 2.9, 4.3, 1.3 }, { 0.0, 1.0, 0.0 } },
{ { 5.1, 2.5, 3.0, 1.1 }, { 0.0, 1.0, 0.0 } },
{ { 5.7, 2.8, 4.1, 1.3 }, { 0.0, 1.0, 0.0 } },
// Iris-virginica
{ { 6.3, 3.3, 6.0, 2.5 }, { 0.0, 0.0, 1.0 } },
{ { 5.8, 2.7, 5.1, 1.9 }, { 0.0, 0.0, 1.0 } },
{ { 7.1, 3.0, 5.9, 2.1 }, { 0.0, 0.0, 1.0 } },
{ { 6.3, 2.9, 5.6, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.5, 3.0, 5.8, 2.2 }, { 0.0, 0.0, 1.0 } },
{ { 7.6, 3.0, 6.6, 2.1 }, { 0.0, 0.0, 1.0 } },
{ { 4.9, 2.5, 4.5, 1.7 }, { 0.0, 0.0, 1.0 } },
{ { 7.3, 2.9, 6.3, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.7, 2.5, 5.8, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 7.2, 3.6, 6.1, 2.5 }, { 0.0, 0.0, 1.0 } },
{ { 6.5, 3.2, 5.1, 2.0 }, { 0.0, 0.0, 1.0 } },
{ { 6.4, 2.7, 5.3, 1.9 }, { 0.0, 0.0, 1.0 } },
{ { 6.8, 3.0, 5.5, 2.1 }, { 0.0, 0.0, 1.0 } },
{ { 5.7, 2.5, 5.0, 2.0 }, { 0.0, 0.0, 1.0 } },
{ { 5.8, 2.8, 5.1, 2.4 }, { 0.0, 0.0, 1.0 } },
{ { 6.4, 3.2, 5.3, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 6.5, 3.0, 5.5, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 7.7, 3.8, 6.7, 2.2 }, { 0.0, 0.0, 1.0 } },
{ { 7.7, 2.6, 6.9, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 6.0, 2.2, 5.0, 1.5 }, { 0.0, 0.0, 1.0 } },
{ { 6.9, 3.2, 5.7, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 5.6, 2.8, 4.9, 2.0 }, { 0.0, 0.0, 1.0 } },
{ { 7.7, 2.8, 6.7, 2.0 }, { 0.0, 0.0, 1.0 } },
{ { 6.3, 2.7, 4.9, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.7, 3.3, 5.7, 2.1 }, { 0.0, 0.0, 1.0 } },
{ { 7.2, 3.2, 6.0, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.2, 2.8, 4.8, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.1, 3.0, 4.9, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.4, 2.8, 5.6, 2.1 }, { 0.0, 0.0, 1.0 } },
{ { 7.2, 3.0, 5.8, 1.6 }, { 0.0, 0.0, 1.0 } },
{ { 7.4, 2.8, 6.1, 1.9 }, { 0.0, 0.0, 1.0 } },
{ { 7.9, 3.8, 6.4, 2.0 }, { 0.0, 0.0, 1.0 } },
{ { 6.4, 2.8, 5.6, 2.2 }, { 0.0, 0.0, 1.0 } },
{ { 6.3, 2.8, 5.1, 1.5 }, { 0.0, 0.0, 1.0 } },
{ { 6.1, 2.6, 5.6, 1.4 }, { 0.0, 0.0, 1.0 } },
{ { 7.7, 3.0, 6.1, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 6.3, 3.4, 5.6, 2.4 }, { 0.0, 0.0, 1.0 } },
{ { 6.4, 3.1, 5.5, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.0, 3.0, 4.8, 1.8 }, { 0.0, 0.0, 1.0 } },
{ { 6.9, 3.1, 5.4, 2.1 }, { 0.0, 0.0, 1.0 } },
{ { 6.7, 3.1, 5.6, 2.4 }, { 0.0, 0.0, 1.0 } },
{ { 6.9, 3.1, 5.1, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 5.8, 2.7, 5.1, 1.9 }, { 0.0, 0.0, 1.0 } },
{ { 6.8, 3.2, 5.9, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 6.7, 3.3, 5.7, 2.5 }, { 0.0, 0.0, 1.0 } },
{ { 6.7, 3.0, 5.2, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 6.3, 2.5, 5.0, 1.9 }, { 0.0, 0.0, 1.0 } },
{ { 6.5, 3.0, 5.2, 2.0 }, { 0.0, 0.0, 1.0 } },
{ { 6.2, 3.4, 5.4, 2.3 }, { 0.0, 0.0, 1.0 } },
{ { 5.9, 3.0, 5.1, 1.8 }, { 0.0, 0.0, 1.0 } }
};
uint64_t modular_exponentiation_iris(uint64_t base, uint64_t exp, uint64_t mod)
{
uint64_t result = 1;
base = base % mod;
while(exp > 0)
{
if (exp % 2 == 1)
{
result = (result * base) % mod;
}
exp = exp >> 1;
base = (base * base) % mod;
}
return result;
}
void ShuffleIrisDataset(iris_dataset_holder *array, size_t n)
{
srand(4567870);
for(size_t i = n - 1; i > 0; i--)
{
size_t j = rand() % (i + 1);
iris_dataset_holder temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int main()
{
ShuffleIrisDataset(iris_dataset_holder_array, 150);
uint64_t *irisInputs = calloc(150, sizeof(uint64_t));
uint64_t *irisOutputs = calloc(150, sizeof(uint64_t));
int currentInput = 0;
int currentOutput = 0;
for(int i = 0; i < 150; i++)
{
currentInput = 0;
currentOutput = 0;
for(int j = 0; j < 4; j++)
{
currentInput *= 100;
currentInput += iris_dataset_holder_array[i].inputs[j] * 10;
}
for(int j = 0; j < 3; j++)
{
if(iris_dataset_holder_array[i].output[j] > 0.0)
{
currentOutput = j;
break;
}
}
irisInputs[i] = currentInput;
irisOutputs[i] = currentOutput;
}
int trainCount = 105;
int testPassCount = 0;
uint64_t classCount = 3;
uint64_t x_y_pass[16][3] =
{
{10000,10000,32},
{10000,10001,42},
{10000,10045,43},
{10000,10055,45},
{10000,10135,50},
{10000,11474,51},
{10000,13505,52},
{10000,30755,53},
{10000,73966,54},
{10000,75502,58},
{10008,83200,62},
{10017,18575,65},
{10050,77500,66},
{10070,53500,68},
{10935,101375,72},
{11346,73400,74}
};
for(int i = 0; i < 16; i++)
{
printf("x : %lu, y : %lu : ", x_y_pass[i][0], x_y_pass[i][1]);
testPassCount = 0;
for(int j = trainCount; j < 150; j++)
{
uint64_t predictedValue = modular_exponentiation_iris(irisInputs[i], x_y_pass[i][0], x_y_pass[i][1]) % classCount;
if(predictedValue == irisOutputs[j])
{
testPassCount += 1;
}
}
float trainAccuracy = (float) testPassCount/ (float) 45.0f;
float testAccuracy = (float) x_y_pass[i][2]/ (float) 105.0f;
printf("Test Accuracy %.3f , Train Accuracy : %.3f\n ", testAccuracy,trainAccuracy);
}
free(irisInputs);
free(irisOutputs);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment