即预测值和实际值的误差平方和的平均值。
对于更一般的数据分布D和概率密度$p(\cdot)$,均方误差可描述为
在分类任务中,如果在测试集准确率低而召回率高,可能是由于欠拟合导致。而如果准确率高而召回率低,可能是模型过拟合导致。
错误率是分类错误的样本占总样本数的比例,精度是分类正确的样本数占总样本数的比例。
对于数据集$D$,分类错误率定义为:
精度定义为:
优点:
简单,可直接看出正确率,在非特殊情况下效果不错。
缺点:
当样本不均衡时,会导致无法体现模型有效性。即使全部分为大多数,精度和错误率也会很好看。
分类结果混淆矩阵
真实情况 | 预测结果 | 预测结果 |
---|---|---|
正例 | 反例 | |
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
常用的为查准率和召回率的调和平均$F_1$得分。
y轴为查准率,x轴为查全率。将所有结果按照预测概率从高到底排序,将正例的的阈值为第一个值(即最高值),得到一组当前查准率和查全率,将正例的阈值设为第二个值,得到一组查准率和查全率。。。。依次向下到把所有数据都分为正例,将所有查准率和查全率坐标连起来,即为P-R曲线。
st=>start: 开始
op1=>operation: 对结果按照预测概率从高到低排序
op2=>operation: 从高到低开始取值作为阈值
op3=>operation: 计算当前查准率和查全率
cond=>condition: 是否结束
e=>end: 将所有的查准率和查全率连起来
st->op1->op2->op3->cond
cond(yes)->e
cond(no)->op3
当多个二分类时,评价模型性能好坏,一种简单的做法是分别计算各个混淆矩阵查准率和查全率,再计算平均值。
宏查准率:
宏查全率:
宏$F_1$:
还可以先将混淆矩阵对应元素进行平均,得到TP、FP、TN、FN的平均值$\TP$。基于这些平均值进行计算$F_1$
微查准率:
微查全率:
微$F_1$:
上面的多分类做平均时对每个分类都赋予相同权重。当针对实际情况时,可能需要对几个二分类模型的结果进行加权平均。
如当进行数据不均衡的分类任务时,为了识别出数量少的类别,可以使权重为$w=\frac{1}{log_2 n}$ ,n为每个类别的数目,通过这种方式对数目少的类别调高权重。
ROC曲线y轴为真正例率(True Positive Rate,简称TPR),x轴为假正例率(False Positive Rate简称FPR)。
在画ROC曲线时,和P-R曲线类似,先根据预测概率由高到低排列,将分类的阈值从最高值依次下降,前一部分为正例,后一部分为反例。
流程:
- 对预测概率从高到低排序
- 从原点$(0,0)$开始,依次将每个样例划分为正例
- 设前一个标记点为$(x,y)$,若当前例为真正例,则标记点坐标为$\Large (x,y+\frac{1}{m^+})$,若当前为假正例,则对应坐标为$(\Large x+\frac{1}{m^-},y)$
- 将所有相邻点用线连接得到ROC曲线
AUC为ROC曲线下面部分的面积。AUC的面积估算可以用下面公式:
即通过梯形面积取逼近AUC的面积。
聚类性能度量主要有两类,一类是将聚类结果与某个“参考模型”进行比较,称为“外部指标”。另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”
对数据集$D=\left{x_1,x_2,...,x_m \right}$,假定通过聚类给出的簇划分结果为$C=\left{C_1,C_2,...,C_k\right}$,参考模型的簇划分为$C^={C^_1,C^_2,...,C^_s}$.令$\lambda$和$\lambda^$分别表示$C$和$C^$对应的簇标记量。将样本两两配对考虑,定义:
$ a=|SS|,SS={(x_i,x_j)|\lambda_i=\lambda_j,\lambda_i^=\lambda_j^,i<j}$
$ b=|SD|,SD={(x_i,x_j)|\lambda_i=\lambda_j,\lambda_i^\neq\lambda_j^,i<j}$
$ c=|DS|,DS={(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda_i^=\lambda_j^,i<j}$
$ d=|DS|,DS={(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda_i^\neq\lambda_j^,i<j}$
其中集合$SS$包含了在$C$中隶属于相同簇且在$C^*$中也隶属于相同簇的样本对,集合$SD$包含了在$C$中隶属于相同簇但在$C^*$中隶属于不同簇的样本对。
基于上面的公式,可以推导出如下指标作为聚类性能度量外部指标。下列指标的结果值均在[0,1]区间,值越大越好。
聚类结果的簇划分$C={C_1,C_2,...,C_k}$,定义:
其中,$dist(\cdot,\cdot)$用于计算两个样本间的距离;$u$代表簇$C$的中心点$u=\frac{1}{|C|}\sum_{1\leq{i}\leq{|C|}}x_i$.$avg(C)$代表簇$C$内样本间的平均距离,$diam(C)$表示簇$C$内样本间的最远距离,$d_{min}(C_i,C_j)$表示簇$C_i$与簇$C_j$最近样本间的距离,$d_{cen}(C_i,C_j)$表示簇$C_i$和簇$C_j$中心点间的距离。
基于上面的公式,可以推导出下面这些常用的聚类性能度量内部指标:。
DBI的值越小越好
$\Large DBI=\frac{1}{k}\sum_{i=1}^{k}\max\limits_{j\neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen(u_i,u_j)}})$
#计算DBI代码
def dis(data,position,cluster):
tmp=pd.DataFrame()
for i in position:
tmp[i]=np.array(data[i])-np.array(cluster[i])
dis=tmp.apply(lambda x:np.sqrt(sum(np.power(np.array(x),2))),axis=1)
return dis
def dbi(data,label,position,cluster,label_c,position_c):
#data 数据
#label 数据的聚类类列名
#position 数据位置列名
#cluster 聚类点数据
#label_c 聚类类别列名
#position_c 聚类中心点位置列名
S={}
col=data[label].unique()
for i in col:
tmp_data=data[data[label]==i]
tmp_cluster=cluster[cluster[label]==i]
tmp_dis=dis(tmp_data,position,tmp_cluster)
S[i]=np.sqrt(sum(np.power(tmp_dis,2))/len(tmp_data))
M=pd.DataFrame(columns=data[label].unique(),index=data[label].unique())
R=pd.DataFrame(columns=data[label].unique(),index=data[label].unique())
for i in col:
for j in col:
if i!=j:
Mi=cluster[cluster[label]==i]
Mj=cluster[cluster[label]==j]
M.loc[i,j]=np.sqrt(sum(np.power((np.array(Mi[position])[0]-np.array(Mj[position]))[0],2)))
R.loc[i,j]=(S[i]+S[j])/M.loc[i,j]
dbi=R.max(axis=1).mean()
return dbi
DI的值越大越好
BLEU是由IBM公司2002年提出的用于自动度量机器翻译效果的评价方法。这个方法的核心思想是:机器翻译越接近专业的人的翻译越好。在此基础下通过计算待评价译文和参考译文的n-gram的相似程度来得到bleu得分。
对于一个待翻译句子,候选译文可以表示为$c_i$,而对应的一组参考译文可以表示为$S_i={s_{i1},s_{i2},...,s_{im}}∈S$
n-grams表示n个单词长度的词组集合,令$w_k$表示第k组可能的n-grams
BLEU得分: $$ BLEU=BP\cdot exp(\sum_{n=1}^N w_nlog(p_n)) $$
在log域中,排名效果更明显: $$ log(BLEU)=min(1-r/c,0)+\sum_{n=1}^Nw_nlog(p_n) $$
即mean average precision,计算方法为每类的P-R曲线的面积的平均值。