在机器学习中使用分类模型时,有三个常见的指标,我们用来评估模型的质量。
1.精度:正确的正面预测相对于总的正面预测的百分比。
2.2.召回率:正确的阳性预测相对于实际阳性预测总数的百分比。
3.3.F1得分:精度和召回率的加权谐波平均值。越接近1,模型就越好。
- F1得分:2 * (精确度 * 召回率) / (精确度 + 召回率)
使用这三个指标,我们可以了解一个给定的分类模型在预测一些响应变量的结果方面的能力。
幸运的是,在Python中拟合分类模型时,我们可以使用sklearn库中的**classification_report()**函数来生成所有这三个指标。
下面的例子展示了如何在实践中使用这个函数。
例子:如何使用sklearn中的分类报告
在这个例子中,我们将拟合一个逻辑回归模型,使用得分和助攻来预测1000名不同的大学篮球运动员是否被选入NBA。
首先,我们将导入必要的软件包,在Python中执行逻辑回归:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
接下来,我们将创建包含1000名篮球运动员信息的数据框:
#make this example reproducible
np.random.seed(1)
#create DataFrame
df = pd.DataFrame({'points': np.random.randint(30, size=1000),
'assists': np.random.randint(12, size=1000),
'drafted': np.random.randint(2, size=1000)})
#view DataFrame
df.head()
points assists drafted
0 5 1 1
1 11 8 0
2 12 4 1
3 8 7 0
4 9 0 0
注:数值为0表示一个球员没有被选中,而数值为1表示一个球员被选中。
接下来,我们将把数据分成训练集和测试集,并拟合逻辑回归模型:
#define the predictor variables and the response variable
X = df[['points', 'assists']]
y = df['drafted']
#split the dataset into training (70%) and testing (30%) sets
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)
最后,我们将使用classification_report()函数来打印我们模型的分类指标:
#print classification report for model
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 0.51 0.58 0.54 160
1 0.43 0.36 0.40 140
accuracy 0.48 300
macro avg 0.47 0.47 0.47 300
weighted avg 0.47 0.48 0.47 300
下面是如何解释输出:
精度:在模型预测会被选中的所有球员中,只有43%的人实际被选中。
召回率:在所有实际被选中的球员中,该模型只正确预测了其中**36%**的球员的结果。
F1得分:这个值的计算方法是:
- F1得分:2 * (准确率 * 召回率) / (准确率 + 召回率)
- F1得分:2 * (.43 * .36) / (.43 + .36)
- F1得分:0.40。
由于这个数值不是很接近1,所以它告诉我们,这个模型在预测球员是否会被选中方面做得很差。
支持率:这些值只是告诉我们在测试数据集中有多少球员属于每个类别。我们可以看到,在测试数据集中的球员中,有160人没有被征召,140人被征召。
注意:你可以在这里找到分类报告()函数的完整文档。
其他资源
下面的教程提供了关于如何在Python中使用分类模型的额外信息: