Sololearn 自学机器学习 12 使用 Scikit-Learn 计算各种指标
SkLearn 中的准确率、精确度、召回率和 F1 分数
SkLearn 已经内置了我们前面提到过的各个对于模型评估的指标,包括准确率(Accuracy)、精确度(Precision)、召回率(Recall)以及 F1 分数(F1 Score)。
现在我们将尝试调用他们为我们工作。现在,让我们重新回忆泰坦尼克号数据集逻辑回归模型的构建方法:
from sklearn.linear_model import LogisticRegression |
我们读取 train.csv 然后保存在 df DataFrame 中,然后对数据进行预处理,将 Age 列的缺失值添加为 Age 的平均值。再创建 male 变量,保存数据点是否为男性。再来是创建特征值 X 和目标值 y。接下来创建一个 LogisticRegression
类来构建我们的模型,并将特征值和目标值传递进去训练模型。最后创建一个 y_pred
变量来保存我们预测的结果
现在,我们来使用指标函数(metric functions),先引用它。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score |
每个函数接受两个一维的 numpy 数组:目标的真实值和目标的预测值。我们有目标的真实值和目标的预测值。因此,我们可以使用以下的度量函数。
from sklearn.linear_model import LogisticRegression |
返回值
accuracy: 0.797979797979798 |
我们可以看到准确率为 79%,这意味着模型的预测有 80% 是正确的。精确度为 75%,这是指模型正类别预测中正确的百分比。召回率为 70%,表示模型正确预测的正类别占所有正类别的百分比。F1 分数为 73%,是精确度和召回率的平均值。
对于单个模型,度量值并不能提供很多信息。对于某些问题,60% 的值可能是不错的,而对于其他问题,90% 的值可能是不错的,这取决于问题的难度。我们将使用度量值来比较不同的模型,以选择最佳的模型。
from sklearn.metrics import classification_report |
The above code give precision, recall & f1_score
Sklearn 中的混淆矩阵
Scikit-learn提供了一个混淆矩阵函数,我们可以使用它来获取混淆矩阵中的四个值(真正例、假正例、假负例和真负例)。假设y是我们的真实目标值,y_pred是预测值,我们可以如下使用confusion_matrix函数:
from sklearn.metrics import confusion_matrix |
返回值如下:
[[469 80] |
Sklearn 反转矩阵使其先显示负值,以下就是返回值的结构:
Predicted Negative | Predicted Positive | |
---|---|---|
Actual Negative | 469 | 80 |
Actual Positive | 100 | 242 |
这是我们通常绘制混淆矩阵的方式:
Actual Positive | Actual Negative | |
---|---|---|
Predicted Positive | 242 | 80 |
Predicted Negative | 100 | 469 |
Since negative target values correspond to 0 and positive to 1, scikit-learn has ordered them in this order. Make sure you double check that you are interpreting the values correctly!
由于负的目标值对应0,正的目标值对应1,scikit-learn以这个顺序排列它们。确保您仔细检查并正确解释这些值!
衍生介绍矩阵反转的原理
import matplotlib.pyplot as plt |