සුභ පැතුම්! ඔබ මේ වන විට ඉතා වැදගත් කඩඉමක් පසු කර ඇත. පසුගිය මොඩියුලයේදී, අපි අපගේ දත්ත කට්ටලය, Machine Learning model එකකට "පෝෂණය" කිරීමට සූදානම් කළෙමු. අපි එය "ප්රශ්න පත්රය" (Features - X) සහ "පිළිතුරු පත්රය" (Target - y) ලෙස පිළිවෙලට වෙන් කළෙමු. දැන් අපගේ දත්ත සූදානම්ව බලා සිටී. ඊළඟට ඇත්තේ, එම දත්ත වලින් ඉගෙනගෙන, රටා හඳුනාගෙන, අනාවැකි කීමට හැකි "බුද්ධිමත් ශිෂ්යයෙකු" හෙවත් Machine Learning Algorithm එකක් තෝරා ගැනීමයි.
Machine Learning ලෝකයේ විවිධ කාර්යයන් සඳහා නිර්මාණය වූ ඇල්ගොරිතම සිය ගණනක් ඇත. නමුත් අපි අපගේ ගමන ආරම්භ කරන්නේ, තේරුම් ගැනීමට ඉතා පහසු, නමුත් අතිශයින්ම බලවත් සහ බහුලව භාවිතා වන ඇල්ගොරිතමයක් සමඟිනි. ඒ තමයි, Linear Regression.
Linear Regression Concept එක
Linear Regression යනු කුමක්ද? එහි නමේම තේරුම සැඟවී ඇත. "Linear" යනු රේඛීය හෙවත් සරල රේඛාවකට සම්බන්ධ දෙයකි. "Regression" යනු සංඛ්යාත්මක අගයක් (උදා: ලකුණු, මිල, උස) පුරෝකථනය කිරීමේ කාර්යයයි.
එබැවින්, Linear Regression යනු අපගේ features (X) සහ target (y) අතර ඇති සම්බන්ධතාවය, සරල රේඛාවක් (a straight line) ඇසුරෙන් විස්තර කිරීමට උත්සාහ කරන ඇල්ගොරිතමයකි. එහි මූලිකම අරමුණ වන්නේ, දත්ත ලක්ෂ්යයන් (data points) හරහා යන, එම සියලුම ලක්ෂ්යයන්ට හැකි තරම් ආසන්නයෙන් පිහිටන "හොඳම ගැළපෙන සරල රේඛාව" (best-fitting straight line) සොයා ගැනීමයි.
අපගේ ව්යාපෘතියේ විෂයයන් තුනක් තිබුනත්, තේරුම් ගැනීමේ පහසුව සඳහා, අපි මොහොතකට සිතමු `FinalScore` එක පුරෝකථනය කිරීමට අප භාවිතා කරන්නේ `Math` ලකුණු පමණක් කියා. අපි මෙම දත්ත ප්රස්තාරයක සටහන් කළහොත් (Math ලකුණු x-අක්ෂයේ සහ FinalScore y-අක්ෂයේ), අපට ලක්ෂ්ය එකතුවක් (a scatter plot) ලැබේ.
මෙම ලක්ෂ්ය දෙස බැලූ විට, ඔබට දළ වශයෙන් රටාවක් පෙනෙනවා නේද? ගණිතය ලකුණු වැඩි වන විට, අවසාන ලකුණද වැඩි වන බවක් පෙනේ. Linear Regression ඇල්ගොරිතමයේ කාර්යය වන්නේ, මෙම රටාව නියෝජනය කරන තනි සරල රේඛාවක් මෙම ලක්ෂ්ය අතරින් ඇඳීමයි. එම රේඛාව ඇඳි පසු, අපට අලුත් ගණිත ලකුණක් (X) ලබා දී, එම රේඛාවට අනුව ඊට අනුරූප අවසාන ලකුණ (y) කුමක්දැයි සොයාගත හැකිය.
y = mX + c Idea එක Explained with Sinhala Examples
"සරල රේඛාවක්" යන වචනය ඇසූ විට, ඔබට පාසල් ගණිත පන්තියේදී ඉගෙනගත් සමීකරණයක් මතකයට එනවාද?
මෙම සරල සමීකරණය තමයි Linear Regression ඇල්ගොරිතමයේ හදවත. Machine Learning වලදී, අපි මෙම සමීකරණයේ එක් එක් කොටසට ප්රායෝගික අර්ථයක් ලබා දෙන්නෙමු.
සිංහල උපමාවක්: පොල් ගෙඩියේ මිල
අපි හිතමු පොල් ගෙඩියක මිල (y) තීරණය වෙන්නේ එහි බර (X) අනුව කියලා. අපිට පොල් ගෙඩි කිහිපයක බර සහ ඒවායේ මිල ගණන් දන්නවා. මෙම දත්ත භාවිතා කර, Linear Regression model එකක්, මිල සහ බර අතර සම්බන්ධය `මිල = m * බර + c` සමීකරණයෙන් ඉගෙන ගන්නවා.
- y: මෙය අප පුරෝකථනය කිරීමට උත්සාහ කරන අගයයි (The Target). අපේ ව්යාපෘතියේදී, `y` යනු `FinalScore` වේ. පොල් උදාහරණයේදී, `y` යනු 'මිල' වේ.
- X: මෙය අපගේ අනාවැකිය සඳහා භාවිතා කරන අගයයි (The Feature). අපේ ව්යාපෘතියේදී, `X` යනු `Math`, `Science`, `English` ලකුණු වේ. පොල් උදාහරණයේදී, `X` යනු 'බර' වේ.
- m: මෙය සංගුණකය (Coefficient) හෙවත් රේඛාවේ අනුක්රමණය (slope) වේ. Machine Learning වලදී, මෙය තමයි වැදගත්ම කොටස. `m` මගින්, X ඒකක එකකින් වෙනස් වන විට, y කොපමණ ප්රමාණයකින් වෙනස් වේද යන්න පෙන්වයි.
- පොල් උදාහරණයේදී: `m` = 0.5 යැයි සිතමු. దీని තේරුම, පොල් ගෙඩියේ බර ග්රෑම් 1 කින් වැඩි වන විට, එහි මිල සත 50 කින් වැඩි වන බවයි. `m` මගින් 'බර' යන feature එක, 'මිල' කෙරෙහි කොතරම් බලපෑමක් ඇති කරයිද යන්න මනිනු ලබයි.
- c: මෙය අන්තඃඛණ්ඩය (Intercept) වේ. ගණිතමය වශයෙන්, මෙය X හි අගය බිංදුව (0) වන විට y හි අගයයි. ප්රායෝගිකව, මෙය අපගේ මූලික අගය (baseline value) ලෙස සිතිය හැක.
- පොල් උදාහරණයේදී: `c` = 10 යැයි සිතමු. దీని තේරුම, පොල් ගෙඩියේ බර 0 වුවත්, එහි මූලික මිල රු.10 ක් බවයි. මෙය වෙළෙන්දාගේ ස්ථාවර ගාස්තුවක්, බෑගයේ මිල, හෝ වෙනත් මූලික පිරිවැයක් විය හැක.
Machine Learning model එකේ කාර්යය වන්නේ, අප ලබා දෙන දත්ත (X සහ y) දෙස බලා, එම දත්ත වලට වඩාත්ම ගැළපෙන `m` සහ `c` අගයන් දෙක කුමක්දැයි ගණනය කර සොයා ගැනීමයි.
විෂයයන් කිහිපයක් ඇති විට (Our Real Project)
අපගේ සැබෑ ව්යාපෘතියේදී, අපට feature එකක් වෙනුවට features තුනක් (`Math`, `Science`, `English`) ඇත. එවිට, අපගේ සමීකරණය සුළුවෙන් පුළුල් වේ. එක් `m` අගයක් වෙනුවට, එක් එක් feature එක සඳහා වෙනම `m` අගයක් (වෙනම බරක්) ඇත.
මෙහි:
- `y` = `FinalScore`
- `X1` = `Math` score, `X2` = `Science` score, `X3` = `English` score
- `m1`, `m2`, `m3` = `Math`, `Science`, `English` යන විෂයයන් `FinalScore` එකට කොතරම් බලපෑමක් කරයිද යන්න පෙන්වන සංගුණක (weights) වේ. උදාහරණයක් ලෙස, model එක ඉගෙනගත් පසු, `m1` (Math සඳහා) හි අගය අනෙක්වාට වඩා වැඩි නම්, ඉන් අදහස් වන්නේ, `FinalScore` එක පුරෝකථනය කිරීමේදී, ගණිත ලකුණු වලට වැඩි වැදගත්කමක් ඇති බවයි.
- `c` = තවමත් මූලික (baseline) ලකුණයි.
Scikit-learn Library එක භාවිතා කිරීම
දැන් ඔබට Linear Regression පිටුපස ඇති ගණිතමය සිද්ධාන්තය පිළිබඳව හොඳ අවබෝධයක් ඇත. නමුත්, වාසනාවකට මෙන්, අපට මෙම `m` සහ `c` අගයන් සොයා ගැනීමේ සංකීර්ණ ගණනය කිරීම් අතින් සිදු කිරීමට අවශ්ය නැත. මේ සඳහා, Python ලෝකයේ Machine Learning සඳහාම වෙන්වූ, රන් ප්රමිතියක් ලෙස සැලකෙන library එකක් ඇත. ඒ තමයි Scikit-learn (උච්චාරණය: සයි-කිට්-ලර්න්).
Scikit-learn යනු Linear Regression, Decision Trees, SVM වැනි සිය ගණනක් ML ඇල්ගොරිතම, භාවිතා කිරීමට ඉතා පහසු වන පරිදි සකසා ඇති, මෙවලම් පෙට්ටියක් (toolbox) වැනිය. අපට අවශ්ය වන්නේ, එම මෙවලම් පෙට්ටියෙන් අපට අවශ්ය ඇල්ගොරිතමය තෝරාගෙන, අපගේ දත්ත එයට ලබා දීම පමණි.
අපගේ ව්යාපෘතිය සඳහා, අපි Scikit-learn වෙතින් `LinearRegression` class එක import කරගන්නෙමු.
from sklearn.linear_model import LinearRegression
මෙම code පේළියෙන් කියවෙන්නේ, "sklearn library එකේ, linear_model කියන මොඩියුලය තුළින්, LinearRegression නම් මෙවලම මගේ script එකට ගෙන්වා ගන්න" යන්නයි.
ඉන්පසු, අපි එම මෙවලමෙන් අපගේම "ඉගෙන ගන්නා" (learner) හෙවත් model object එකක් නිර්මාණය කරගන්නෙමු.
model = LinearRegression()
දැන්, `model` නම් විචල්යය තුළ, අපගේ දත්ත වලින් ඉගෙන ගැනීමට සූදානම්, හිස් Linear Regression model එකක් ඇත. එය හරියට, කිසිවක් නොදන්නා, නමුත් ඉගෙන ගැනීමට සූදානම්ව සිටින බුද්ධිමත් ශිෂ්යයෙකු වැනිය.