如果您曾经参与过数据科学项目,那么您可能知道数据挖掘的第一步也是主要步骤是数据预处理。在现实生活中,我们获得的原始数据往往非常混乱,以至于机器学习模型无法识别模式并从中提取信息。1.处理空值:空值是数据中任意行或列中的缺失值。空值可能是由于没有记录或损坏的数据。在python中,它们被标记为“Nan”。您可以通过运行以下代码进行检查data.isnull().sum()我们可以用该列的平均值或该列中出现频率最高的项目来填充这些空值。或者我们可以用-999之类的随机值替换Nan。我们可以使用panda库中的fillna()函数来填充Nan值。如果一列有大量空值(比方说超过50%),最好从数据框中删除该列。您还可以使用来自同一列中不为空的k最近邻的值填充空值。Sklearn的KNNImputer()可以帮助您完成这项任务。2.异常值处理:异常值是数据中与其他值有一定距离的数据点。我们可以使用箱线图等可视化工具检测异常值:通过绘制两个特征向量之间的散点图:散点图中的异常值如果您了解数据背后的科学(例如,这些数据点必须在范围内),则可以排除异常值。例如,如果年龄是数据的一个特征,那么您知道它必须介于0到100之间(或者在某些情况下介??于0到130之间)。但是,如果数据中的年龄值不合理,比如300,则必须将其删除。如果机器学习模型的预测很关键,即微小的变化很重要,那么您不应该丢弃这些异常值。同样,如果异常值大量存在(例如25%或更多),那么它们很有可能代表有用的东西。在这种情况下,您必须仔细检查异常值。3.归一化或数据缩放:如果您使用基于距离的机器学习算法,例如K最近邻、线性回归、K均值聚类或神经网络,请在将数据输入机器学习模型之前对数据进行归一化。统一是一个好习惯。归一化是指在不改变它们之间相关性的情况下,修改数值特征的值,使它们达到一个共同的尺度。不同数值特征中的值位于不同的范围内,这会降低模型的性能,因此归一化可确保在进行预测时为特征分配适当的权重。一些常用的归一化技术是:a)最小-最大归一化——将特征缩放到最小值和最大值之间的给定范围。公式为:X(scaled)=a+(b-a)(X-Xmin)/(Xmax-Xmin)其中a是最小值,b是最大值。b)Z-score归一化——我们从每个特征中减去均值并除以其标准差,这样得到的缩放特征具有零均值和单位方差。公式为:X(scaled)=(X-mean(X))/σ这样,您可以将数据的分布更改为正态分布。4.编码分类特征分类特征是包含离散数据值的特征。如果分类特征具有字符、单词、符号或日期作为数据值,则这些数据必须编码为数字,以便机器学习模型能够理解它们,因为它们只处理数字数据。可以通过三种方式对数据进行编码:a)标签编码:在这种类型的编码中,分类特征中的每个离散值都会根据字母顺序分配一个唯一的整数。在下面的示例中,您可以看到每个水果都分配了一个对应的整数标签:标签编码通常应用于线性模型,例如线性回归、逻辑回归以及神经网络。b)One-hot:在这种编码类型中,分类特征中的每个离散值都被分配一个唯一的one-hot向量或由1和0组成的二进制向量。在一个one-hotvector中,只有离散值的索引被标记为1,所有其他值都被标记为0。在下面的例子中,可以看到每个水果都被分配了一个对应的one-hotvector长度为5:one-hot编码通常用于基于树的模型,例如随机森林和梯度提升机。c)平均编码——在这种类型的编码中,分类特征中的每个离散值都使用相应的平均目标标签进行编码。为了更好地理解,让我们看下面的示例:我们有三个水果标签['Apple'、'Banana'、'Orange']。每个水果标签的平均编码公式如下:Encodedfeature=Truetargets/Totaltargets对于Apple,truetargets为3,totaltargets为4,因此Apple的平均编码为3/4=0.75。同样,橙色的编码为1/2=0.5,香蕉的编码为3/3=1。均值编码是标签编码的扩展版本,与它相比更符合逻辑,因为它考虑了目标标签。5.离散化:这也是一种很好的预处理技术,有时可以通过减小数据大小来提高模型的性能。它主要用于数值特征。在离散化中,数值特征被划分为bins/intervals。每个bin包含一定范围内的值。一个bin中值的个数可以相同也可以不同,然后将每个bin视为一个分类值。我们可以使用离散化将数值特征转换为分类特征。这些是在实施机器学习模型时可用于预处理数据的不同方法。希望本文对您有所帮助。
