【机器学习】《机器学习算法竞赛实战》思考练习(更新中……)

慈云数据 2024-04-09 技术支持 62 0

文章目录

  • 第2章 问题建模
    • (一)对于多分类问题,可否将其看作回归问题进行处理,对类别标签又有什么要求?
    • (二)目前给出的都是已有的评价指标,那么这些评价指标(分类指标和回归指标)的损失函数如何实现?
    • (三)解决样本分布不均衡问题时,尝试用代码实现样本加权、类别加权和采样算法等几种方式,并对比使用权重前后的分数变化。
    • (四)在对不均衡的数据集进行采样时,是否会影响训练集和测试集之间的独立同分布关系?
    • (五)在进行K折交叉验证的时候,对于K值的选取,是否越大越好呢?
    • (六)在大多数情况下,我们会选择使用K折交叉验证,那么K折交叉验证为什么能够帮助提升效果呢?
    • 第3章 数据探索
    • 第7章 用户画像
      • (一)你觉得用户画像是想体现用户的共性还是个性,为什么?
      • (二)就你日常使用的App,思考其算法与运营团队会如何给你画像呢?
      • (三)文本挖掘算法也是非常多的,尝试整理这些算法调用方法,并且结合原理去熟悉参数的设置。
      • (四)嵌入方式被广泛应用,除了Word2Vec和Deep Walk以外,还有哪些嵌入算法,具体原理是什么样的?
      • (五)相似度计算方法非常多,但要从大量数据中检索出最为相似的或者相似度排前N位的并不是件容易的事情,所以有什么好的检索算法吗?
      • (六)内容摘要/总结

        最近在看《机器学习算法竞赛实战》,虽然很多看不懂,但是我觉得学习就是看不懂、然后就厚着脸皮反复看呗,我不是一次就能看懂、学会的天才。

        思考练习里面的内容我基本都答不上来,答案来自CodeGeeX。仅供参考。

        第2章 问题建模

        (一)对于多分类问题,可否将其看作回归问题进行处理,对类别标签又有什么要求?

        CodeGeeX:

        对于多分类问题,可以将它们看作回归问题进行处理。但是,为了 successful,会对类别标签提出以下要求:

        1、每个类别都有一个唯一的数值标签。

        2、类别标签必须是 continuous 且 non-negative。

        3、类别标签不能存在空值或缺失值。

        满足这些要求的类别标签可以使用进行回归问题处理。但是,请注意,这种方法可能会降低 model 的性能,因为多分类问题通常需要 special handling。

        【翻译】

        continuous:连续性

        negative:负类

        non-negative:非负类

        special handling:特殊处理

        (二)目前给出的都是已有的评价指标,那么这些评价指标(分类指标和回归指标)的损失函数如何实现?

        CodeGeeX:

        在机器学习中,指标(如 F1-score、Accuracy、MSE 等)通常用于评估模型的性能。这些指标可以使用损失函数(如 Log-loss、MSE-loss 等)实现。在神经网络训练过程中,模型会根据输入数据计算损失函数,并根据损失函数的大小更新模型参数。

        我:

        我觉得这个问题,CodeGeeX回答的不太好。依据我看书后的理解和总结如下:

        1、分类问题常见的评价指标:

        ①错误率与精度

        要点:加总等于1。

        ②准确率与召回率

        要点:同时使用,此消彼长。

        ③F1-score

        要点:调和平均②,介于[0,1]区间。

        ④ROC曲线

        要点:正负样本不均衡时依然能够保持不变。该指标不常用。

        ⑤AUC

        要点:极常见的指标。定义为ROC曲线下的面积。取值范围0.5-1之间。

        是数值,值越大==>分类器效果越好。

        ⑥对数损失

        要点:常见指标。取值0-1之间。

        2、AUC和对数损失对比

        同样是概率。

        AUC侧重于模型将正样本排到前面的能力。比如广告排序效果。

        我理解的是,如果要考察排在前几位的,就用AUC。比如热度前十,增长前十这类的……评价这类的预测用AUC比较好。

        对数损失反映平均偏差,更偏向于将样本数量多的那类划分准确。评价模型预测的概率是否足够准确。

        3、如何实现,大概就是代码问题了,书上给了准确率、召回率、F1-score:

        from sklearn.metrics import precision_score, recall_score, f1_score
        precision = precision_score(y_train, y_pred)
        recall = recall_score(y_train, y_pred)
        f1 = f1_score(y_train, y_pred)
        

        代码很简单:导入模块,然后直接使用方法,参数就那两个,直接放进去 就好啦。

        4、回归指标

        ①平均绝对误差(MAE,Mean Absolute Error),又称为L1范数损失

        残差的基础上,弄了个绝对值。所谓的“绝对”就是绝对值的意思。

        ②均方误差(MSE,Mean Squared Error),又称为L2范数损失

        残差基础上,弄了个平方。

        ③均方根误差

        在均方误差基础上弄了个开方。

        ④平均绝对百分比误差(MAPE)

        在平均绝对误差(MAE)基础上除以预测值y’。弥补了MAE的不足,真实值越大,误差越小。

        5、这些指标的损失函数……这个我就不太理解了,貌似书上只说了这些指标啊,它们还有损失函数吗?以后再说吧……

        (现实情况是,我还没啰嗦完,面试官:可以滚了,下一位……)

        (三)解决样本分布不均衡问题时,尝试用代码实现样本加权、类别加权和采样算法等几种方式,并对比使用权重前后的分数变化。

        CodeGeeX:

        在解决样本分布不均衡问题时,可以使用以下几种方式来处理:

        1、样本加权:为不同类别的样本分配不同的权重,以便于对不同类别进行均衡采样。

        2、类别加权:为不同类别的样本分配不同的数量,以便于对不同类别进行均衡训练。

        3、采样算法:使用算法来生成平衡的样本分布,例如adasyn、balance_dataset、ClassBalancedSampler 等。

        4、使用权重前缀:在计算损失函数时,使用权重前缀来调整不同类别的重要性。例如,在 softmax 损失函数中,可以使用权重前缀来调整预测概率的权重。

        5、使用 focal loss:focal loss 是一种针对样本分布不均衡问题的损失函数,它可以有效地提高识别困难样本的能力。

        6、使用 gradient reverse algorithm:GRAD 是一种通过调整学习率来解决样本分布不均衡问题的方法,它通过最大化正负样本的差值来提高困难样本的训练强度。

        我:

        看不懂……遇到具体问题的时候再说吧……代码实现?没有没有……

        (四)在对不均衡的数据集进行采样时,是否会影响训练集和测试集之间的独立同分布关系?

        CodeGeeX:

        在某些情况下,对不均衡的数据集进行采样可能会影响训练集和测试集之间的独立同分布关系。具体来说,这取决于采样算法的设计和数据集的性质。一些采样算法,如 undersampling(欠采样) 和 oversampling(过采样),可以确保训练集和测试集之间的独立同分布关系保持不变。然而,一些算法,如 balanced sampling(平衡取样;对称抽样),可能会改变独立同分布关系。

        因此,在对不均衡的数据集进行采样时,需要根据实际需求和数据集的性质来选择合适的采样算法,以保持训练集和测试集之间的独立同分布关系。

        (五)在进行K折交叉验证的时候,对于K值的选取,是否越大越好呢?

        CodeGeeX:

        通常情况下,K值的选取不是越大越好。在K折交叉验证中,K值越大,意味着每个验证集的大小越小,XTrain和XTest之间的独立同分布关系越小,这可能会导致模型泛化能力不足。因此,K值的选取需要根据实际需求和数据集的性质来选择。在某些情况下,K值可能需要减小到接近于1的值,以提高模型的泛化能力。

        我:

        K值过大,计算量过大。一般K=5或10。

        (六)在大多数情况下,我们会选择使用K折交叉验证,那么K折交叉验证为什么能够帮助提升效果呢?

        CodeGeeX:

        K折交叉验证是一种常用的评估方法,它可以帮助我们评估模型的泛化能力。与直接使用整个训练集作为验证集相比,K折交叉验证可以在不暴露测试集的情况下估计模型的性能,从而更准确地评估模型的效果。通过K折交叉验证,我们可以看到不同训练集下的模型性能,从而更好地理解和优化模型。

        第3章 数据探索

        (我跳着看的,晚些回来补充……)

        第7章 用户画像

        (一)你觉得用户画像是想体现用户的共性还是个性,为什么?

        CodeGeeX:

        用户画像通常是想体现用户的共性。用户画像的主要目的是为了更好地了解和满足用户的需求,icheck 平台通过分析用户在产品使用过程中的行为数据(如浏览记录、购买记录、搜索记录等)来构建用户的画像,从而为后续的营销策略提供参考。用户画像是基于共性来提取特征,从而进行分类的。

        我:icheck平台,没查到什么相关的资料,不重要……

        (二)就你日常使用的App,思考其算法与运营团队会如何给你画像呢?

        我:呵呵……虽然我在学习给用户画像,但我不希望被画像……

        (三)文本挖掘算法也是非常多的,尝试整理这些算法调用方法,并且结合原理去熟悉参数的设置。

        CodeGeeX:

        文本挖掘算法有以下几种:

        1、深度学习算法:如BERT、GPT等,这些算法采用深度学习技术和大规模语言模型训练,能够更好地理解和处理文本数据。

        2、机器学习算法:如分类模型、回归模型等,这些算法采用机器学习技术,对文本数据进行训练和优化,以实现对文本数据的分类或预测。

        3、自然语言处理算法:如分词、词性标注、命名实体识别等,这些算法主要用于处理文本数据,以提取关键信息。

        4、信息检索算法:如TF-IDF、BM25、LDA等,这些算法主要用于处理文档数据,以实现对大量文本数据的检索。

        5、情感分析算法:如正面情感分析、负面情感分析等,这些算法主要用于处理文本数据,以实现对用户情感的识别和分析。

        6、文本生成算法:如机器翻译、文本摘要等,这些算法主要用于处理文本数据,以实现文本的生成和转换。

        7、文本分类算法:如主题模型、sentence-transformers等,这些算法主要用于处理文本数据,以实现文本的分类和聚类。

        8、文本匹配算法:如字符串匹配、向量匹配等,这些算法主要用于处理文本数据,以实现文本的相似性匹配。

        9、文本嵌入算法:如Word2Vec、GloVe、BERT等,这些算法主要用于处理文本数据,以实现文本的向量表示和嵌入。

        10、文本分区算法:如分水岭算法、聚类算法等,这些算法主要用于处理文本数据,以实现文本的分区。

        这些算法的调用方法取决于具体的应用场景和需求。在实际应用中,可以根据需要选择合适的算法进行学习和实践。

        我:晕了晕了……混个脸熟先……

        (四)嵌入方式被广泛应用,除了Word2Vec和Deep Walk以外,还有哪些嵌入算法,具体原理是什么样的?

        CodeGeeX:

        除了Word2Vec和Deep Walk之外,还有以下几种嵌入算法:

        1、GloVe:是一种基于图的嵌入方法,通过训练来学习图中节点之间的相似度,并将这些相似度转换为低维的向量表示。

        2、BERT:是一种基于Transformer的预训练语言模型,能够学习语言模式和知识,并将它们嵌入到低维空间中。

        3、Transformer:是一种基于自注意力机制的深度神经网络模型,用于处理序列数据,可以实现词嵌入、句嵌入和文档嵌入。

        4、GCN:是一种基于图卷积神经网络的嵌入方法,可以学习图中的节点关系,并将这些关系转换为低维的向量表示。

        5、DNN:是一种基于深度神经网络的嵌入方法,可以学习大量数据的模式,并将它们转换为低维的向量表示。

        6、CDSSM:是一种基于局部上下文的嵌入方法,可以学习文本中的局部特征,并将它们转换为低维的向量表示。

        7、LSTM:是一种基于长短期记忆网络的嵌入方法,可以学习文本中的长期依赖关系,并将它们转换为低维的向量表示。

        8、GLM:是一种基于生成式模型的嵌入方法,可以学习大规模语言模型中的词嵌入,并将它们转换为低维的向量表示。

        9、向量空间模型:是一种基于概率模型的嵌入方法,可以学习大规模语言模型中的词嵌入,并将它们转换为低维的向量表示。

        10、概率模型:是一种基于概率模型的嵌入方法,可以学习大规模语言模型中的词嵌入,并将它们转换为低维的向量表示。

        这些算法的原理有所不同,具体原理可以参考相关文献或教程。在实际应用中,可以根据需要选择合适的算法进行学习和实践。

        我:呃……为什么(9、向量空间模型)和(10、概率模型)的解释完全相同?

        先不去管它了,反正看到这么多生词,脑瓜子嗡嗡的……

        还得补充一下,书中提到,词嵌入:Word2Vec衍生的Item2Vec,以及图嵌入:LINE、Node2Vec、SDNE。

        (五)相似度计算方法非常多,但要从大量数据中检索出最为相似的或者相似度排前N位的并不是件容易的事情,所以有什么好的检索算法吗?

        CodeGeeX:

        文本检索算法有很多,以下是一些常见的算法:

        1、基于向量的检索方法:如TF-IDF、BM25、LDA等,这些算法主要用于处理文档数据,以实现对大量文本数据的检索。

        2、基于概率模型的检索方法:如概率模型、向量空间模型等,这些算法主要用于学习大规模语言模型中的词嵌入,并将它们转换为低维的向量表示。

        3、深度学习算法:如BERT、GPT等,这些算法采用深度学习技术和大规模语言模型训练,能够更好地理解和处理文本数据。

        4、局部模型:如CNN、RNN等,这些算法用于处理短文本数据,可以实现词嵌入、句嵌入和文档嵌入。

        5、全局模型:如Transformer、GLM等,这些算法用于处理长文本数据,可以实现全局特征的抽取。

        6、嵌入模型:如Word2Vec、GloVe等,这些算法用于学习文本数据的模式,并将它们转换为低维的向量表示。

        7、主题模型:如LDA、LSI等,这些算法用于处理文档数据,可以实现对文本数据的自动分类和聚类。

        8、感分析算法:如正面情感分析、负面情感分析等,这些算法用于处理文本数据,以实现对用户情感的识别和分析。

        9、文本生成算法:如机器翻译、文本摘要等,这些算法用于处理文本数据,以实现文本的生成和转换。

        10、文本分类算法:如主题模型、sentence-transformers等,这些算法用于处理文本数据,以实现文本的分类和聚类。

        这些算法的应用场景和需求不同,可以根据需要选择合适的算法进行学习和实践。

        我:……所以并没有回答究竟那个检索算法更好。

        此外我发现两个事,CodeGeeX 最多就是罗列10个答案……只有top10啊~

        还有,这些算法和上面的差不多,所以,文本挖掘算法主要的也就这么些了,不要害怕不要害怕~~~~

        (六)内容摘要/总结

        这一章干货还是挺多的,想了想还是做了个笔记。详见

        【机器学习】《机器学习算法竞赛实战》第7章用户画像

        (更新中……)

        CodeGeeX:

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon