প্রদত্ত ডেটা পয়েন্টের একটি সেট থেকে, লিনিয়ার রিগ্রেশন একটি সরল রেখার সমীকরণ বের করে। প্রদত্ত পয়েন্টগুলো সরল রেখাটিকে অনুসরণ করবে। এই সূত্র ব্যবহার করে, আমরা এমন কোনো নির্দিষ্ট পয়েন্টের মান প্রেডিক্ট করতে পারি যা বর্তমানে সেটে নেই।
কিছু ডেটা পয়েন্ট ব্যবহার করে লিনিয়ার রিগ্রেশন সমস্যা সমাধানের জন্য নিচের সূত্রাবলী অনুসরণ করতে হয়:

এখানে m এবং c যথাক্রমে ঢাল এবং y-অवरোধ। এই এক্সপ্রেশন ব্যবহার করে, আমরা সরল রেখার সমীকরণ এই রূপে পেতে পারি: y = mx + c।
ইনপুট এবং আউটপুট
ইনপুট: কিছু পয়েন্টের (x, y) কোঅর্ডিনেট। {(1,3), (2,4), (3,5), (4,6), (5,8)} আউটপুট: ঢাল: 1.2 y-অবরোধ: 1.6 সমীকরণ: y = 1.2x + 1.6অ্যালগরিদম
linReg(coord)
ইনপুট: প্রদত্ত কোঅর্ডিনেট পয়েন্টের সেট।
আউটপুট: ঢাল m এবং y-অবরোধ c।
শুরু
i := 1 থেকে n পর্যন্ত, করুন
sumX := sumX + coord[i,0]
sumY := sumY + coord[i,1]
sumXsq := sumXsq + (coord[i,0]*coord[i,0])
sumXY := sumXY + (coord[i,0] * coord[i,1])
শেষ
m := (n * sumXY – (sumX*sumY)) / (n * sumXsq – (sumX * sumX))
c := (sumY / n) – (m * sumX)/n
শেষউদাহরণ
#include<iostream> #include<cmath> #define N 5 using namespace std; void linReg(int coord[N][2], float &m, float &c) { float sx2 = 0, sx = 0, sxy = 0, sy = 0; for(int i = 0; i<N; i++) { sx += coord[i][0]; //x-এর যোগফল sy += coord[i][1]; //y-এর যোগফল sx2 += coord[i][0]*coord[i][0]; //x^2-এর যোগফল sxy += coord[i][0]*coord[i][1]; //x*y-এর যোগফল } //ঢাল এবং অবরোধ নির্ণয় m = (N*sxy-(sx*sy))/(N*sx2-(sx*sx)); c = (sy/N)-(m*sx)/N; } main() { //এই ২ডি অ্যারে কোঅর্ডিনেট পয়েন্ট ধারণ করে int point[N][2] = {{1,3},{2,4},{3,5},{4,6},{5,8}}; float m, c; linReg(point, m, c); cout << "The slope: " << m << " The Intercept: " << c << endl; cout << "The equation: " << "y = "<< m <<"x + "<< c; }আউটপুট
The slope: 1.2 The Intercept: 1.6 The equation: y = 1.2x + 1.6