数据预处理的方法有哪些,数据预处理的流程。在数据科学项目中,数据预处理是最重要的事情之一。
如果有正确的「数据预处理和特征工程,该模型更有可能与数据未得到很好预处理的模型相比,产生更好的结果。」
数据预处理主要有4个重要步骤。
拆分训练集和测试集 处理缺失值 处理分类特征 进行标准化处理
拆分训练集和测试集
训练集和测试集拆分是机器学习中的重要步骤之一。
这非常重要,「因为你的模型需要在部署之前进行评估。」
训练集和测试集拆分背后的主要思想是将原始数据集转换为两部分
训练集 测试集
其中训练集由训练数据和训练标签组成,测试集由测试数据和测试标签组成。
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 列的缺失值。
from sklearn.impute import SimpleImputer imputer = SimpleImputer(fill_value=np.nan, startegy='mean') X = imputer.fit_transform(df)
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
在 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)
在 「OneHotEncoder 中」 ,我们为每个唯一的分类值创建一个新列。
下面通过一个例子来了解一下。
catDf['Continent'] = ['Asia', 'North America', 'Asia']
有两种方法可以做到这一点。
1.DataFrame.get_dummies
这是一种非常常见的方法,我们使用 pandas 内置函数 「get_dummies」 将数据帧中的分类值转换为独热编码。
pd.get_dummies(data=catDf)
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方法。」
然后,为了将它加入我们的原始数据帧,可以使用 「pd.concat」 连接 2 个不同数据帧。
标准化数据集
有几种方法可以做到这一点。我将讨论标准化数据集的 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)」的过程。
from sklearn.preprocessing import Normalizer norm = Normalizer() catDf.iloc[:,1:-1] = norm.fit_transform(catDf.iloc[:,1:-1]) catDf
本文地址:百科问答频道 https://www.neebe.cn/wenda/886615.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!