机器学习笔记 数据预处理01

数据预处理在机器学习中至关重要,涉及缺失值处理(如平均数、众数补全,KNN插补,缺失值标记),异常值检测与处理(如3δ原则、箱型图方法、DBSCAN),以及特征缩放(标准化、归一化)等。特征选择、去除唯一属性和特征编码也是预处理的组成部分。
摘要由CSDN通过智能技术生成

机器学习数据预处理是为了使原始数据适合机器学习模型的过程。

以下是数据预处理的常见步骤和总结:

一.数据清洗:

处理缺失值、异常值和重复值。可以通过填充缺失值、删除异常值和处理重复值来进行清洗。

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','
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值