每个机器学习项目都有自己独特的形式。 对于每个项目,都可以遵循一组预定义的步骤。 尽管没有严格的流程,但是可以提出一个通用模板。
不仅是机器学习,任何项目的第一步都是简单地定义当前的问题。 您首先需要了解背景和需要解决的问题。 然后设计机器学习算法来有效地解决这一问题。 一旦清楚地了解了问题,就可以解决它。
我将继续使用Python。 第一步是加载或导入所需的所有库和包。 一些非常基本且几乎必要的机器学习软件包是-NumPy,Pandas,Matplotlib和Scikit-Learn。
加载库后,您需要加载数据。 Pandas具有执行此任务的非常简单的功能-pandas.read_csv。 read.csv函数不仅限于csv文件,而且还可以读取其他基于文本的文件。 其他格式也可以使用pandas读取功能(例如html,json,pickled文件等)读取。需要牢记的一件事是,您的数据需要与当前工作目录位于同一工作目录中,否则您将需要在函数中提供以“ /”为前缀的完整路径。
现在数据已加载并准备好进行操作。 但是,您需要先检查数据的外观以及内容。 首先,您需要查看数据具有多少行和列,以及每一列的数据类型都是什么(pandas认为它们是什么类型)。
快速查看数据类型和形状的方法是— pandas.DataFrame.info。 这将告诉您数据框具有多少行和列以及它们包含哪些数据类型和值。
顾名思义,描述性统计数据以统计数据的形式描述数据-均值,标准差,四分位数等。获得完整描述的最简单方法是pandas.DataFrame.describe。 您可以轻松确定数据是否需要缩放或需要添加缺失值,等等。(稍后会对此进行更多介绍)。
数据可视化非常重要,因为它们是了解数据和规律(即使它们不存在)的最快方法。 您的数据可能具有数千个样本,甚至更多。 无法直接分析所有数值数据。 如果需要可视化,可以使用Matplotlib和Seaborn这样强大的可视化程序包。
使用Seaborn的Matplotlib进行可视化可用于检查特征内的相关性以及与目标的关系,可以使用散点图,直方图和箱形图来检查分部和偏度等。 甚至pandas都有自己的内置可视化库-pandas.DataFrame.plot,其中包含条形图,散点图,直方图等。
Seaborn本质上是经过改造的matplotlib,因为它建立在matplotlib的基础上,使绘图更加美观,并且绘图速度更快。 热图和对图(pairplot)是Seaborn快速绘制整个数据的可视化以检查多重共线性,缺失值等特征的示例。
一种获取大多数上述数据描述性和推断性信息的统计数据的非常有效的方法是Pandas Profiling。 它会生成数据的精美报告,其中包含上述所有详细信息,使您能够一次分析所有数据。
知道了数据的内容和规律,就需要对其进行转换,以使其适合算法来更有效地工作,以便提供更准确,更精确的结果。 这就是数据预处理,这是任何ML项目中最重要,最耗时的阶段。
现实生活中的数据不能很好地安排在没有异常的数据框中并呈现给您。 数据通常具有很多所谓的异常,例如缺失值,许多格式不正确的特征,不同比例的特征等。所有这些都需要手动处理,这需要大量时间和编码技巧(主要是python和pandas:D )!
Pandas具有各种功能来检查异常,例如pandas.DataFrame.isna以检查NaN等值。您可能还需要转换数据格式以摆脱无用的信息,例如删除“ Mr.”和“ Mrs” ”(如果存在单独的性别特征)。 您可能需要使用pandas.DataFrame.replace函数以整个数据框的标准格式获取它,或使用pandas.DataFrame.drop删除不相关的特征。
特征选择是选择一定数量的最有用特征的过程,这些特征将用于训练模型。 这样做是为了在大多数特征对整体差异的贡献不足时缩小尺寸。 如果您的数据中有300个特征,而前120个特征可以解释97%的方差,那么用这么多无用的特征来充实您的算法是没有意义的。 减少特征不仅可以节省时间,还可以节省成本。
一些流行的特征选择技术包括SelectKBest,特征消除方法(例如RFE(递归特征消除))和嵌入式方法(例如LassoCV)。
所有功能可能都不处于最佳状态。 特征工程的意思是通过使用一组函数可以将它们转换为不同的相关的数据。 这是为了增加与目标的相关性,从而增加准确性/分数。 其中一些转换与缩放有关,例如StandardScaler,Normalizer,MinMaxScaler等。甚至可以通过将一些特征进行线性/二次组合来增加特征,以提高性能。 对数转换,交互作用和Box-Cox转换是数字数据的一些有用转换。
对于分类数据,有必要将类别编码为数字,以便算法可以从中识别出来。 一些最有用的编码技术是– LabelEncoder,OneHotEncoder和Binarizer。
数据准备就绪后,请继续检查各种回归/分类算法的性能(基于问题的类型)。 您可以首先创建一个基本模型来设置要进行比较的基准。
训练完模型后,还需要对其进行验证,以查看它是否真的对数据进行了概括或拟合过度/不足。 手中的数据可以预先分为训练集和验证集。 这种拆分具有多种技术-训练测试拆分,随机排序等。您还可以对整个数据集运行交叉验证,以进行更可靠的验证。 KFold交叉验证,Leave-One-Out-CV是最流行的方法。
基于一组需要定义的评估指标来评估模型。 对于回归算法,一些常用指标是MSE和R Square。
与分类有关的评估指标要多样化得多-混淆矩阵,F1得分,AUC / ROC曲线等。对每种算法的这些得分进行比较,以检查哪些算法的性能优于其余算法。
拆分数据并定义评估指标后,您需要在for循环中运行一组算法,以检查哪个算法表现最佳。 简短的算法列表可以很好地解决您的问题,这是一个反复的尝试,这样您便可以加速研究并进一步调优它们。
可以制作流水线,并可以混合使用线性和非线性算法来检查性能。
现场运行测试工具后,您可以轻松查看哪些工具最适合您的数据。 始终获得高分的算法应该是您的目标。 然后,您可以选择最好的,并对其进行进一步调整以提高其性能。
拥有性能最佳的算法之后,可以调整它们的参数和超参数以提供最好的结果。 也可以连接多种算法。
维基百科指出“超参数调整是为机器学习算法选择一组最佳超参数”。 超参数是无法学习的参数,必须在运行算法之前进行设置。 超参数的一些例子包括逻辑回归的损失,随机梯度下降的损失以及SVM的核。
这些参数可以在数组中传递,并且算法可以递归运行,直到找到完美的超参数。 这可以通过诸如网格搜索和随机搜索之类的方法来实现。
可以将多种机器学习算法组合在一起,以形成一个更健壮和更优化的模型,该模型相比于单个算法可以提供更好的预测。 这被称为合奏。
有2种类型常见的合奏-套袋(Bootstrap-Aggregating)和Boosting。 例如,“随机森林”是一种Bagging集成体,它组合了多个决策树并获取输出的总和。
另一方面,Boosting通过适应性学习的方式组合了一组弱学习方式:集合中的每个模型都得到了拟合,从而更加重视数据集中实例中序列中先前模型存在较大错误的实例。 XGBoost,AdaBoost,CatBoost是一些例子。
当您获得具有最佳超参数和合奏的最佳性能模型时,可以在未知的测试数据集上对其进行验证。
验证后,对整个数据集运行一次模型,以确保在训练/测试时不会遗漏任何数据点。 现在,您的模型处于最佳状态。
有了准确的模型后,您仍然需要保存并加载它,以备将来需要时使用。 完成此操作的最常用方法是Pickle。
以上就是本文的内容。 当然,在机器学习方面,这还不是全部。 但这可以用作良好的路线图。 对于不同类型的数据/问题,需要自己发挥。 在下面评论您的想法,或说一说您是否了解更好和更关键的技术。
作者:Chayan Kathuria