机器学习数据预处理是为了使原始数据适合机器学习模型的过程。
以下是数据预处理的常见步骤和总结:
一.数据清洗:
处理缺失值、异常值和重复值。可以通过填充缺失值、删除异常值和处理重复值来进行清洗。
1.缺失值补全
因为各种各样的原因,真实世界中的许多数据集都包含缺失数据,这类数据经常被编码成空格、NaNs,或者是其他的占位符。使用不完整的数据集的一个基本策略就是舍弃掉整行或整列包含缺失值的数据。但是这样就付出了舍弃可能有价值数据(即使是不完整的 )的代价。因此需要进行缺失值补全。处理缺失数值的一个更好的策略就是从已有的数据推断出缺失的数值。
1.1单变量插补全(SimpleImputer)
缺失值可以用提供的常数值计算,也可以使用缺失值所在的行/列中的统计数据(平均值、中位数或者众数)来计算。这个类也支持不同的缺失值编码。
1.1.1平均数替换
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X))
1.1.2众数替换
>>> import pandas as pd
>>> df = pd.DataFrame([["a", "x"],
... [np.nan, "y"],
... ["a", np.nan],
... ["b", "y"]], dtype="category")
...
>>> imp = SimpleImputer(strategy="most_frequent")
>>> print(imp.fit_transform(df))
[['a' 'x']
['a' 'y']
['a' 'y']
['b' 'y']]
1.2多变量插补(IterativeImputer)
一种更复杂的方法是使用IterativeImputer类,它将每个缺失值的特征建模为其他特征的函数,并使用该估计值进行估算。它以迭代循环方式执行:在每个步骤中,将要素目标列指定为输出y,将其他列视为输入X。使用一个回归器来在已知(未缺失)y的样本上,对(X,y)进行拟合。然后使用这个回归器来预测缺失的y值。这是以迭代的方式对每个特征进行的,然后重复max_iter轮。最后一轮的计算结果被返回。
>>> import numpy as np
>>> from sklearn.experimental import enable_iterative_imputer
>>> from sklearn.impute import IterativeImputer
>>> imp = IterativeImputer(max_iter=10, random_state=0)
>>> imp.fit([[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]])
IterativeImputer(add_indicator=False, estimator=None,
imputation_order='ascending', initial_strategy='mean',
max_iter=10, max_value=None, min_value=None,
missing_values=nan, n_nearest_features=None,
random_state=0, sample_posterior=False, tol=0.001,
verbose=0)
>>> X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
>>> # the model learns that the second feature is double the first
>>> print(np.round(imp.transform(X_test)))
[[ 1. 2.]
[ 6. 12.]
[ 3. 6.]]
插补法补充:https://blog.csdn.net/qq_40514904/article/details/103584223
1.3使用KNN算法填补缺失值
打个比方:如果你想交一个人作为朋友,不过你不是很了解他,你可以通过观察他的朋友的性格是怎样的从而判断他的性格如何。KNN就是根据空值最近的数来判断填补空值。
from sklearn.impute import KNNImputer
nan=np.nan
X=[[1,2,nan],[3,4,3],[nan,5,6],[6,7,4]]
imputer=KNNImputer(n_neighbors=3,weights="uniform")
print(imputer.fit_transform(X))
1.4标记缺失值(MissingIndicator)
MissingIndicator转换器用于将数据集转换为相应的二进制矩阵,以指示数据集中缺失值的存在。
例如我们将-1作为缺失值
from sklearn.impute import MissingIndicator
X = np.array([[-1, -1, 1, 3],
[4, -1, 0, -1],
[8, -1, 1, 0]])
indicator = MissingIndicator(missing_values=-1)
mask_missing_values_only = indicator.fit_transform(X)
print(mask_missing_values_only)
2.缺失值删除
import pandas as pd
import numpy as np
data=pd.DataFrame([[8.3,6,],[9.3,4,],[6,8,8],[5,6],[3,1,8]],columns=('a','