Module 7 of 10

Predictions ගැනීම

සත්‍යයේ මොහොත පැමිණ ඇත! අප පුහුණු කළ model එක භාවිතා කර, එහි අනාවැකි සැබෑ ලකුණු සමඟ සසඳා බලමු.

පසුගිය මොඩියුලයේදී, අපි අපගේ Machine Learning ව්‍යාපෘතියේ වැදගත්ම ක්‍රියාවලියක් වන Model Training සිදු කළෙමු. අපි අපගේ Linear Regression model එකට X (features) සහ y (target) දත්ත ලබා දී, `.fit()` method එක මගින් එය පුහුණු කළෙමු. එම ක්‍රියාවලිය අවසානයේ, අපගේ `model` object එක, විෂය ලකුණු සහ අවසාන ලකුණ අතර ඇති ගණිතමය සම්බන්ධතාවය "ඉගෙන" ගත්තේය. එය දැන් හිස් වස්තුවක් නොව, දැනුමෙන් සන්නද්ධ, පුහුණු වූ ආකෘතියකි.

දැන් කුමක්ද? පුහුණුවෙන් පලක් නැත, එම දැනුම ප්‍රායෝගිකව භාවිතා නොකරන්නේ නම්. මෙම මොඩියුලයේදී, අපි අපගේ පුහුණු වූ model එකේ සැබෑ හැකියාව පරීක්ෂා කරමු. අපි එයට මින් පෙර නොදුටු දත්ත (හෝ අපගේ නඩුවේදී, එය පුහුණු වූ දත්තම) ලබා දී, අනාවැකි (predictions) පළ කරන ලෙස ඉල්ලා සිටිමු. ඉන්පසු, එම අනාවැකි කෙතරම් නිවැරදිදැයි සැබෑ ලෝකයේ ප්‍රතිඵල සමඟ සසඳා බලමු.

Predictions for All Students

Scikit-learn හි ඇති සුන්දරත්වය නම්, එහි ඇති සරල සහ ස්ථාවර භාවයයි. Model එකක් පුහුණු කිරීමට `.fit()` method එක භාවිතා කළා සේම, පුහුණු වූ model එකකින් අනාවැකි ලබා ගැනීමටද ඇත්තේ තවත් එක් සරල method එකකි: `.predict()`.

සරල උපමාවක්: අපේ "ශිෂ්‍යයා" (model) දැන් Past Papers (training data) පාඩම් කර විභාගයට සූදානම්. `.predict()` method එක call කිරීම, හරියටම ඒ ශිෂ්‍යයාට අලුත් ප්‍රශ්න පත්‍රයක් (X) ලබා දී, "හරි, ඔයා පාඩම් කරපු දේවල් පාවිච්චි කරලා, මේ ප්‍රශ්න ටිකට උත්තර ලියන්න" කියා පවසනවා වැනිය. Model එක, තමන් ඉගෙනගත් `y = mX + c` සමීකරණය භාවිතා කර, ලබාදුන් එක් එක් X අගය සඳහා ඊට අනුරූප y අගය කුමක් විය යුතුදැයි ගණනය කර, අපට ප්‍රතිඵල ලබා දෙයි.

`.predict()` method එක බලාපොරොත්තු වන්නේ එක් තර්කයක් (one argument) පමණි:

# We continue from Module 6 where our 'model' is already trained.
# 'X' contains the Math, Science, and English scores for all students.

# Get predictions for all students in our dataset
predictions = model.predict(X)

# Print the predictions to see what they look like
print(predictions)

මෙම code එක run කළ විට, ඔබට ලැබෙන ප්‍රතිදානය, Python ලැයිස්තුවක් හෝ NumPy array එකක් වැනි, සංඛ්‍යා සමූහයක් වනු ඇත.

[83.5 89.2 80.1 69.8 96.5 87.3 70.4 81.2 97.8 78.2]

මෙම array එකේ ඇති එක් එක් සංඛ්‍යාව, අපගේ මුල් `X` DataFrame එකේ තිබූ ඊට අනුරූප ශිෂ්‍යයා සඳහා model එක විසින් පුරෝකථනය කරන ලද `FinalScore` එක වේ. උදාහරණයක් ලෙස, `83.5` යනු පළමු ශිෂ්‍යයා සඳහා වන අනාවැකියයි, `89.2` යනු දෙවන ශිෂ්‍යයා සඳහා වන අනාවැකියයි, යනාදී වශයෙනි.

Add `PredictedScore` Column to DataFrame

ඉහත සංඛ්‍යා array එක ප්‍රයෝජනවත් වුවත්, එය තනිවම බැලූ විට, කුමන අනාවැකිය කුමන ශිෂ්‍යයාටද, සහ සැබෑ ලකුණ කුමක්දැයි සැසඳීම අපහසුය. විශ්ලේෂණය පහසු කර ගැනීම සඳහා, හොඳම පුරුද්දක් වන්නේ මෙම අනාවැකි, අපගේ මුල් DataFrame එකට නව තීරුවක් (new column) ලෙස එකතු කිරීමයි.

Pandas DataFrame එකකට නව තීරුවක් එකතු කිරීම ඉතා පහසුය. අපට අවශ්‍ය වන්නේ DataFrame එකට නව තීරු නමක් ලබා දී, එම තීරුවට අපගේ `predictions` array එක සමාන කිරීම පමණි.

# For easier comparison, let's add these predictions as a new column
# in our original DataFrame 'df'.

df['PredictedScore'] = predictions

# Now, let's print the entire DataFrame to see our new column
print(df)

මෙම සරල code පේළිය මගින්, Pandas විසින් `df` DataFrame එකේ `PredictedScore` නමින් නව තීරුවක් සාදා, අපගේ `predictions` array එකේ ඇති එක් එක් අගය, පිළිවෙලින්, DataFrame එකේ එක් එක් පේළියට ඇතුළත් කරයි.

Compare Actual vs Predicted Marks

දැන් තමයි අපගේ විශ්ලේෂණයේ වඩාත්ම සිත්ගන්නාසුළු කොටස. අපගේ DataFrame එකේ දැන් සැබෑ `FinalScore` (අපගේ y) සහ model එකේ `PredictedScore` යන දෙකම එකිනෙකට යාබදව ඇත. දැන් අපට ඒවා පහසුවෙන් සැසඳිය හැකිය.

ඉහත `print(df)` විධානයෙන් ලැබෙන ප්‍රතිදානය මේ ආකාරයෙන් දිස්වනු ඇත:

StudentID Math Science English FinalScore (Actual) PredictedScore
18590758383.5
29288858889.2
37882808080.1
46570726969.8
59598929596.5

මෙම වගුව දෙස බලන්න!

අපගේ model එක, කිසිදු ශිෂ්‍යයෙකු සඳහා 100% ක් නිවැරදි අනාවැකියක් පළ කර නැත. නමුත්, එය වැදගත් නොවේ. Machine Learning හි අරමුණ වන්නේ "දළ වශයෙන් නිවැරදි" (approximately correct) වීමයි. අපගේ model එකේ අනාවැකි, සැබෑ ලකුණු වලට ඉතා ආසන්නව පිහිටා ඇත. මෙයින් පෙනී යන්නේ, අපගේ සරල Linear Regression model එක, විෂය ලකුණු සහ අවසාන ලකුණ අතර ඇති යටින් පවතින (underlying) රටාව සාර්ථකව ඉගෙනගෙන ඇති බවයි.

සැබෑ ලකුණ සහ පුරෝකථනය කළ ලකුණ අතර ඇති වෙනස දෝෂය (Error) හෙවත් Residual ලෙස හැඳින්වේ. Model එකක් කෙතරම් හොඳදැයි මැනීමේදී, මෙම දෝෂයන්ගේ සාමාන්‍යය (average error) කොපමණදැයි ගණනය කිරීම එක් ක්‍රමයකි. අපගේ කුඩා ව්‍යාපෘතියේදී, දෘශ්‍ය පරීක්ෂාවකින්ම (visual inspection) model එක හොඳින් ක්‍රියා කරන බව පැහැදිලිය.