# 通过数据预处理提高模型准确率

> 原文： [https://machinelearningmastery.com/improve-model-accuracy-with-data-pre-processing/](https://machinelearningmastery.com/improve-model-accuracy-with-data-pre-processing/)

数据准备可以决定您模型的预测能力。

在他们的书 [Applied Predictive Modeling](http://www.amazon.com/dp/1461468485?tag=inspiredalgor-20) 的第3章中，Kuhn和Johnson介绍了数据准备过程。他们将其称为训练集数据的添加，删除或转换。

在这篇文章中，您将发现可用于提高模型预测能力的数据预处理步骤。

[![i love spreadsheets](img/84c77fdf69a2470d46af5e265d672573.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/08/i-love-spreadsheets.jpg)

我喜欢电子表格
照片由 [Craig Chew-Molding](https://www.flickr.com/photos/craigmoulding/8399214678) ，保留一些权利

## 数据准备

在建模问题之前，您必须预先处理原始数据。具体准备工作可能取决于您可用的数据和您要使用的机器学习算法。

有时，数据的预处理可能会导致模型准确率的意外改善。这可能是因为数据中的关系已被简化或未被遮挡。

[数据准备](http://machinelearningmastery.com/how-to-prepare-data-for-machine-learning/ "How to Prepare Data For Machine Learning")是一个重要的步骤，您应该尝试适合您的数据的数据预处理步骤，看看您是否能够获得模型准确率的理想提升。

您可以为数据考虑三种类型的预处理：

*   为数据添加属性
*   从数据中删除属性
*   转换数据中的属性

我们将深入研究这三种预处理中的每一种，并查看您可以执行的一些特定操作示例。

## 添加数据属性

高级模型可以从复杂属性中提取关系，尽管某些模型要求明确说明这些关系。从训练数据中获取新属性以包含在建模过程中可以提高模型表现。

*   **虚拟属性**：分类属性可以转换为n二进制属性，其中n是属性具有的类别（或级别）的数量。这些非规范化或分解的属性称为虚拟属性或虚拟变量。
*   **转换后的属性**：可以将变换后的属性变量添加到数据集中，以便允许线性方法利用属性之间可能的线性和非线性关系。可以使用简单的变换，如log，square和square root。
*   **缺少数据**：缺少数据的属性可以使用可靠的方法（例如k-最近邻居）估算缺失数据。

## 删除数据属性

某些方法在冗余或重复属性方面表现不佳。通过从数据中删除属性，可以提高模型的准确率。

*   **投影**：训练数据可以投影到较低维空间，但仍然表征数据中的固有关系。一种流行的方法是主成分分析（PCA），其中该方法找到的主要成分可以作为一组简化的输入属性。
*   **空间符号**：数据的空间符号投影将数据转换到多维球体的表面。结果可用于突出显示可以修改或从数据中删除的异常值的存在。
*   **相关属性**：由于存在高度相关的属性，某些算法的重要性会降低。可以识别具有高相关性的成对属性，并且可以从数据中移除最相关的属性。

## 转换数据属性

训练数据的变换可以减少数据的偏度以及数据中异常值的突出性。许多模型希望在应用算法之前转换数据。

*   **居中**：转换数据，使其平均值为零，标准差为1。这通常称为数据标准化。
*   **缩放**：标准缩放变换是将原始比例的数据映射到0到1之间的比例。这通常称为数据规范化。
*   **删除偏斜**：偏斜数据是指分布被推送到一侧或另一侧（更大或更小的值）而不是正态分布的数据。某些方法假设正常分布的数据，并且如果消除了偏斜，则可以更好地执行。尝试使用值的日志，平方根或反转替换属性。
*   **Box-Cox** ：Box-Cox变换或变换系列可用于可靠地调整数据以消除偏斜。
*   **Binning** ：通过将值分组到bin中，可以使数字数据离散。这通常称为数据离散化。此过程可以手动执行，但如果系统地执行并使用在域中有意义的启发式自动执行则更可靠。

## 摘要

数据预处理是准备原始数据进行建模，满足特定机器学习算法数据期望所需的重要步骤，并且可以在模型准确率方面带来意想不到的提升。

在这篇文章中，我们发现了三组数据预处理方法：

*   添加属性
*   删除属性
*   转换属性

下次您希望提高模型准确率时，请考虑您可以为数据设计哪些新视角，以便模型进行探索和利用。