පළමු මොඩියුලයේදී අපි Machine Learning හි සිත්ගන්නාසුළු සංකල්පීය පැත්ත ගවේෂණය කළා. දැන්, අපි අපේ අත් dirty කරගෙන, ඕනෑම data science ව්යාපෘතියක වැදගත්ම සහ මූලිකම අංගය වන දත්ත (Data) සමඟ වැඩ කිරීමට පටන් ගනිමු. දත්ත යනු අපගේ Machine Learning model එකේ "ඉන්ධන" (fuel) වැනිය. හොඳ තත්ත්වයේ, නිවැරදිව ව්යුහගත කරන ලද ඉන්ධන නොමැතිව, ලෝකයේ බලවත්ම එන්ජිමකට වුවද ක්රියා කළ නොහැක. ඒ ආකාරයටම, හොඳ දත්ත නොමැතිව, හොඳම ML ඇල්ගොරිතමයට පවා නිවැරදි අනාවැකි පළ කළ නොහැක.
මෙම මොඩියුලයේදී, අපි න්යායෙන් මිදී, ප්රායෝගිකව අපගේ "Predict 1st Place Student" ව්යාපෘතිය සඳහාම වෙන්වූ කුඩා, නමුත් අර්ථවත් දත්ත කට්ටලයක් (dataset) නිර්මාණය කරන්නෙමු. අපි දත්ත ගබඩා කළ හැකි විවිධ ආකෘති (formats) ගැන කතා කරන අතර, වඩාත්ම වැදගත් ලෙස, ML model එකකට "තේරෙන" භාෂාවෙන් දත්ත වෙන් කරන්නේ කෙසේදැයි ඉගෙන ගනිමු.
Students 10 දෙනාගේ Subject Marks
අපි ඉගෙනීමේ ක්රියාවලියේදී සිටින නිසා, අති විශාල, සංකීර්ණ dataset එකක් සමඟ වැඩ ආරම්භ කිරීමෙන් පලක් නැත. ඒ වෙනුවට, අපට පහසුවෙන් තේරුම් ගත හැකි, කළමනාකරණය කළ හැකි කුඩා dataset එකකින් ආරම්භ කිරීම වඩාත් සුදුසුය. අපි ශිෂ්යයින් 10 දෙනෙකුගෙන් යුත් කල්පිත පන්තියක් සලකා බලමු. අපගේ model එක පුහුණු කිරීම සඳහා, අපට එක් එක් ශිෂ්යයා පිළිබඳ තොරතුරු කිහිපයක් අවශ්ය වේ.
අපට අවශ්ය දත්ත මොනවාද? අපගේ ඉලක්කය වන්නේ ශිෂ්යයෙකුගේ අවසාන ලකුණ (Final Score) පුරෝකථනය කිරීමයි. එය පුරෝකථනය කිරීමට අපට භාවිතා කළ හැක්කේ කුමක්ද? අපට ඔවුන්ගේ විවිධ විෂයයන් සඳහා වන ලකුණු භාවිතා කළ හැකිය. අපි මෙහිදී මූලික විෂයයන් තුනක් සලකා බලමු:
- ගණිතය (Math)
- විද්යාව (Science)
- ඉංග්රීසි (English)
මෙම විෂයයන් තුනේ ලකුණු මත පදනම්ව, ශිෂ්යයෙකුගේ අවසාන ලකුණ (Final Score) පුරෝකථනය කිරීමට අපි උත්සාහ කරමු. මතක තබා ගන්න, model එක පුහුණු කිරීම සඳහා, අපට මෙම සියලු දත්ත, එනම් විෂය ලකුණු සහ ඊට අනුරූප සැබෑ අවසාන ලකුණ යන දෙකම අවශ්ය වේ. මෙය "லேபிளிடப்பட்ட දත්ත" (Labeled Data) ලෙස හැඳින්වේ. එනම්, අපට "ප්රශ්න" (විෂය ලකුණු) සහ "පිළිතුරු" (සැබෑ අවසාන ලකුණ) යන දෙකම තිබිය යුතුය, එවිට model එකට ප්රශ්න සහ පිළිතුරු අතර සම්බන්ධය ඉගෙන ගත හැකිය.
අපගේ කල්පිත dataset එක මෙන්න මේ වගේ දිස්වනු ඇත:
| StudentID | Math | Science | English | FinalScore |
|---|---|---|---|---|
| 1 | 85 | 90 | 75 | 83 |
| 2 | 92 | 88 | 85 | 88 |
| 3 | 78 | 82 | 80 | 80 |
| 4 | 65 | 70 | 72 | 69 |
| 5 | 95 | 98 | 92 | 95 |
| 6 | 88 | 85 | 89 | 87 |
| 7 | 71 | 75 | 68 | 71 |
| 8 | 80 | 78 | 83 | 80 |
| 9 | 98 | 95 | 97 | 97 |
| 10 | 75 | 80 | 79 | 78 |
CSV/Excel vs Python Dictionary → DataFrame
දැන් අපට දත්ත තිබේ. නමුත්, පරිගණකයකට, විශේෂයෙන්ම Python program එකකට, මෙම දත්ත ලබා දෙන්නේ කෙසේද? දත්ත ගබඩා කිරීමට සහ හුවමාරු කිරීමට විවිධ ක්රම තිබේ. අපි බහුලව භාවිතා වන ක්රම කිහිපයක් සහ අපගේ ව්යාපෘතිය සඳහා හොඳම ක්රමය කුමක්දැයි බලමු.
Excel / CSV Files
බොහෝ දෙනෙක් දත්ත සමඟ වැඩ කිරීම ආරම්භ කරන්නේ Microsoft Excel හෝ Google Sheets වැනි පැතුරුම්පත් (spreadsheet) මෘදුකාංග සමඟයි. ඉහත වගුව Excel sheet එකක නිර්මාණය කිරීම ඉතා පහසුය. මෙය දත්ත දෘශ්යමානව බැලීමට, අතින් සංස්කරණය කිරීමට, සහ සරල ගණනය කිරීම් කිරීමට ઉત્તમ ක්රමයකි.
ව්යාපෘති වලදී දත්ත හුවමාරු කිරීම සඳහා, CSV (Comma-Separated Values) ගොනු ආකෘතිය බහුලව භාවිතා වේ. CSV යනු සරල text ගොනුවකි. එහි එක් එක් පේළිය වගුවේ පේළියක් නියෝජනය කරන අතර, එක් එක් තීරුවේ අගයන් කොමාවකින් (,) වෙන් කරනු ලැබේ. ඉහත දත්ත CSV ගොනුවක මෙසේ දිස්වනු ඇත:
CSV වල ඇති වාසිය නම්, එය ඕනෑම program එකකට පාහේ කියවිය හැකි, ඉතා සරල සහ විශ්වීය (universal) ආකෘතියක් වීමයි. අපගේ Python program එකටද CSV ගොනුවකින් දත්ත පහසුවෙන් කියවිය හැක.
Python Dictionary
අපගේ දත්ත Python program එකක් තුළම කෙලින්ම ගබඩා කිරීමටද හැකිය. இதற்காக Python වල ඇති Dictionary නම් දත්ත ව්යුහය (data structure) භාවිතා කළ හැක. Dictionary එකක, 'යතුර' (key) සහ 'අගය' (value) යුගල ලෙස දත්ත ගබඩා කෙරේ. අපගේ ශිෂ්ය දත්ත Dictionary එකක මෙසේ ගබඩා කළ හැකිය:
student_data = {
'StudentID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'Math': [85, 92, 78, 65, 95, 88, 71, 80, 98, 75],
'Science': [90, 88, 82, 70, 98, 85, 75, 78, 95, 80],
'English': [75, 85, 80, 72, 92, 89, 68, 83, 97, 79],
'FinalScore': [83, 88, 80, 69, 95, 87, 71, 80, 97, 78]
}
මෙහිදී, 'Math' යනු key එක වන අතර, `[85, 92, ...]` යනු ඊට අදාළ අගයන් සහිත ලැයිස්තුව (list) වේ. මෙසේ program එක තුළම දත්ත තබා ගැනීම, කුඩා, වෙනස් නොවන datasets සඳහා පහසු ක්රමයකි.
Data Science හි රන් ප්රමිතිය: Pandas DataFrame
ඉහත ක්රම දෙකම හොඳ වුවත්, Data Science සහ Machine Learning වලදී දත්ත සමඟ වැඩ කිරීම සඳහා වන කර්මාන්ත ප්රමිතිය (industry standard) වන්නේ Pandas DataFrame භාවිතා කිරීමයි. Pandas යනු Python සඳහා වූ ඉතා බලවත් library එකකි. DataFrame යනු Pandas library එක මගින් සපයන, ද්විමාන (2-dimensional), වගු ආකාරයේ දත්ත ව්යුහයකි.
සරල උපමාවක්: Pandas DataFrame එකක් යනු Excel sheet එකක "super-powered" version එකක් ලෙස සිතන්න. ඔබට එය ඔබගේ Python code එක තුළම නිර්මාණය කිරීමට, හැසිරවීමට, සහ විශ්ලේෂණය කිරීමට හැකිය. Excel sheet එකක මෙන් rows සහ columns ඇත, නමුත් ඊට වඩා බොහෝ බලවත් විශ්ලේෂණ මෙවලම් එය සතුව ඇත.
DataFrame එකක ඇති වාසි:
- CSV ගොනුවකින් හෝ Python Dictionary එකකින් ඉතා පහසුවෙන් DataFrame එකක් නිර්මාණය කළ හැක.
- විශාල දත්ත කට්ටල (ගිගාබයිට් ගණනක දත්ත) වුවද ඉතා කාර්යක්ෂමව හැසිරවීමේ හැකියාව.
- දත්ත පිරිසිදු කිරීමට, නැතිවූ අගයන් පිරවීමට, දත්ත පරිවර්තනය කිරීමට, සහ සංඛ්යානමය විශ්ලේෂණයන් කිරීමට සුවිශේෂී functions සිය ගණනක් එහි අඩංගු වේ.
අපි ඊළඟ මොඩියුලයේදී Pandas ගැන ගැඹුරින් ඉගෙන ගන්නෙමු. නමුත් දැනට, අපගේ Python Dictionary එක Pandas DataFrame එකක් බවට පත් කරන්නේ කෙසේදැයි දළ අදහසක් ගනිමු.
df = pd.DataFrame(student_data)
# 'df' is now a powerful DataFrame object holding our student data.
Target Column (FinalScore) සහ Features (Math, Science, English)
මෙය මෙම මොඩියුලයේ ඇති වඩාත්ම වැදගත් සංකල්පයයි. අපගේ ML model එකට දත්ත ලබා දීමේදී, එය කුමක් ඉගෙන ගත යුතුද යන්න පැහැදිලිව කියා දිය යුතුය. இதற்காக අපි අපගේ dataset එක කොටස් දෙකකට වෙන් කරමු: Features සහ Target.
Features (විශේෂාංග) - The Inputs (X)
Features යනු අපගේ අනාවැකිය (prediction) කිරීමට අප භාවිතා කරන ආදාන විචල්යයන් (input variables) වේ. මේවා අපගේ model එක "දකින" තොරතුරු වන අතර, මෙම තොරතුරු මත පදනම්ව එය තීරණයක් ගනී. මේවා ස්වාධීන විචල්යයන් (Independent Variables) ලෙසද හැඳින්වේ. සාම්ප්රදායිකව, features සමූහය ඉංග්රීසි 'X' අක්ෂරයෙන් නිරූපණය කෙරේ.
අපගේ ව්යාපෘතියේදී, Features වන්නේ: `Math`, `Science`, සහ `English` යන විෂයයන්ගේ ලකුණු වේ.
`X = [Math, Science, English]`
වෙනත් උදාහරණයක් ගතහොත්, නිවසක මිල (target) පුරෝකථනය කරන model එකක, features වනුයේ නිවසේ වර්ග අඩි ප්රමාණය, නිදන කාමර ගණන, සහ එය පිහිටි ප්රදේශයයි.
Target (ඉලක්කය) - The Output (y)
Target යනු අප පුරෝකථනය කිරීමට උත්සාහ කරන ප්රතිදාන විචල්යය (output variable) වේ. මෙය අපගේ model එක ඉගෙන ගත යුතු "පිළිතුර" වේ. Target විචල්යයේ අගය, features වල අගයන් මත රඳා පවතින නිසා, මෙය පරායත්ත විචල්යය (Dependent Variable) ලෙසද හැඳින්වේ. සාම්ප්රදායිකව, target විචල්යය ඉංග්රීසි 'y' අක්ෂරයෙන් නිරූපණය කෙරේ.
අපගේ ව්යාපෘතියේදී, Target එක වන්නේ: `FinalScore` වේ.
`y = FinalScore`
X → y සම්බන්ධතාවය
Supervised Machine Learning හි සම්පූර්ණ අරමුණ වන්නේ X සහ y අතර ඇති ගණිතමය සම්බන්ධතාවය ඉගෙන ගැනීමයි. Model එකට X (features) සහ y (target) යන දෙකම ලබා දුන් විට, එය මෙම දත්ත තුළ සැඟවී ඇති රටාව සොයා ගැනීමට උත්සාහ කරයි. එම රටාව ඉගෙන ගත් පසු, අපට අලුත්, මින් පෙර නොදුටු X අගයන් (නව ශිෂ්යයෙකුගේ විෂය ලකුණු) ලබා දී, ඊට අනුරූප y අගය (ඔහුගේ/ඇයගේ FinalScore) කුමක් විය හැකිදැයි පුරෝකථනය කරන ලෙස model එකෙන් ඉල්ලා සිටිය හැක.
`FinalScore ≈ f(Math, Science, English)`
Features (ආදාන) සහ Target (ප්රතිදානය) අතර ඇති මෙම වෙනස පැහැදිලිව වටහා ගැනීම, සාර්ථක ML model එකක් ගොඩනැගීමේ පළමු සහ අත්යවශ්යම පියවරයි.