本篇文章3603字,读完约9分钟
雷锋。com:杨,本文作者。原文包含在作者的个人博客中。雷锋。(公开号码:雷锋。com)已被授权。
上周,一位名叫abhishek thakur的数据科学家在他的linkedin上发表了一篇关于解决(几乎)任何机器学习问题的文章,介绍了他建立的一个自动机器学习框架,该框架可以解决几乎任何机器学习问题,该项目将很快发布。这篇文章很快在卡格尔流行起来。他参加了100多次与数据科学相关的比赛,积累了许多宝贵的经验。他幽默地说:“写这样一个框架需要很多丰富的经验,不是每个人都有这样的经验,但很多人都有宝贵的经验,但他们不愿意分享。”我碰巧有一些经验,愿意分享。”当然,这篇文章是有争议的,很多人认为它不全面。
我最近也准备参加kaggle。我以前见过几个例子,并总结了一个分析过程。今天,我读了这篇文章,其中提到了一些有效的方法。最枯燥的事情是,他制作了一个表格,列出了每个算法通常需要训练的参数。
这个问题非常重要,因为大多数情况下,通过调整参数和训练模型可以提高精度。作为初学者,在第一阶段,我最想知道的是如何调整参数。因为常规的分析非常简单,只有几个步骤,而且只有几个常用的算法。如果你认为调用这个算法就足够了,它肯定不会起作用。在实际过程中,调用算法后,结果一般都不是很好。此时,需要进一步分析,例如哪些参数可以调整,哪些数据需要进一步处理,以及什么算法更合适。
让我们看看他的框架。
据说数据科学家花60-70%的时间清理数据和应用模型算法,这个框架主要是针对算法的应用部分。
什么是卡格尔?Kaggle是数据科学竞赛的平台。许多公司会发布一些与实际业务密切相关的问题,吸引热爱数据科学的人一起解决它们,并通过这些数据积累经验来提高机器学习的水平。
要用算法解决kaggle问题,通常有以下步骤:
第一步:找出问题
步骤2:分离数据
步骤3:构建和提取特征
步骤4:合并数据
第五步:分解
步骤6:选择特征
第七步:选择一种训练算法
当然,如果一个工人想做好工作,他必须磨快他的工具,并保护好他的工具和袋子。
最方便的事情是安装anaconda,它包含了数据科学所需的大部分包,直接导入它们是可以的。常用的软件包有:
熊猫:通常用于将数据转换成操作数据帧
-scikit-learn:有一些机器学习算法模型可以使用。
-matplotlib:用于绘图
-以及xgboost、keras、tqdm等。
第一步:找出问题。在这一步,很清楚问题是分类还是返回。从问题和数据可以判断,数据由X和标签列组成,标签可以是一个或多个列,可以是二进制的,也可以是实数的。当它是二元的,问题属于分类,而当它是真实的,问题属于返回。
步骤2:分离数据
为什么需要将数据分成两部分?
训练数据用于训练模型,验证数据用于测试该模型的性能。否则,模型可以通过各种调整参数在训练数据集上表现很好,但这可能是过度拟合,过度依赖现有数据,拟合效果特别好,但它只适用于训练集,因此当新数据到来时,不可能知道要预测什么。因此,需要验证这个模型是在那里自娱自乐还是真的表现良好。
scikit学习包中有一些工具可以帮助您做到这一点:
带strtifiedkfold的分类问题
从sklearn.cross_validation导入stratifiedkfold
Kfold用于退货问题
从sklearn.cross_validation导入kfold
步骤3:构造特征此时,有必要将数据转换成模型所需的形式。有三种类型的数据:数字、类别和单词。当数据以类别的形式出现时,需要将每个类别提取为一个单独的列,然后用二进制表示每个记录的相应值。例如:
记录1:性别女性
记录2:性别女性
记录3:性别男性
改造后是:
女性和男性
记录1: 1 0
记录2:1 0
记录3:0 1
这个过程sklearn也可以帮助您做到这一点:
预处理导入标签编码器
或者..
从sklearn .预处理导入onehotencoder
步骤4:在处理特征后合并数据。
如果数据很密集,可以使用numpy的hstack:
将numpy作为np导入
x = np.hstack((x1,x2,...))
如果是稀疏的,请使用稀疏的hstack:
从scipy导入稀疏
x =稀疏,( x1,x2,...))
组合后,可以应用以下算法模型:
-randomforestaccelerator
-randomforestrejector
----提取分类器
-提取回归器
-XB分类器
-XB greater
然而,线性模型不能应用,并且线性模型需要在之前正则化数据,而不是上述预处理。
步骤5:分解这一步是为了进一步优化模型,可以使用以下方法:
主成分分析是一种分析和简化数据集的技术。它用于降低数据集的维数,同时保留对数据集方差贡献最大的特征。
来自sklearn.decomposition import pca
对于文本数据,svd可以在转换成稀疏矩阵后使用
从sklearn.decomposition导入截断的vd
奇异值分解是线性代数中一种重要的矩阵分解。它总是能在归一化正交基之后找到方差最大的维数,因此用于降维和去噪。
步骤6:选择特征当特征数量较大时,分析特征和训练模型需要较长时间,容易导致“维数灾难”,模型越复杂,推广能力也会下降,因此有必要剔除不相关或冗余的特征。
常用的算法有完全搜索、启发式搜索和随机算法。
例如,随机森林:
来自sklearn . ensemble import randomforestaccelerator
或xgboost:
将xgboost导入为XB
对于稀疏数据,一个众所周知的方法是chi-2:
从sklearn.feature_selection导入选择kbest
从sklearn.feature_selection导入chi2
第七步:选择算法进行训练。选择最相关的参数后,您可以应用该算法。常用的算法有:
分类:
随机森林
恶性胶质瘤
逻辑回归
朴素贝叶斯
支持向量机
k近邻
回归
随机森林
恶性胶质瘤
线性回归
山脉
套索
连续的血管反应
在sci工具包学习中,我们可以看到分类和返回的可用算法列表,包括它们的原理和示例代码。
在应用每种算法之前,有必要知道这种方法是否合适。
为什么在这么多算法中只有这些算法被提出?有必要比较不同算法的性能。
本文通过对121个uci数据的179个分类模型的性能测试,发现随机森林和支持向量机的性能最好。
我们可以研究研究思路,看看如何得到比较结果,这对我们的实践也将起到一定的指导作用。
然而,直接应用该算法后,总体精度不是很理想。此时,有必要调整参数。最干货的问题来了。什么模型需要调整什么参数?
虽然该算法的所有参数都在sklearn的文档中列出,但它没有说明哪种调整会有效。在一些mooc课程中,有一些项目代码,在这些代码中,您可以看到一些参数,当应用算法时,它们会重点调整这些参数,但是其中一些无法清楚地解释为什么它们不调整其他参数。在这里,笔者根据自己100多场比赛的经验,列出了这张表,我认为可以作为参考。当然,如果有时间,他可以参考文档中的参数列表并检查算法的原理。通过理论,他还可以判断哪个参数有很大的影响。
在调整参数后,它没有完成。此时,我们仍然需要思考是什么导致了低精度,还有什么数据没有被挖掘出来。此时,我们需要通过统计和可视化再次探索数据,然后再次经历上述过程。
我认为这里还提到了一个非常有用的经验,那就是保存所有的变压器以便于在验证数据集上应用:
文章介绍了分析问题的思路,并提到了几点实践经验。然而,经验毕竟是别人的经验,只能作为参考。如果你想提高自己的水平,你还需要看看作者背后的东西,也就是说,你已经参加了100多次实战。然后行动起来,享受用算法和代码处理数据的刺激。
张量流&神经网络算法高级应用类即将开始!从初级到高级,理论+实战,一站式深入了解张量流!
本课程面向深入学习的开发人员,教授如何使用张量流解决特定问题,如图像识别和文本分析。为期10周的课程将从张量流的原理和基本实践技能开始,逐步教会学生如何在张量流上构建cnn、自编码、rnn、gan等模型,最终掌握一套基于张量流的深度学习和发展的专业技能。
作为思想工作的高级技术专家,童达和白华川两位教师在构建大数据平台和开发深度学习系统方面有着丰富的经验。
时间:每周二和周四晚上20: 00到21: 00
课程时长:共20小时,10周完成,每周2次,每次1小时
在线教学地址:mooc.ai/
雷锋。com相关阅读:
一个例子告诉你:卡格尔数据竞赛的常规是什么
如何从卡格尔困境中突破国内数据竞争平台
雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。
来源:搜狐微门户
标题:一个框架解决几乎所有机器学习问题
地址:http://www.shwmhw.com/shxw/61490.html