<
>

【学习机器学习】实验——模型评估与选择

2020-06-28 12:10:39 来源:易采站长站 作者:易采站长站整理


python实现:我只做了一些修改,原本见代码出处

bootstrapping = []    for i in range(len(data)):
bootstrapping.append(np.floor(np.random.random() * len(data)))
# 通过序号获得原始数据集中的数据
train_set = [] test_set = [] for i in range(len(data)):
train_set.append(data[int(bootstrapping[i])])
np.savetxt("./自助法数据/train.csv", train_set, fmt="%f", delimiter=",")
for i in range(len(data)):
if i not in bootstrapping:
test_set.append(data[int(bootstrapping[i])])
np.savetxt("./自助法数据/test.csv", test_set, fmt="%f", delimiter=",")

二、任务二

接下来求取一系列性能度量就开始让我有些疑惑了,主要是数据应该是什么格式呢?以下的大部分代码我都是假设有已知list集合:

D=[[x1,y1],[x2,y2],[x3,y3],…,[xm.ym]]其中[xi,yi],xi表示预测器得到的结果,yi表示标记值
2.1 均方误差MSE

均方误差的公式为:E(f;D)=1m∑i=1m(f(xi)−yi)2E(f;D)=cfrac{1}{m}sum_{i=1}^m (f(xi)-yi)^2E(f;D)=m1​∑i=1m​(f(xi)−yi)2

def calculateMSE(D):
in_bracket = [] for i in range(len(D)):
num = D[i][0] - D[i][1] num = pow(num, 2)
in_bracket.append(num)

all_sum = sum(in_bracket)
MSE = all_sum / len(D)

return MSE


2.2 错误率与精度

从2.2错误率与精度开始,一直到2.5绘制ROC曲线,都是针对二分类问题。既然针对二分类问题,那么就需要设置一个阈值用以判断正例与反例,我这里以0.8作为阈值。

def calculate_ErrorRate_and_Accuracy(D):
error = 0
accurate = 0
for i in range(len(D)):
if D[i][0]*D[i][1] 0 and D[i][0] > 0.8:
accurate = accurate + 1
else:
error = error + 1

return error / len(D), accurate / len(D)


2.3 查准率与查全率

有了上面错误率与精度,实际上我们已经可以做出如下的分类结果混淆矩阵了:
分类结果混淆矩阵
按照上图中对结果的分类,我们就可以有查准率与查全率的定义了。
查准率(Precision):TPTP+FPcfrac{TP}{TP+FP}TP+FPTP​
查全率(Recall):TPTP+FNcfrac{TP}{TP+FN}TP+FNTP​
用大白话来解释就是,查准率表示:在所有我认为的正例中,真正的正例占比;查全率表示:在所有真正的正例中,我查出了多少正例。

2.4 F1指数

F1度量是从P-R图(Precision-Recall)的平衡点引申出来的,不过我不太想写关于P-R图的内容了,因为这个图还是比较好理解的。计算公式如下:

暂时禁止评论

微信扫一扫

易采站长站微信账号