专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

数据预处理的方法有哪些,数据预处理的流程

来源:小易整编  作者:小易  发布时间:2023-01-04 05:27
摘要:数据预处理的方法有哪些,数据预处理的流程。在数据科学项目中,数据预处理是最重要的事情之一。如果有正确的「数据预处理和特征工程,该模型更有可能与数据未得到很好预处理的模型相比,产生更好的结果。」数据预处理主要有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

本文地址:IT百科频道 https://www.hkm168.com/tags/886615.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


IT百科
小编:小易整编
相关文章相关阅读
  • 使用Go语言进行大数据分析的常用技巧

    使用Go语言进行大数据分析的常用技巧

    使用Go语言进行大数据分析的常用技巧随着大数据时代的来临,数据分析成为了各个领域中不可或缺的一环。而Go语言作为一种强大的编程语言,其简洁、高效的特性使得它成为大数据分析的理想选择。本文将介绍一些使用Go语言进行大数据分析常用的技巧,并提供...

  • 数据结构包括哪三方面

    数据结构包括哪三方面

    数据结构包括线性结构、树形结构和图形结构三方面。详细介绍:1、线性结构是最简单也是最常见的数据结构之一,线性结构中的数据元素之间存在一对一的关系,即每个元素只有一个直接前驱和一个直接后继,线性结构的常见实现方式有数组、链表、栈和队列;2、树...

  • 数据库的substr函数用法是什么

    数据库的substr函数用法是什么

    数据库的substr函数用法:1、【substr(str,pos,len)】从pos开始的位置,截取len个字符;2、【substr(str,pos)】pos开始的位置,一直截取到最后。数据库的substr函数用法:1、SUBSTR(st...

  • 漫游数据是什么意思

    漫游数据是什么意思

    漫游数据是指在非手机号码的归属地使用而产生的流量,例如某些上网的套餐指定了省内和省外流量数不同,如果省外流量超出了套餐流量,那么漫游到外省的时候就要增加收费。推荐:《编程视频》数据漫游是指在非手机号码的归属地使用而产生的流量。例如某些上网的...

  • SQL中的有哪几种数据类型

    SQL中的有哪几种数据类型

    sql中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型简要描述一下sql中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型字符型VARCHAR和CHARVARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们...

  • 什么是数据库架构?数据库架构有几层

    什么是数据库架构?数据库架构有几层

    一:什么是数据库架构DBMS体系结构有助于数据库的设计,开发,实现和维护,数据库可以存储企业的关键信息,选择正确的数据库体系结构有助于快速安全地访问数据。二:数据库架构有几层1层架构最简单的数据库体系结构是1层,其中客户端,服务器和数据库都...

  • 关系型数据库系统事务的ACID特性是什么

    关系型数据库系统事务的ACID特性是什么

    关系型数据库系统事务的acid特性:1、原子性;事务里的所有操作要么全部做完,要么都不做。2、一致性;数据库要一直处于一致的状态。3、独立性;并发的事务之间不会互相影响。4、持久性;一旦事务提交后,它所做的修改将会永久的保存在数据库上。本教...

  • 电商大数据平台有哪些

    电商大数据平台有哪些

    电商大数据平台有:1、多多情报通,是一款大数据软件,能够帮助商家作运营决策的有效工具;2、生意参谋,淘宝数据辅助工具,集市场行情、装修分析、来源分析、竞争情报等数据产品于一体;3、京东商智,是面向商家的一站式运营数据开放平台;4、知虾,是针...

  • 周排行
  • 月排行
  • 年排行

精彩推荐