Created
January 28, 2025 19:55
-
-
Save MurageKibicho/514d0cf25b67af0979d09fb4e070ba5a to your computer and use it in GitHub Desktop.
test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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