def validate(self, features, labels, number_folds):
"""
Compute a model's performance metrics based on k-fold cross-validation technique.
Parameters
----------
features: array-like of shape = [number_samples, number_features]
The validation input samples.
labels: array-like of shape = [number_samples] or [number_samples, number_outputs]
The target values (class labels in classification).
number_folds: int
The amount of folds for the k-fold cross-validation.
If 0 compute metrics withput folds.
If > 0 compute metrics with n folds, n=number_folds.
Return
----------
accuracy: float
The accuracy of the model based on it's confusion matrix.
precision: float
The precision of the model based on it's confusion matrix.
sensitivity: float
The sensitivity of the model based on it's confusion matrix.
specificity: float
The specificity of the model based on it's confusion matrix.
kappa: float
The Cohen's Kappa of the model based on it's confusion matrix.
"""
if number_folds == 0:
predictions = self.model.predict(features)
else:
predictions = cross_val_predict(self.model, features, labels, cv = number_folds)
matrix = confusion_matrix(labels, predictions)
sum_columns = numpy.sum(matrix, 0)
sum_rows = numpy.sum(matrix, 1)
diagonal_sum = numpy.trace(matrix)
total_sum = numpy.sum(sum_rows)
accuracy = diagonal_sum / total_sum
temp_precision = []
temp_sensitivity = []
temp_specificity = []
for i in range(len(matrix)):
temp_precision.append(matrix[i][i] / sum_columns[i])
temp_sensitivity.append(matrix[i][i] / sum_rows[i])
temp_reduced_sum = total_sum - sum_rows[i] - sum_columns[i] + matrix[i][i]
temp_specificity.append(temp_reduced_sum / (temp_reduced_sum + sum_columns[i] - matrix[i][i]))
precision = sum(temp_precision * sum_rows) / total_sum
sensitivity = sum(temp_sensitivity * sum_rows) / total_sum
specificity = sum(temp_specificity * sum_rows) / total_sum
kappa_sum = sum(sum_rows * sum_columns)
kappa_numerator = (total_sum * diagonal_sum) - kappa_sum
kappa_denominator = (total_sum * total_sum) - kappa_sum
kappa = kappa_numerator / kappa_denominator
return accuracy, precision, sensitivity, specificity, kappa
评论列表
文章目录