机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)

目录

一、基础理论

0、引言

1、TPR与FPR

1、TPR(召回率)

2、FPR

 2、ROC曲线

3、AUC指标

二、癌症分类的模型检测(AUC指标)

1、正反例转1、0

2、计算AUC指标

总代码


一、基础理论

0、引言

在开始讲解以前,先假设一种情况:

机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)_第1张图片

这种情况样本不均衡(正样本太多,没法预测到正确的结果)。

衡量样本不均衡时的分类器效果,这时引入:ROC曲线和AUC指标

1、TPR与FPR

1、TPR(召回率)

TPR = TP / (TP+FN) = 召回率

所有真实类别为1的样本中,预测类别为1 比例。(召回率)

2、FPR

FPR = FP / (FP+TN)

所有真实类别为0的样本中,预测类别为0的比例。

 2、ROC曲线

根据TPR和FPR的区别。

机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)_第2张图片

3、AUC指标

用AUC检测模型好坏

AUC越接近1,越完美;越接近0.5,效果越不好(近乎随机猜测)

只能用来评价二分类。

非常适合评价样本不均衡分类的情况。

还是上面的那个例子,用AUC检测模型效果: 

机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)_第3张图片

AUC=0.5,可以得出:模型效果很差(等于猜测) 

sklearn.metrics.roc_auc_score

机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)_第4张图片

二、癌症分类的模型检测(AUC指标)

1、正反例转1、0

一开始是这样的 :

机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)_第5张图片

由于需要正例、反例分别为1、0.,所以进行一次数据变换(1,0)

# 1、把正例和反例分别用1和0表示
targer_true = np.where(test_target==4, 1, 0)
# print(test_target)

机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)_第6张图片

2、计算AUC指标

# 2、计算AUC指标
auc = roc_auc_score(targer_true, predict)
print('AUC指标:', auc)

得出结论:模型效果接近1,说明模型还不错。 

总代码

# 逻辑回归:癌症分类
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 classification_report, roc_auc_score

# 1、读取数据
column_name=['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']

pd.set_option('display.max_columns',1000)        # 设置最大列数
pd.set_option('display.max_rows',1000)           # 设置最大行数

data=pd.read_csv('breast-cancer-wisconsin.data', names=column_name)
# print(data)

# 2、缺失数据处理
data = data.replace(to_replace='?', value = np.nan)
data.dropna(inplace=True)

# 3、划分数据集
train = data.iloc[:, 1:-1]
target = data['Class']
train_data, test_data, train_target, test_target = train_test_split(train, target)
# print(train_data)

# 4、标准化(对训练集和测试集标准化)
transfer = StandardScaler()
train_data = transfer.fit_transform(train_data)
test_data = transfer.transform(test_data)
# print(train_data)

# 5、创建逻辑回归预估器,训练
estimator = LogisticRegression()
estimator.fit(train_data, train_target)
# print(train_data)

# 查看模型参数:回归系数 和 偏置
print('回归系数:', estimator.coef_)
print('偏置:', estimator.intercept_)

# 6、模型评估
# 方法一:比对
predict = estimator.predict(test_data)
print(predict==test_target)
# 方法二:计算正确率
score = estimator.score(test_data, test_target)
print('逻辑回归分类正确率为:', score)

# 查看精确率、召回率、F1-score
report = classification_report(test_target, predict, target_names=['良性', '恶性'])
print(report)


# 计算AUC指标
# 1、把正例和反例分别用1和0表示
targer_true = np.where(test_target==4, 1, 0)
# print(test_target)

# 2、计算AUC指标
auc = roc_auc_score(targer_true, predict)
print('AUC指标:', auc)

你可能感兴趣的:(#,机器学习,机器学习,python,人工智能,sklearn)