Skip to content

Commit 7efb460

Browse files
add:linear regression
# Deskripsi (Description) Pada kode **Least Square Method Linear Regression** ini, saya telah melakukan beberapa perubahan dan penambahan untuk meningkatkan keterbacaan, efisiensi, dan struktur program. Berikut adalah perubahan yang dilakukan: ### **1. Menambahkan Struct `DataStatistic`** - Dibuat untuk menyimpan hasil kalkulasi statistik seperti: - `SumX`: Jumlah total elemen pada dataset independen. - `SumY`: Jumlah total elemen pada dataset dependen. - `Xsquared`: Total kuadrat elemen independen. - `Ysquared`: Total kuadrat elemen dependen. - `multiply`: Total hasil perkalian elemen independen dan dependen. - Hal ini dilakukan untuk mempermudah passing data antar fungsi tanpa harus menghitung ulang. --- ### **2. Memecah Perhitungan ke dalam Beberapa Fungsi Void** - **`sum()`**: Menghitung jumlah total elemen dalam dataset `independen` dan `dependen` lalu menyimpan hasilnya di `stats`. - **`Squared()`**: Menghitung kuadrat setiap elemen dataset `independen` dan `dependen` menggunakan metode manual dan fungsi bawaan `pow()` dari STL. - **`multiple()`**: Menghitung hasil perkalian elemen `independen` dan `dependen` serta menjumlahkan totalnya. - **`LinearRegression()`**: Menghitung slope (kemiringan) dan intercept (titik potong) berdasarkan data statistik yang telah dihitung sebelumnya. Pemecahan ini dilakukan untuk meningkatkan modularitas kode, sehingga fungsi menjadi lebih spesifik dan mudah dipahami. --- # Checklist: ##### Umum: - [x] Saya menambah algoritma terbaru. ##### Contributor Requirements (Syarat Kontributor) dan Lain-Lain: - [x] Saya sudah membaca (I have read) [CONTRIBUTING](https://github.com/bellshade/CPP/blob/main/CONTRIBUTING.md) dan sudah menyetujui semua syarat. - [x] Saya telah menambahkan komentar kode yang memberikan penjelasan maksud dari kode yang saya buat. - [x] Saya menggunakan bahasa Indonesia untuk memberikan penjelasan dari kode yang saya buat. # Environment Saya menggunakan (I'm using): - ``OS`` = `Linux` - ``g++`` = '14.0' This Commit License https://github.com/bellshade/CPP/blob/main/license Co-authored-by: bellshadebot <bellshade07@gmail.com>
1 parent 774c977 commit 7efb460

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

math/linear_regression.cpp

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#include <iostream>
2+
#include <cmath>
3+
#include <vector>
4+
5+
/*pilihan pertama buat dalam 1 void function
6+
pilihan kedua adalah buat dalam beberapa void
7+
function di ikuti dengan penggunaaan struct
8+
*/
9+
// sumber soal: https://mathcyber1997.com/regresi-linear-sederhana/ - > nomor 1
10+
struct DataStatistic{
11+
float SumX;
12+
float SumY;
13+
float Xsquared;
14+
float Ysquared;
15+
float multiply;
16+
};
17+
void Squared(std::vector<float>& independen, std::vector<float>& dependen,DataStatistic &stats){
18+
// bisa menggunakan pow bawaan STL cmath atau langsung dengan metode manual
19+
//contoh menggunakan pow
20+
float SumSquared = 0;
21+
float XSquared;
22+
for(int i = 0; i <= independen.size() - 1; i++){
23+
XSquared = pow(independen[i],2); // variabel ,pangkat
24+
SumSquared += XSquared;
25+
}
26+
stats.Xsquared = SumSquared;
27+
std::cout << "Hasil X squared " << stats.Xsquared << std::endl;
28+
//contoh metode manual
29+
float SumYSquared = 0;
30+
float Ysquared;
31+
for(int i = 0; i <= dependen.size() - 1;i++){
32+
Ysquared = dependen[i] * dependen[i];
33+
SumYSquared = SumYSquared + Ysquared; // bisa juga dengan +=
34+
}
35+
stats.Ysquared = SumYSquared;
36+
std::cout << "Hasil Y squared " << stats.Ysquared << std::endl;
37+
38+
}
39+
void sum(std::vector<float>& independen, std::vector<float>& dependen,DataStatistic &stats){
40+
float sumx = 0;
41+
float sumy = 0;
42+
for(int i = 0; i <= independen.size() - 1;i++){
43+
// karena panjang data sama maka cukup 1 for loop
44+
sumx += independen[i];
45+
sumy += dependen[i];
46+
}
47+
stats.SumX = sumx;
48+
stats.SumY = sumy;
49+
std::cout << "SumX: " << stats.SumX << std::endl;
50+
std::cout << "SumY: " << stats.SumY << std::endl;
51+
}
52+
void multiple(std::vector<float>& independen, std::vector<float>& dependen,DataStatistic &stats){
53+
float multiply;
54+
float SumMultiply = 0;
55+
for(int i = 0; i <= independen.size() - 1; i++){
56+
multiply = independen[i] * dependen[i];
57+
SumMultiply += multiply;
58+
}
59+
stats.multiply = SumMultiply;
60+
std::cout << "Hasil Kali: " << stats.multiply << std::endl;
61+
}
62+
63+
64+
void LinearRegression(std::vector<float>& independen, std::vector<float>& dependen,DataStatistic &stats){
65+
double SumSquareXX;
66+
double SumSquareXY;
67+
68+
69+
SumSquareXY = stats.multiply - ((stats.SumX * stats.SumY)/ independen.size());
70+
SumSquareXX = stats.Xsquared - (pow(stats.SumX,2)/independen.size());
71+
// print untuk memastikan hasil nya benar
72+
std::cout << "Hasil SumSquareXY: " << SumSquareXY << std::endl;
73+
std::cout << "Hasil SumSquareXX: " << SumSquareXX << std::endl;
74+
75+
76+
// b0 = intercept
77+
// b1 = gradient atau slope
78+
79+
double Slope,Intercept;
80+
81+
Slope = SumSquareXY / SumSquareXX;
82+
83+
Intercept = (stats.SumY - (Slope * stats.SumX)) / independen.size();
84+
85+
std::cout << "Model Regresi Linear = " << Intercept << " + " << Slope << "x ";
86+
}
87+
88+
int main(){
89+
DataStatistic stats;
90+
std::vector<float> independen = {1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2};
91+
std::vector<float> dependen = {8.1,7.8,8.5,9.8,9.5,8.9,8.6,10.2,9.3,9.2,10.5};
92+
int count,IndependenValue,DependenValue;
93+
94+
//karena tahap production kita akan memakai data yg sudah ada saja
95+
//anda dapat men uncomment code dibawah dan menghapus data pada vector dependen dan dependen
96+
97+
98+
99+
// std::cout << "Masukkan panjang data: ";
100+
// std::cin >> count;
101+
// for(int i = 0; i <= count - 1; i++){
102+
// std::cout << "Masukkan data x: ";
103+
// std::cin >> IndependenValue;
104+
// independen.push_back(IndependenValue);
105+
// std::cout << "Masukkan data y: ";
106+
// std::cin >> DependenValue;
107+
// dependen.push_back(DependenValue);
108+
// }
109+
float sum_x = independen.size();
110+
float sum_y = dependen.size();
111+
sum(independen,dependen,stats);
112+
Squared(independen,dependen,stats);
113+
multiple(independen,dependen,stats);
114+
LinearRegression(independen,dependen,stats);
115+
std::cin.get();
116+
}

0 commit comments

Comments
 (0)