python进行数据预处理的4个重要步骤

 更新时间:2023年06月21日 11:08:32   作者:程序员学长  
在数据科学项目中,数据预处理是最重要的事情之一,本文详细给大家介绍python进行数据预处理的4个重要步骤:拆分训练集和测试集,处理缺失值,处理分类特征和进行标准化处理,需要的朋友可以参考下

如果有正确的数据预处理和特征工程,该模型更有可能与数据未得到很好预处理的模型相比,产生更好的结果。

数据预处理主要有4个重要步骤。

  • 拆分训练集和测试集
  • 处理缺失值
  • 处理分类特征
  • 进行标准化处理

拆分训练集和测试集

训练集和测试集拆分是机器学习中的重要步骤之一。

这非常重要,因为你的模型需要在部署之前进行评估。

训练集和测试集拆分背后的主要思想是将原始数据集转换为两部分

  • 训练集
  • 测试集

其中训练集由训练数据和训练标签组成,测试集由测试数据和测试标签组成。

最简单的方法是使用 scikit-learn 的 一个内置函数 train_test_split。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

在这里,我们在 train_test_split 中传入了 X 和 y 作为参数 ,它将 X 和 y 进行拆分,其中训练集占 80%,测试集占 20% 。

处理缺失值

你可能听说过一个著名的机器学习短语,它是

Garbage in Garbage out

如果你的数据集充满了缺失值,那么你的模型效果也不好。

因此,处理此类缺失值很重要。

让我们用一个虚拟数据集来看看我们如何解决这个问题。

首先查看一下数据集中的缺失值。

df.isna().sum()

我们可以看到数据集中有缺失值。

填充缺失值的一种方法是用该列的平均值填充。

例如,我们可以用该列所有学生的平均值来填充 Final 列的缺失值。

为此,我们可以使用 sklearn.impute 中的 SimpleImputer 。

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(fill_value=np.nan, startegy='mean')
X = imputer.fit_transform(df)

这将使用 该列的 平均值 填充数据框 df 中的所有缺失值 。

可以使用 fit_transform 函数来做到这一点。

X = pd.DataFrame(X, columns=df.columns)
print(X)

现在,可以看到所有缺失值都用均值进行了填充

X.isna().sum()

我们也可以在 SimpleImputer 中使用 mean、 meadian、 mode 等 。

如果 缺失值的行数较少,或者我们的数据不建议填充缺失值,那么可以在 pandas 中使用 dropna 删除缺失的行。

dropedDf = df.dropna()

在这里,我们删除了数据框中的所有空行并将其存储在另一个数据框中。

dropedD.isna().sum()

处理分类特征

我们可以通过将它们转换为整数来处理分类特征。有两种常见的方法可以做到这一点。

  • Label Encoding
  • One Hot Encoding

在 Label Encoder中,将分类值转换为数字标签。假设这是我们的数据集

在 Country 列上使用 Label Encoding 会将 India 转换为 1,将 USA 转换为 2,将 China 转换为 0。

这种技术有一个缺点,即由于 USA 的标签高,它给予 USA 最高优先级,而 China 的优先级最低,标签为 0。

from sklearn.preprocessing import LabelEncoder
l1 = LabelEncoder()
l1.fit(catDf['Country'])
catDf.Country = l1.transform(catDf.Country)
print(catDf)

如代码所示,我们实例化了一个 LabelEncoder 对象,然后使用 fit 方法将其应用到分类列上,然后使用 transform 方法进行转换。

OneHotEncoder 中 ,我们为每个唯一的分类值创建一个新列。

下面通过一个例子来了解一下。

我们将添加另一个分类列,即 “Continent”。

catDf['Continent'] = ['Asia', 'North America', 'Asia']

现在因为我们有 2 个分类列,它们是 [['Country', 'Continent']],我们可以对它们进行独热编码。

有两种方法可以做到这一点。

1.DataFrame.get_dummies

这是一种非常常见的方法,我们使用 pandas 内置函数 get_dummies 将数据帧中的分类值转换为独热编码。

pd.get_dummies(data=catDf)

这将 返回 一个数据帧。

在这里我们可以看到它已经将 Country 列的唯一值转换为 3 个不同的列,分别是 Country_China、Country_India 和 Country_USA。同样,Continent 列的 2 个唯一值已转换为 2 个不同的列,分别命名为 Continent_Asia 和 Continent_North America。

2.OneHotEncoder

使用 scikit-learn 中的 OneHotEncoder 也是一种常见的做法。

