机器学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。不同的学习方法会训练出不同的模型,不同的模型可能会对未知数据作出不同的预测,然而我们手上并没有“未知”的数据。所以,如何评价模型好坏,并选择出好的模型是我们这个实训需要掌握的内容。
第1关:为什么要有训练集与测试集
1.D
2.A
第2关:欠拟合与过拟合
1.D
2.A
第3关:偏差与方差
1.B
第4关:评估方法
1.D
2.B C D
第5关:精准率(查准率)与召回率(查全率)
import numpy as np
def precision_score(y_true, y_predict):
'''
计算精准率并返回
:param y_true: 真实类别,类型为ndarray
:param y_predict: 预测类别,类型为ndarray
:return: 精准率,类型为float
预测中正确的概率
预测出的占真实的比率
'''
#********* Begin *********#
tp = np.sum((y_true == 1)&(y_predict == 1))
fp = np.sum((y_true == 0)&(y_predict == 1))
precision = tp/(tp+fp)
return precision
#********* End *********#
def recall_score(y_true, y_predict):
'''
计算召回率并召回
:param y_true: 真实类别,类型为ndarray
:param y_predict: 预测类别,类型为ndarray
:return: 召回率,类型为float
正例被预测出来的准确率
真实占预测的比率
'''
#********* Begin *********#
tp = np.sum((y_true == 1)&(y_predict == 1))
fn = np.sum((y_true == 1)&(y_predict == 0))
recall = tp/(tp+fn)
return recall
#********* End *********#
第6关:ROC曲线与AUC
import numpy as np
def calAUC(prob, labels):
'''
计算AUC并返回
:param prob: 模型预测样本为Positive的概率列表,类型为ndarray
:param labels: 样本的真实类别列表,其中1表示Positive,0表示Negtive,类型为ndarray
:return: AUC,类型为float
'''
#********* Begin *********#
'''
在 Python 3.x 中为了减少内存,
zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
格式如下:
a = [1,2,3],b = [4,5,6]
list(zip(a,b)) = [(1, 4), (2, 5), (3, 6)]
'''
p_n_list = list(zip(prob,labels))
p_n_list.sort(key=lambda x:x[0])#根据第0列预测概率进行排序
rank_sum = 0#所有真实类别样本排列序号的总和
M = 0#M 为真实类别为 Positive 的样本数量
N = 0#N 为真实类别为 Negtive 的样本数量
for i in range(len(p_n_list)):
if p_n_list[i][1] == 1:
rank_sum += i+1
M += 1
else:
N += 1
auc = (rank_sum - M*(M+1)/2)/(M*N)
return auc
#********* End *********#
第7关:sklearn中的分类性能指标
from sklearn.metrics import accuracy_score, precision_score, recall_score,roc_auc_score
def classification_performance(y_true, y_pred, y_prob):
'''
返回准确度、精准率、召回率、f1 Score和AUC
:param y_true:样本的真实类别,类型为`ndarray`
:param y_pred:模型预测出的类别,类型为`ndarray`
:param y_prob:模型预测样本为`Positive`的概率,类型为`ndarray`
:return:
'''
#********* Begin *********#
return accuracy_score(y_true, y_pred),precision_score(y_true, y_pred),recall_score(y_true, y_pred),roc_auc_score(y_true, y_prob)
#********* End *********#