Pengaplikasian Machine Learning dalam memprediksi laju pertumbuhan penduduk menggunakan algoritma Regresi Linear
1. Pengertian
Regresi linier merupakan algoritma yang digunakan untuk mengukur
hubungan linier antara dua atau lebih dari dua variable dan juga merupakan salah satu dari jenis analisis prediksi yang
sering digunakan pada data berskala kuantitatif (interval atau rasio). Analisis
ini berfungsi untuk membuktikan apakah sekumpulan variabel bebas memiliki
pengaruh signifikan dalam memprediksi variabel terikat. Persamaan garis linier
adalah y = mx + b
. Pada persamaan tersebut m adalah kemiringan atau gradien
dan b adalah intercept atau bias
2. Konsep Regresi Linear
Pada dasarnya konsep
regresi linear ini berasal dari persamaan garis. Seperti formula regresi
llinear sederhana berikut.
Formula di atas
mengingatkan akan rumus persamaan garis ,yaitu y = mx + c, dimana m merupakan
gradien atau kemiringan garis dan c merupakan konstanta. Secara umum, model
regresi linear dapat diartikan sebagai penggunaan fungsi garis lurus sebagai
acuan untuk memprediksi data. Pada persamaan di atas, y_topi merupakan variabel
dependen dari nilai yang akan diprediksi, sementara x1 merupakan variabel
independen atau variabel bebas atau prediktornya.Untuk menghasilkan garis yang
tepat dengan dengan error seminimal mungkin, kita harus menentukan nilai theta0
dan theta1 yang digunakan sebagai parameter. theta0 merupakan sebuah intersep
(intercept), sedangkan theta1 merupakan gradien atau kemiringan garis. theta0
dan theta1 dapat disebut juga koefisien persamaan linear.
Pada sumber lain, mungkin kita akan menemukan rumus yang berbeda dalam menotasikan fungsi regresi linear, namun pada dasarnya konsepnya tetap sama. Misalnya mungkin ada referensi yang menotasikannya dengan y = wx + a atau yang lainnya. Dalam rumus y = wx + a, w merupakan gradien dan a merupakan intersep, jadi intinya tetap sama.
3. Data percobaan
%Import Data
jumlah = xlsread('JumlahPendudukIndonesia.xlsx')
x = jumlah(:,2);
y = jumlah(:,3);
m = length(x);
%Visualize Data
plot(x,y,'O')
%Linear Regression y = a*x
+ b
p = polyfit(x,y,1); %[a b]
ypred = polyval(p,x);
plot(x,y,'x');
hold on;
plot (x, ypred);
hold off;
rmse = sqrt (mean((ypred -
y).^2))
rrmse = rmse/mean(y)
%Polynomial regression y =
a*z^2 + b*x + c
p = polyfit(x,y,2); %[cba]
ypred = polyval(p,x);
plot(x,y,'x');
hold on;
plot (x, ypred);
hold off;
rmse = sqrt (mean((ypred -
y).^2))
rrmse = rmse/mean(y)
%Normalisasi Fitur
%xnorm = (x - mean
(x))/std(x);
xnorm = (x - min(x))/(max(x) -
min(x));
%Polynomial regression with
normalized
p = polyfit(xnorm,y,20);
ypred = polyval(p,xnorm);
plot(x,y,'x');
hold on;
plot (x, ypred);
hold off;
rmse = sqrt (mean((ypred -
y).^2))
rrmse = rmse/mean(y)
%Effect complexity of the
model
%Efek kompleksitas model
maxdegree = 20;
for i = 1:maxdegree
p = polyfit(xnorm,y,i);
ypred = polyval(p,xnorm);
error(i) = sqrt (mean((ypred - y).^2));
end
plot(1:maxdegree, error)
%Split the data into
training and validation sets
%Pisahkan data menjadi set
pelatihan dan validasi
P = 0.5;
k = randperm(m);
xtrain = xnorm(k(1:round(P*m)));
xval = xnorm(k(round(P*m)+1:end));
ytrain = y(k(1:round(P*m)));
yval = y(k(round(P*m)+1:end));
plot(xtrain,ytrain,'O');
hold on;
plot(xval,yval,'x');
hold off;
%Retrain Quadratic model
with training and validation split
%Latih kembali model
Kuadrat dengan pemisahan pelatihan dan validasi
p = polyfit(xtrain, ytrain, 2);
ypredtrain = polyval(p,xtrain);
ypredval = polyval(p,xval);
plot(xtrain, ytrain, 'x');
hold on;
plot(xval,yval,'x');
plot(xtrain, ypredtrain, 'O');
plot(xval, ypredval, 'O');
hold off;
%Effect complexity on
undeerfitting and overfitting
%Efek kompleksitas pada
underfitting dan overfitting
P = 0.5;
maxdegree = 10;
k = randperm(m);
xtrain = xnorm(k(1:round(P*m)));
xval =
xnorm(k(round(P*m)+1:end));
ytrain = y(k(1:round(P*m)));
yval = y(k(round(P*m)+1:end));
for i = 1:maxdegree
p = polyfit(xtrain,ytrain,i);
ypredtrain = polyval(p,xtrain);
ypredval = polyval(p,xval);
errortrain(i) = sqrt (mean((ypredtrain -
ytrain).^2));
errorval(i) = sqrt (mean((ypredval -
yval).^2));
end
plot(1:maxdegree, errortrain);
hold on;
plot(1:maxdegree, errorval);
hold off;
%Itterations on training
sets
%Iterasi pada set pelatihan
P = 0.5;
maxdegree = 6;
nrepeats = 50;
errortrain = zeros(maxdegree,1);
errorval = zeros(maxdegree,1);
for ii = 1:nrepeats
%random training/validation split
k = randperm(m);
xtrain = xnorm(k(1:round(P*m)));
xval = xnorm(k(round(P*m)+1:end));
ytrain = y(k(1:round(P*m)));
yval = y(k(round(P*m)+1:end));
%loop Polynomial
for i = 1:maxdegree
p = polyfit(xtrain,ytrain,i);
ypredtrain = polyval(p,xtrain);
ypredval = polyval(p,xval);
errortrain(i) = errortrain(i) + sqrt
(mean((ypredtrain - ytrain).^2));
errorval(i) = errorval(i) + sqrt (mean((ypredval
- yval).^2));
end
end
errortrain = errortrain/nrepeats;
errorval = errorval/nrepeats;
plot(1:maxdegree, errortrain);
hold on;
plot(1:maxdegree, errorval);
hold off;
%optimal polynomial
[M, I] = min(errorval)
%PREDICTIONS
p = polyfit(xnorm,y,2);
xfuture = 2021:2050;
%normalization
xfuturenorm = (xfuture - min(x))/(max(x) -
min(x));
yfuture = polyval(p,xfuturenorm);
xpast = 1950:1970;
%normalization
xpastnorm = (xpast - min(x))/(max(x) -
min(x));
ypast = polyval(p,xpastnorm);
plot(x,y,'O');
hold on;
plot(xfuture,yfuture);
plot(xpast,ypast);
hold off
Tidak ada komentar:
Posting Komentar