පසුගිය මොඩියුලයේදී, අපි Python ලෝකයේ දත්ත විශ්ලේෂණය සඳහා ඇති ප්රබලම මෙවලම වන Pandas library එකට හඳුන්වා දීමක් ලබා ගත්තෙමු. අපි අපගේ ශිෂ්ය ලකුණු දත්ත, DataFrame නම් වූ පිළිවෙලට සකස් කළ වගුවකට load කර, `head()` සහ `describe()` වැනි විධාන මගින් එහි මූලික ගුණාංග පරීක්ෂා කළෙමු. දැන් අපගේ දත්ත program එක තුළ සුරක්ෂිතව ඇත. ඊළඟට ඇත්තේ Machine Learning model එකක් ගොඩනැගීමේ ක්රියාවලියේ ඇති, තීරණාත්මකම දත්ත පිළියෙල කිරීමේ පියවරකි.
එය නම්, අපගේ සම්පූර්ණ දත්ත කට්ටලය, model එකට ඉගෙන ගැනීමට අවශ්ය කොටස් දෙකකට වෙන් කිරීමයි: Features (X) සහ Target (y). මෙම මොඩියුලය සම්පූර්ණයෙන්ම වෙන්වන්නේ මෙම ක්රියාවලිය පැහැදිලි කිරීමටයි. මෙය නිවැරදිව තේරුම් ගැනීම, ඔබගේ සම්පූර්ණ ML ගමනටම අතිශයින් වැදගත් වනු ඇත.
ML Models වලට X → y Mapping එකක් අවශ්ය ඇයි?
අපි Module 1 හිදී කතා කළා, Supervised Machine Learning යනු දත්ත සහ ඊට අදාළ පිළිතුරු ලබා දී, පරිගණකයට ඒ අතර ඇති සම්බන්ධතාවය ඉගෙන ගැනීමට සැලැස්වීම බව. මෙය හරියටම අප දැන් කිරීමට සූදානම් වන දෙයයි.
සරල උපමාවක්: විභාගයකට පාඩම් කරන ශිෂ්යයෙකු ගැන සිතන්න. ශිෂ්යයාට Past Papers පොතක් ලැබේ. එම පොතේ ප්රශ්න (Questions) සහ ඒවයේ පිළිතුරු (Answers) යන දෙකම ඇත. ශිෂ්යයා කරන්නේ ප්රශ්නය කියවා, පිළිතුර අධ්යයනය කර, ප්රශ්නය සහ පිළිතුර අතර ඇති සම්බන්ධය ඉගෙන ගැනීමයි. දහස් ගණනක් ප්රශ්න සහ පිළිතුරු මෙසේ අධ්යයනය කළ පසු, ශිෂ්යයාගේ මොළය තුළ රටාවක් ගොඩනැගේ. ඉන්පසු, සැබෑ විභාගයේදී, මින් පෙර නොදුටු අලුත් ප්රශ්නයක් (new question) දුටු විට, ඉගෙනගත් රටාව මත පදනම්ව, ඊට අදාළ පිළිතුර (answer) කුමක් විය හැකිදැයි අනුමාන කිරීමට ශිෂ්යයාට හැකියාව ලැබේ.
අපගේ ML model එකත් මේ ශිෂ්යයා වැනිය.
- Features (X) යනු ප්රශ්න පත්රයයි (Past Questions).
- Target (y) යනු පිළිතුරු පත්රයයි (Marking Scheme).
එබැවින්, model එක පුහුණු කිරීමට පෙර, අපගේ සම්පූර්ණ DataFrame එකෙන්, "ප්රශ්න ටික" (X) සහ "පිළිතුරු ටික" (y) පැහැදිලිව වෙන් කර, කොටස් දෙකක් ලෙස සකස් කිරීම අනිවාර්ය වේ.
Independent Variables (X) = Subject Marks
Independent Variables හෙවත් Features (X) යනු අපගේ අනාවැකිය කිරීමට පදනම් කරගන්නා තොරතුරුයි. අපගේ ව්යාපෘතියේදී, අප `FinalScore` එක predict කිරීමට භාවිතා කරන්නේ `Math`, `Science`, සහ `English` යන ලකුණුයි. එබැවින්, අපගේ X dataset එක මෙම තීරු තුනෙන් පමණක් සමන්විත විය යුතුය.
Pandas DataFrame එකකින් අපට අවශ්ය තීරු පමණක් තෝරා ගැනීම (selecting columns) ඉතා පහසුය. නමුත් මෙහිදී අපට අවශ්ය වන්නේ, මුල් DataFrame එකෙන් අපට අනවශ්ය තීරු ඉවත් කිරීමයි. අපගේ X dataset එක නිර්මාණය කිරීමට, `df` DataFrame එකෙන් `FinalScore` සහ `StudentID` යන තීරු දෙක ඉවත් කළ යුතුය. `StudentID` ඉවත් කරන්නේ එය ශිෂ්යයාව හඳුනාගැනීමට ඇති ලේබලයක් මිස, ඔහුගේ ලකුණු කෙරෙහි බලපෑමක් ඇති කරන feature එකක් නොවන නිසාය.
තීරු ඉවත් කිරීම සඳහා Pandas හි `.drop()` method එක භාවිතා කළ හැක.
# Features (X) - We drop the columns we DON'T need
X = df.drop(columns=['StudentID', 'FinalScore'])
# Let's print the head of X to verify
print("Features (X):")
print(X.head())
මෙම code එක විග්රහ කරමු:
- `df.drop(...)`: `df` DataFrame එකෙන් යමක් ඉවත් කිරීමට මෙම method එක call කරන්න.
- `columns=['StudentID', 'FinalScore']`: ඉවත් කළ යුතු තීරු වල නම් ලැයිස්තුවක් (a list of column names) ලෙස ලබා දෙන්න. අපට තීරු එකකට වඩා ඉවත් කිරීමට අවශ්ය නිසා, අපි ඒවා `[]` වරහන් තුළ ලැයිස්තුවක් ලෙස ලබා දෙමු.
- `X = ...`: ඉහත තීරු දෙක ඉවත් කළ පසු ඉතිරි වන DataFrame එක (එනම්, `Math`, `Science`, `English` තීරු පමණක් ඇති) `X` නම් නව විචල්යයකට assign කරන්න.
මෙම code එක run කළ විට, ඔබට `StudentID` සහ `FinalScore` නොමැතිව, අනෙක් තීරු තුන පමණක් සහිත DataFrame එකක මුල් පේළි 5 පෙනෙනු ඇත.
Dependent Variable (y) = Final Score
Dependent Variable හෙවත් Target (y) යනු අප පුරෝකථනය කිරීමට උත්සාහ කරන දෙයයි. අපගේ ව්යාපෘතියේදී එය `FinalScore` වේ. අපට දැන් අවශ්ය වන්නේ, මුල් `df` DataFrame එකෙන් `FinalScore` තීරුව පමණක් තෝරාගෙන, එය `y` නම් විචල්යයකට assign කර ගැනීමයි.
Pandas DataFrame එකකින් තනි තීරුවක් තෝරා ගැනීමට ක්රම කිහිපයක් ඇත, නමුත් වඩාත්ම පැහැදිලි සහ සුලභ ක්රමය වන්නේ හතරැස් වරහන් `[]` භාවිතා කිරීමයි.
y = df['FinalScore']
# Let's print the head of y to verify
print("\nTarget (y):")
print(y.head())
මෙම code එක විග්රහ කරමු:
- `df['FinalScore']`: `df` DataFrame එකෙන්, 'FinalScore' යන නම ඇති තීරුව තෝරා ගන්න. තීරුවේ නම string එකක් (උද්ධෘත ලකුණු තුළ) ලෙස ලබා දිය යුතුය.
- `y = ...`: තෝරාගත් `FinalScore` තීරුව, `y` නම් නව විචල්යයකට assign කරන්න.
මෙහිදී සිත්ගන්නා කරුණක් වන්නේ, `X` යනු තීරු කිහිපයක් ඇති DataFrame එකක් වන අතර, `y` යනු තනි තීරුවක් පමණක් ඇති Pandas Series එකක් වීමයි. Series යනු DataFrame එකක තනි තීරුවක් නියෝජනය කරන, එක්-මාන (1-dimensional) දත්ත ව්යුහයකි. Scikit-learn වැනි ML libraries අපෙන් බලාපොරොත්තු වන්නේ X DataFrame එකක් ලෙසත්, y Series එකක් ලෙසත් ලබා දීමයි.
මෙම code එක run කළ විට, ඔබට `FinalScore` තීරුවේ ඇති මුල් අගයන් 5 පමණක්, එහි දත්ත වර්ගය (dtype) සමඟින් පෙනෙනු ඇත.
සම්පූර්ණ Script එක
මෙම මොඩියුලය අවසානයේ, අපගේ සම්පූර්ණ Python script එක මේ ආකාරයෙන් දිස්විය යුතුය:
import pandas as pd # 1. Load the data (using the dictionary method for this example) 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] } df = pd.DataFrame(student_data) # 2. Separate into Features (X) and Target (y) X = df.drop(columns=['StudentID', 'FinalScore']) y = df['FinalScore'] # 3. Verify the separation print("----- FEATURES (X) -----") print(X.head()) print("\n----- TARGET (y) -----") print(y.head()) # Verify the shapes print(f"\nShape of X: {X.shape}") print(f"Shape of y: {y.shape}")