【学习机器学习】实验——模型评估与选择
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图的内容了,因为这个图还是比较好理解的。计算公式如下:













闽公网安备 35020302000061号