美文网首页
FM算法模型的评估概要

FM算法模型的评估概要

作者: 大端DD | 来源:发表于2020-04-09 23:59 被阅读0次

    目录
    说明
    第一阶段评估方法
    1、数据集的划分方法
    2、调参
    第二阶段性能度量
    3、误差
    4、错误率与精度
    5、查全率、查准率与F1
    6、ROC与AUC
    7、时间复杂度和空间复杂度
    8、其他参数

    说明

    由于原数据样本的数据量有一百多万个数据样本,由于数据过大,而我的电脑设备比较落后的原因用原算法模型无法运行如此大的数据,所以以下算法计算结果均为原一百万数据集导出的2000个数据样本为算法数据集,所以训练测试结果会与实际原数据的训练测试结果有所差别,但是笔者也在此算法模型上做了修改,用相同的数据集与原算法模型在空间复杂度和时间复杂度上进行比较。

    第一阶段评估方法

    考虑到算法的时间开销、储存开销等因素,所以我们对数据集的划分方法和参数的选取是我们评估模型的第一阶段

    第1步:数据集的划分方法

    划分数据集的方法有:留出法、交叉验证法、自助法。

    留出法:

    留出法将数据集D划分为两个互斥的训练集S和测试集T,因为存在多种划分的方式,所以要按给定比例进行若干次随机划分,在进行n次评估后,返回n次结果的均值。例如数据集D有500个正例和500反例,按70%训练集、30%测试集划分,得到了训练集包含350正例、350反例,测试集包含150正例、150反例。通常将2/3~4/5的样本用于训练,剩余用作测试。

    交叉验证法:

    交叉验证法,把数据集分成k个大小相似的互斥子集,每个子集尽可能数据分布一致。然后每次把k-1个子集当成训练集,剩下一个当成测试集,从而可进行k次训练和测试,最终返回k次结果的均值。显然,交叉验证法评估结果的稳定性和保真性很大程度取决于k,通常把交叉验证法称为k折交叉验证。

    自助法:

    给定包含m个样本的数据集D,对它采样m次产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D’,然后再将样本放回初始数据集D中,使得该样本在下次采样仍有可能被采到,这个过程重复执行m次,就得到包含m个样本的数据集D’,这就是自主采样的结果。显然,D中有一部分样本会在D’中多次出现,而另一部分不出现。通过自主采样,初始数据集D中约有36.8%的样本未出现在D’中。D’作为训练集,D/D'用作测试集来对学习器进行评估。
    当数据集比较大时,采用留出法和交叉验证法划分数据集比较有效,数据集小时,采用自助法划分比较有效。
    因为我们这个算法模型处理的数据比较大,所以采用了留出法。

    第2步:调参

    参数的调节比如学习率、训练次数、权重等方面进行调参,调参是一个过程,切勿操之过急。
    在模型中引入一个可视化功能,如图一,能够方便我们调参。

    图一,在学习率不变条件下,不同的迭代次数下对应训练集的损失值和测试集的准确率

    阶段小结

    我们第一步看模型的数据划分方法是否恰当,第二步参数的调节是否调好。这时候模型基本判断就已经完成了,接下来就是对这个模型是否适合对这个数据特征的分类。

    第二阶段性能度量

    第3步:误差

    我们把学习器的实际预测输出与样本真实输出之间的差异称为“误差”,学习器在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差”,我们的目的就是希望得到泛化误差小的学习器。
    计算误差的损失函数的选取,对于回归问题,常采用的性能度是“均方误差函数”


    “均方误差函数”

    对于分类问题,常采用的性能度“logit逻辑函数”


    “logit逻辑函数”
    因为本算法模型是对二分类问题的研究,所以采用“logit逻辑函数”来计算误差,通过观察不同迭代次数下误差的大小来评价模型的优劣。 不同迭代次数下的损失值

    我们可以看到本算法模型的损失值在0.66左右,由于我们数据是二分类数据,即-1和1,那么最大的误差就是真实类别是1,而预测类别是-1,或者反过来,那么通过计算最大误差对应的损失值,即log(1+e)=1.37左右,那么本算法模型的平均损失值为0.66,说明算法的误差比较大,对这类数据的分类效果不是非常理想。

    第4步:错误率与精度(查准率)

    通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m,那么“精度”即“1-错误率”。我们也是希望得到错误率低、精度高的学习器。
    在误差分析部分的图一中,我们可以在图中看到不同迭代次数下测试集的准确率,即精度。从图中我们可以看到本算法模型的精度在0.01的学习率下,迭代次数从0-20次中精度的随迭代次数增加而增加,而20次以后精度一直维持在0.63-0.65之间,通过精度这一参数的反映本算法模型的还远远没达到我们的预期值。

    第5步:查全率、查准率和F1

    首先,我们引入查全率的原因是为了满足错误率和精度不能满足的任务需求,引用西瓜书模型对瓜分类的例子,错误率是衡量有多少比例的瓜被判错误了,但是我们关心的是挑出来的西瓜中有多少好瓜被挑出来了,那么错误率就达不到我们的目的,我们可以通过查全率来达到我们的目的。
    查准率就是预测结果的准确率,即精度。
    查全率就是一类样本的预测正确量/这类样本的总量,即召回率。
    查准率和查全率是一对矛盾体,查准率高,那么查全率就偏低,反之,则查全率高。

    F1是基于查全率和查准率的调和平均,公式如下 F1标准形式
    标准形式F1越大说明模型越好
    图2为本算法模型的查全率和查准率,调和平均参数
    图2
    从图2可以看得出来,本算法模型的查准率和查全率还有F1调和平均的指标值都比较不理想。

    我们可以借助P-R图像来观察一下查准率在查全率的变化下如果变化,如图3中为本算法的P-R图像。


    图3
    从图3中我们可以看出我们一开始在查全率最低的时候,查准率是最高的,随着查全率的上升查准率开始下降,虽然数据精确率不理想,但是符合我们查准率和查全率的关系,P-R图像能够清晰的反应出查准率随查全率变化而变化的趋势。
    P-R曲线的运用一般是在模型与模型之间的比较,我们可以通过比较两个模型绘画出来的P-R曲线面积,来比较熟优熟劣,其实原理就是随着数据样本的增多(查全率增大),哪个模型的查准率大,哪个模型就比较好。

    第6步:ROC与AUC

    roc是以真正例率为纵轴,假正例率为横轴的一个图像,真正例率即预测样本结果为正例且样本为正例占所有正例样本的比率,假正例率即预测样本结果为正例且样本为反例占所有反例样本的比率。这样描绘出来的图能说明什么呢?


    图5

    图5为本算法模型的测试集上的ROC图像,蓝色的那条线为是以本算法的假正例率为横轴,真正例率为纵轴而描绘出来的一条曲线,而黄色的虚线是y=x的一条直线,当我们roc曲线围成的面积越大,说明模型越优;当我们roc曲线与虚线重合,即围成的面积等于虚线围成的面积,说明模型的预测结果与瞎猜没什么两样;当我们roc曲线在虚线下方,围成的面积小于虚线围成的面积,说明模型连瞎猜都不如。
    从图5可以看出此算法模型的roc曲线围成的面积与虚线相差不大,说明模型的预测效果不理想。
    AUC即是roc围成的面积。本算法测试集和训练集roc面积如图6


    图6
    图6可见模型在训练集上的效果比较好,roc面积占比达95.25%,而在测试集上的表现比较差,面积占比仅53.35%,这有过拟合的嫌疑。

    第7步:时间复杂度和空间复杂度

    时间复杂度:是指算法执行过程中的运算次数。
    空间复杂度:是指算法执行过程中占用的内存空间。
    我们这两个参数可以通过算法的运行时间来反映,运行时间越快说明算法耗费的资源越少。


    图7

    图7为本算法的运行时间,其实这个运行时间是在2000个数据样本下的运行时间,我发现此算法模型在数据归一化的处理上耗费了大量的运算,所以我将数据归一化的处理进行了更换。

    #原算法数据归一化的处理
    for i in columns:
        get_dummy_feature=pd.get_dummies(df[i])
        #print("get_dummy_feature:",get_dummy_feature)
        df=pd.concat([df, get_dummy_feature],axis=1)
        df=df.drop(i, axis=1)
    #更换后的归一化处理
        X_train = MinMaxScaler().fit_transform(X_train)  # 归一化训练集,返回[0, 1]区间
        X_test = MinMaxScaler().fit_transform(X_test)  # 归一化测试集,返回[0, 1]区间
    
    数据归一化方式更换后,算法的运行时间得到明显得提高,图8为更换数据归一化方式后的运行时间 图8 在数据集为百万级别时,原算法模型出现数据过大报错,如图9 图9
    而更换了数据归一化处理方式的算法模型的运行结果 图10
    这说明了原算法模型运算时间长,占用内存空间大与数据的归一化处理方式有着一定的关系。

    第8步:其他参数指标

    除了西瓜书的参数指标外,我又加了NDCG指标和kappa参数指标。

    NDCG指标

    NDCG指标译为归一化折损累计增益,详细解释参考东文同学简书
    https://www.jianshu.com/p/93fc7491eb81?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin
    本算法模型在设置前500个样本排序的ndcg指标数值,如图11

    图11

    kappa系数

    kappa参数:kappa系数是一种衡量分类精度的指标。它是通过把所有地表真实分类中的像元总数(N)乘以混淆矩阵对角线(Xkk)的和,再减去某一类地表真实像元总数与该类中被分类像元总数之积对所有类别求和的结果,再除以总像元数的平方减去某一类地表真实像元总数与该类中被分类像元总数之积对所有类别求和的结果所得到的。
    kappa计算结果为-1~1,但通常kappa是落在 0~1 间,可分为五组来表示不同级别的一致性:0.0~ 0.20极低的一致性(slight)、0.21~ 0.40一般的一致性(fair)、0.41~0.60 中等的一致性(moderate)、0.61~0.80 高度的一致性(substantial)和0.81~1几乎完全一致(almost perfect)。
    图12为kappa系数


    图12

    从图12可以看出,此算法模型的分类的一致性是极低的,也反映出了这个算法模型的分类效果不理想。

    通过以上我们一系列的指标分析可知,此FM算法模型在电影等级评价的数据集分类效果的评估,得出结论是分类不理想,主要表现在准确率不高,占用内存空间大,运行时间长三个方面。
    以上是本次对FM算法模型的评估分析。参考资料如下:
    代码与数据来源于github: https://gith<wbr>ub.com/moren<wbr>jiujiu/FM/bl<wbr>ob/master/FM<wbr>_Demo.ipynb
    文章来源于简书: https://www.<wbr>jianshu.com/<wbr>p/8d792422e5<wbr>82

    相关文章

      网友评论

          本文标题:FM算法模型的评估概要

          本文链接:https://www.haomeiwen.com/subject/ydivphtx.html