机器学习:分类评估方法
机器学习:分类评估方法
在机器学习模型训练和评估中,尤其对于分类任务,评估方法至关重要。它们帮助我们了解模型在未见数据上的表现,确保模型能够进行有效的预测。以下是一些常用的分类评估方法的详细介绍,包括准确率、混淆矩阵和分类报告。
1. 准确率 (Accuracy)
定义: 准确率是正确预测的样本数与总样本数的比率,公式如下:
其中:
TP (True Positives): 真阳性,正确预测为正类的样本数。
TN (True Negatives): 真阴性,正确预测为负类的样本数。
FP (False Positives): 假阳性,错误预测为正类的样本数。
FN (False Negatives): 假阴性,错误预测为负类的样本数。
优缺点:
优点: 简单易懂,计算容易。
缺点: 在类别不平衡的情况下,准确率可能会误导,例如如果大多数样本属于一个类别,模型只需预测该类别即可获得高准确率。
2. 混淆矩阵 (Confusion Matrix)
定义: 混淆矩阵是一种可视化工具,用于总结分类模型的表现。它显示真实标签与模型预测标签之间的关系。通常以 2x2 矩阵的形式展示二分类问题:
优缺点:
优点: 提供了详细的分类信息,能够显示模型的表现如何,在不同类别上的准确性如何。
缺点: 矩阵的解释可能对初学者来说不够直观。
3. 分类报告 (Classification Report)
定义: 分类报告提供了更多关于模型性能的详细统计信息,包括以下几个重要指标:
3.1 精确率 (Precision)
正确预测的正类样本占所有预测为正类样本的比例。
3.2 召回率 (Recall)
正确预测的正类样本占实际正类样本的比例,也称为灵敏度。
3.3 F1 分数 (F1 Score)
精确率与召回率的调和平均值,能够提供一个综合评估。
其中:P为精确率、R为召回率。
优缺点:
优点: 可以更全面地评估模型的性能,特别是在处理类别不平衡时,能够更准确地反映模型表现。
缺点: 计算过程较复杂,需要均衡考虑精确率和召回率。
4.示例
癌症分类预测-良/恶性乳腺癌肿瘤预测
# 导入模块
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score,classification_report,confusion_matrix,accuracy_score
# 1.获取数据
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv('./data/breast+cancer+wisconsin+original/breast-cancer-wisconsin.data',names=names)
# 2.基本数据处理
# 2.1 缺失值处理
# 将问号处替换成NAN
data = data.replace(to_replace='?',value=np.nan)
# 删除name对应的航数据
data = data.dropna()
# 2.2 确定特征值,目标值
x = data.iloc[:,1:-1]
y = data.Class
# 2.3 分割数据
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=2,test_size=0.2)
# 3.特征工程(标准化)
# 创建标准器(实例化一个标准化对象)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 4.机器学习(逻辑回归)
# 实例化一个估计器(模型estimator)
estimator = LogisticRegression()
# 模型训练
estimator.fit(x_train,y_train)
# 5.模型评估
# 5.1 测值
y_predict = estimator.predict(x_test)
print('预测值:\n',y_predict)
# 5.2.1 准确率
ret = estimator.score(x_test,y_test)
print('准确率:',ret)
# 5.2.2 准确率
accuracy = accuracy_score(y_test,y_predict)
print('准确率:',accuracy)
# 5.3 混淆矩阵
matrix = confusion_matrix(y_test,y_predict)
print('混淆矩阵:\n',matrix)
# 5.4 分类报告:精确率/召回率/F1指标评价
ret = classification_report(y_test,y_predict,labels=(2,4))
print(ret)
5. 总结
在进行 LogisticRegression
或任何其他分类模型的评估时,使用准确率、混淆矩阵和分类报告可以获得关于模型性能的多维视角。这些评估方法对理解模型在特定任务上的优缺点至关重要,能够帮助我们做出更有信息依据的决策。