Python/machine_learning/scoring_functions.py

140 lines
3.3 KiB
Python
Raw Permalink Normal View History

import numpy as np
2017-08-19 05:23:00 +00:00
""" Here I implemented the scoring functions.
MAE, MSE, RMSE, RMSLE are included.
Those are used for calculating differences between
predicted values and actual values.
Metrics are slightly differentiated. Sometimes squared, rooted,
even log is used.
Using log and roots can be perceived as tools for penalizing big
errors. However, using appropriate metrics depends on the situations,
2017-08-19 05:23:00 +00:00
and types of data
"""
2019-10-05 05:14:13 +00:00
# Mean Absolute Error
2017-08-19 05:23:00 +00:00
def mae(predict, actual):
"""
Examples(rounded for precision):
>>> actual = [1,2,3];predict = [1,4,3]
2024-09-30 21:01:15 +00:00
>>> float(np.around(mae(predict,actual),decimals = 2))
0.67
>>> actual = [1,1,1];predict = [1,1,1]
2024-09-30 21:01:15 +00:00
>>> float(mae(predict,actual))
0.0
"""
2017-08-19 05:23:00 +00:00
predict = np.array(predict)
actual = np.array(actual)
difference = abs(predict - actual)
score = difference.mean()
return score
2019-10-05 05:14:13 +00:00
# Mean Squared Error
2017-08-19 05:23:00 +00:00
def mse(predict, actual):
"""
Examples(rounded for precision):
>>> actual = [1,2,3];predict = [1,4,3]
2024-09-30 21:01:15 +00:00
>>> float(np.around(mse(predict,actual),decimals = 2))
1.33
>>> actual = [1,1,1];predict = [1,1,1]
2024-09-30 21:01:15 +00:00
>>> float(mse(predict,actual))
0.0
"""
2017-08-19 05:23:00 +00:00
predict = np.array(predict)
actual = np.array(actual)
difference = predict - actual
square_diff = np.square(difference)
score = square_diff.mean()
return score
2019-10-05 05:14:13 +00:00
# Root Mean Squared Error
2017-08-19 05:23:00 +00:00
def rmse(predict, actual):
"""
Examples(rounded for precision):
>>> actual = [1,2,3];predict = [1,4,3]
2024-09-30 21:01:15 +00:00
>>> float(np.around(rmse(predict,actual),decimals = 2))
1.15
>>> actual = [1,1,1];predict = [1,1,1]
2024-09-30 21:01:15 +00:00
>>> float(rmse(predict,actual))
0.0
"""
2017-08-19 05:23:00 +00:00
predict = np.array(predict)
actual = np.array(actual)
difference = predict - actual
square_diff = np.square(difference)
2017-08-19 05:23:00 +00:00
mean_square_diff = square_diff.mean()
score = np.sqrt(mean_square_diff)
return score
2019-10-05 05:14:13 +00:00
# Root Mean Square Logarithmic Error
2017-08-19 05:23:00 +00:00
def rmsle(predict, actual):
"""
Examples(rounded for precision):
2024-09-30 21:01:15 +00:00
>>> float(np.around(rmsle(predict=[10, 2, 30], actual=[10, 10, 30]), decimals=2))
0.75
2024-09-30 21:01:15 +00:00
>>> float(rmsle(predict=[1, 1, 1], actual=[1, 1, 1]))
0.0
"""
2017-08-19 05:23:00 +00:00
predict = np.array(predict)
actual = np.array(actual)
2019-10-05 05:14:13 +00:00
log_predict = np.log(predict + 1)
log_actual = np.log(actual + 1)
2017-08-19 05:23:00 +00:00
difference = log_predict - log_actual
square_diff = np.square(difference)
mean_square_diff = square_diff.mean()
score = np.sqrt(mean_square_diff)
return score
2019-10-05 05:14:13 +00:00
# Mean Bias Deviation
def mbd(predict, actual):
"""
This value is Negative, if the model underpredicts,
positive, if it overpredicts.
Example(rounded for precision):
Here the model overpredicts
>>> actual = [1,2,3];predict = [2,3,4]
2024-09-30 21:01:15 +00:00
>>> float(np.around(mbd(predict,actual),decimals = 2))
50.0
Here the model underpredicts
>>> actual = [1,2,3];predict = [0,1,1]
2024-09-30 21:01:15 +00:00
>>> float(np.around(mbd(predict,actual),decimals = 2))
-66.67
"""
predict = np.array(predict)
actual = np.array(actual)
difference = predict - actual
2019-10-05 05:14:13 +00:00
numerator = np.sum(difference) / len(predict)
denumerator = np.sum(actual) / len(predict)
# print(numerator, denumerator)
score = float(numerator) / denumerator * 100
return score
def manual_accuracy(predict, actual):
return np.mean(np.array(actual) == np.array(predict))