它提供了更多的灵活性和更多的选择,但使用起来有点困难。

让我们看看如何为我们的数据集做这件事。

from sklearn.preprocessing import OneHotEncoder
oh = OneHotEncoder()
s1 = pd.DataFrame(oh.fit_transform(catDf.iloc[:, [0,3]]))
catDf = pd.concat([catDf, s1], axis=1)

在这里,我们已经初始化了 OneHotEncoder 对象,并在数据框中对我们想要的列(列号 0 和列号 3)上使用了它的 fit_transform方法。

fit_transform 的返回类型 是 numpy.ndarray ,所以我们通过pd.DataFrame 将其转换为数据框 ,并存储在一个变量中。

然后,为了将它加入我们的原始数据帧,可以使用 pd.concat 连接 2 个不同数据帧。

你可以看到,与 pd.get_dummies 相比,它的可读性并不清晰

但是如果你比较使用 pd.get_dummies 和 OneHotEncoder 获得的最后 5 列,它们都是相等的。

标准化数据集

某些实验证明,与未标准化的数据集相比,机器学习和深度学习模型在标准化数据集上的表现更好。

有几种方法可以做到这一点。我将讨论标准化数据集的 2 种常用方法。

1、Standard Scaler

使用这种技术,可以将数据集转化为均值为 0,标准差为 1。

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
catDf.iloc[:,1:-1] = ss.fit_transform(catDf.iloc[:,1:-1])
print(catDf)

2、Normalization

正则化是将 **每个样本缩放到单位范数(每个样本的范数为1)**的过程。

如果你计划使用二次型(点积)或任何其他核方法来计算两个样本之间的相似性,则此过程会很有用。

Normalization 主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。

使用过程非常简单,与 StandaradScaler 类似。

from sklearn.preprocessing import Normalizer
norm = Normalizer()
catDf.iloc[:,1:-1] = norm.fit_transform(catDf.iloc[:,1:-1])
catDf

以上就是python进行数据预处理的4个重要步骤的详细内容,更多关于python 数据预处理的资料请关注脚本之家其它相关文章!

相关文章

  • django缓存配置的几种方法详解

    django缓存配置的几种方法详解

    缓存对各位学习或者使用django的朋友们来说应该都不陌生,下面这篇文章主要给大家介绍了关于django缓存配置的几种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • Python第三方库jieba库与中文分词全面详解

    Python第三方库jieba库与中文分词全面详解

    jieba库是一款优秀的Python第三方中文分词库,jieba支持三种分词模式:精确模式、全模式和搜索引擎模式,下面这篇文章主要给大家介绍了关于Python第三方库jieba库与中文分词的相关资料,需要的朋友可以参考下
    2022-07-07
  • python 巧用正则寻找字符串中的特定字符的位置方法

    python 巧用正则寻找字符串中的特定字符的位置方法

    下面小编就为大家分享一篇python 巧用正则寻找字符串中的特定字符的位置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • TensorFlow实现MLP多层感知机模型

    TensorFlow实现MLP多层感知机模型

    这篇文章主要为大家详细介绍了TensorFlow实现MLP多层感知机模型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Pytorch 之修改Tensor部分值方式

    Pytorch 之修改Tensor部分值方式

    今天小编就为大家分享一篇Pytorch 之修改Tensor部分值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python中numpy矩阵的零填充的示例代码

    python中numpy矩阵的零填充的示例代码

    本文主要介绍了python中numpy矩阵的零填充的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • python图像处理之反色实现方法

    python图像处理之反色实现方法

    这篇文章主要介绍了python图像处理之反色实现方法,涉及Python结合OpenCV与numpy操作图片的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 利用numpy+matplotlib绘图的基本操作教程

    利用numpy+matplotlib绘图的基本操作教程

    这篇文章主要给大家介绍了利用numpy+matplotlib绘图的基本操作,文中介绍的非常详细,对大家学习matplotlib绘图具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-05-05
  • Python直接使用plot()函数画图的方法实例

    Python直接使用plot()函数画图的方法实例

    Python非常简单而又非常强大,它的功能之一就是画出漂亮的图表,实现数据的可视化,下面这篇文章主要给大家介绍了关于Python直接使用plot()函数画图的相关资料,需要的朋友可以参考下
    2022-05-05
  • 使用Pytorch实现two-head(多输出)模型的操作

    使用Pytorch实现two-head(多输出)模型的操作

    这篇文章主要介绍了使用Pytorch实现two-head(多输出)模型的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05

最新评论