Jumat, 26 Juli 2019

Coding gradient descent dengan bahasa c

Bismillahirrahmanirrahim

Alhamdulillah, washalatu wasalamu 'ala rasulillah, waba'du

Berikut ini saya berikan contoh program untuk menghitung regresi linear dengan bahasa c. program ini untuk mencari optimasi slope-nya.

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

int sum(float *bil1, int n)
{
    float temp = 0;
    for (int i = 0;i < n; i++)
    {
        temp = temp + bil1[i];
    }
    printf("SUM = %f\n",temp);
    return temp;
}


int main()
{
    FILE *dataread;
    char x[100],y[100];
    float X[100],Y[100];
    int i,j,N;
    float sumx2 = 0;
    float sumy2 = 0;
    float sumxy = 0;
    float Ypred[100];
    float Err,SSErr, dSSErr = 0;


    dataread = fopen("ceklah.txt","r");
    if (dataread==NULL)
    {
        printf("data was not existed\n");
    }
    else
    {
        i = 0;

        while(!feof(dataread))
        {
            fscanf(dataread,"%s\t%s",x,y);
            X[i] = atoi(x);
            Y[i] = atoi(y);
            //printf("%d\t%d\n",X[i],Y[i]);
            i++;
        }
    }
    fclose(dataread);

    N = i;
   
//masuk program optimasi dengan gradient descent
float anew,aold=0.1;
float lr = 0.1;
float step = 1;
int iter = 0;

while (step > 0.001)
{
i=0;
while (i < N)
{
Err = Y[i] - (1 + anew*X[i]);
SSErr = SSErr + (Err*Err);
dSSErr = dSSErr + (-2*X[i]*Err);
i++;
}
iter++;
aold = anew;
anew = aold - lr*dSSErr;
step = fabs(lr*dSSErr);
printf("Iterasi ke --> %d, slope = %.4lf \t SumSquareError = %.4lf, StepSize = %.4lf\n",iter,anew, SSErr,step);
   
SSErr = 0;
dSSErr = 0;
}
return 0;
}

======================================================================================================================

Selamat mencoba!

Tidak ada komentar:

Posting Komentar