模型性能度量与评估是建模过程中必做的自我检测模型预测准确率的方式,不同模型算法的问题需要使用不同的评估方法。
1、Holdout检验:随机分训练集和验证集和评估指标,缺点:验证集与评估指标与原始分组关联大
2、K-Fold交叉验证:将全体样本划分为K个样本子集,依次遍历子集(当前子集为验证集,其他子集为训练集),得出K个验证结果,取平均值
3、留一验证:样本总数为N,每次取1个样本为验证集,其他N-1为测试集,进行N次验证。缺点:样本量大开销大
4、自助法(有放回)验证:样本总数小时,为了维持训练样本规模验证,自助有放回随机采样,没有被抽出样本为验证集,有36.8%样本未被抽出
需要确认1目标函数(最大最小化目标)2搜索范围上下限3其他如搜索步长
1、网格搜索: GridSearch范围大步长小,可以找到全局最优,缺点:耗资源时间长,一般先搜大范围在逐步缩小
2、随机搜索:RandomSearch在搜索范围内随机选择样本点,样本越多概率越大,优点:速度快,但是结果无保证
3、贝叶斯优化:学习目标函数形状,找到使目标函数向全局最优值提升参数
4、Hyperout:from hyperout import fmin,tpe,hp 目标函数fmin越小越好,适合:样本量大参数多情况下找函数最小值
1、分类指标-准确率 Accuracy、精确率 precision、召回率 Recall、F1_score 、AUC和ROC
准确率 Accuracy
精确率 precision=TP/(TP+FP) 分类正确样本数/模型认为正确样本数
召回率 Recall=TP/(TP+FN) 分类正确样本数/真正正确样本数
F1_score =2PR/(P+R)
ROC曲线:横坐标FPR,纵坐标TPR
AUC面积:计算roc曲线的面积
举个栗子:
某班男生80人,女生20人,共100人,目标找到所有的女生
挑出50人,其中女生15人(分类正确),男生35个(分类错误)
准确率accuracy=(15+(80-35))/100=60%
精确率precision**=15/50=30%
召回率recall=15/20=75%
F1_score=2精确率召回率/(精确率+召回率)=2*30%*75%/(30%+75%)=42.9%
from sklearn.metrics import precision_score #精确率
from sklearn.metrics import recall_score #召回率
from sklearn.metrics import f1_score #调和平均数
y_true = [0,1,2,0,1,2]
y_pred = [0,2,1,0,0,1]
precision_score(y_true,y_pred,average='macro')
recall_score(y_true,y_pred,average='macro')
f1_score(y_true,y_pred,average='macro')
from sklearn import metrics
from sklearn.metrics import auc
fpr,tpr,threshhold = roc_curve(target,proba[:,1])
AUC = metrics.auc(fpr,tpr)
2、回归指标-绝对值误差MAE、均方误差MSE与决定系数R2
MSE均方误差,是预测值与真实值的误差平方根的均值,用来表示偏离的程度。若不取每个数据点与平均值的平方,那么低于平均值的点会抵消高于平均值的点,方差接近0,这与实际情况不符,所以要使用平方表示数据集的方差。
实现1:手写公式
np.sum(np.power((train_y - pre_train),2))/len(pre_train)
实现2:metrics模块引入
from sklearn.metrics import mean_squared_error as MSE
MSE(train_y,pre_train)
实现3:交叉验证引入
cross_val_score(model,train_x,train_y,cv=10,scoring = "neg_mean_squared_error").mean()
R2,R越大表示我们的模型效果越好,最大值为1,一般情况下,位于(0,1)之间,在某些情况下,R2呈现负数,说明数据之间没有任何线性关系,此时应更换模型。
实现1:metrics模块引入
pre_y = model.predict(test_x)
from sklearn.metrics import r2_score
score=r2_score(test_y,pre_y) #第一个是真实值,第二个预测值
实现2:交叉验证引入
cross_val_score(model,train_x,train_y,cv=10,scoring = "r2").mean()
3、混淆矩阵-TPR与FPR
真正例 TP:真实类别为正例,预测类别为正例;
假正例 FP:真实类别为负例,预测类别为正例;
假负例 FN:真实类别为正例,预测类别为负例;
真负例 TN:真实类别为负例,预测类别为负例;
| 实际值 |Positive |Negtive
|正True- |TP |FN
|负False |FP |TN
TPRate真正率=TP/(TP+FN) 越高越好
FPRate假正率=FP/(FP+TN) 越低越好
4、分类报告