第L1周:ML | 数据预处理

一、我的环境

1. 语言环境:conda环境 Python 3.12.3
2. 编译器:Jupyter Lab

注:要先安装好numpy、Pandas、sklearn三个包

       安装sklearn最好采用镜像安装(如果不会科学上网的话)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

pip install numpy

pip install Pandas

二、代码学习

1. 导入库
import numpy as np
import pandas as pd
 2. 导入数据集
dataset = pd.read_csv("C:\\Users\\Zhao\\Desktop\\data\\Data.csv")
dataset

X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
解释:

        1. 这行代码的作用是从名为dataset的DataFrame中提取特征数据,并将其存储在变量X中。这里使用了iloc方法,它是pandas中用于基于整数位置的索引的方法。

        2. : 表示选择所有的行;:-1 表示选择从第一列到倒数第二列的所有列。在Python中,索引-1表示最后一个元素,所以:-1表示不包括最后一个元素的切片。

        3.  values属性将DataFrame中选定的部分转换为NumPy数组的形式,这样可以用于机器学习模型的输入,因为大多数模型都需要NumPy数组格式的数据。

3. 处理丢失数据

   SimpleImputer函数用于处理缺损值,详细介绍见文末。

from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')
imputer = imputer.fix(X[ : , 1:3])

X[ : , 1:3] = imputer.transform(X[ : , 1:3])
X

 

解释:

        1. from sklearn.impute import SimpleImputer    这行代码从scikit-learn库中导入了SimpleImputer类。SimpleImputer是一个用于填充数据集中缺失值的工具,它提供了几种不同的填充策略。

        2. imputer = SimpleImputer(strategy='mean')   这里创建了一个SimpleImputer对象,并命名为imputerstrategy='mean'参数指定了填充缺失值的方法,即用每列的均值来填充该列的缺失值。

        3. imputer = imputer.fit(X[ : , 1:3]) 这行代码对imputer对象调用fit方法,以计算数据集X中第2列到第3列(Python中索引从0开始,所以1:3实际上是指第2列到第3列)的均值。fit方法会扫描指定的列,计算非缺失值的均值,并存储这些均值以便后续使用。

        4. X[ : , 1:3] = imputer.transform(X[ : , 1:3]) 在调用fit方法之后,imputer对象已经知道了每列的均值。这行代码使用transform方法将第2列到第3列中的所有缺失值替换为相应列的均值。替换后的结果会覆盖原来的X[:, 1:3]部分。

        值得注意的是:以上代码等价于

imputer = SimpleImputer(strategy = 'mean')
X[ : , 1:3] = imputer.fit_transform (X[ : , 1:3])
4. 利用Label进行编码

        进行Label编码的主要原因是为了将文本转换为模型可以理解的数值形式

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
X

labelencode_Y = LabelEncoder()

Y = labelencode_Y.fit_transform(Y)
5. 拆分为训练集和测试集 
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, random_state=0)
解释:
1. 从scikit-learn的model_selection模块中导入了train_test_split函数
2. 对于random_state = 0的说明:

      不设置 random_state 或设置为0:

     (1) 不同的样本被选为训练集或测试集:这意味着在一次运行中被选为训练集的样本,在另一次运行中可能会出现在测试集中。

     (2) 不同的数据分布:如果数据集中的某些特征或类别的样本数量较少,随机分割可能会导致训练集或测试集中这些特征或类别的表示不均衡。

     (3) 不同的模型性能评估:由于训练集和测试集的样本不同,模型在测试集上的性能可能会有所波动。这可能会影响模型性能的评估和比较。

      设置 random_state 为一个特定的整数时,分割的结果将保持一致:

     (1) 相同的样本被选为训练集或测试集:每次运行代码时,相同的样本将被分配到训练集和测试集中。

     (2) 相同的数据分布:训练集和测试集在特征和类别上的分布将保持一致。

     (3) 一致的模型性能评估:模型在测试集上的性能评估将保持一致,使得模型的比较和评估更加可靠。

       在实践中,为了确保模型评估的公正性和可重复性,通常会在分割数据时设置一个固定的 random_state

6. 标准化
from sklearn.preprocessing import StandardScaler

sc_X    = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test  = sc_X.transform(X_test)

   StandardScaler()scikit-learn库中用于数据标准化处理的一个常用工具。标准化目的是将数据缩放到一个均值为 0,标准差为 1 的正太分布,消除不同特征量纲的影响,尤其是像支持向量机 (SVM)、逻辑回归、神经网络等基于梯度的模型。

三、.SimpleImputer()处理缺损数据

        sklearn.impute.SimpleImputer 是 Scikit-learn 库中的一个类,用于处理数据集中缺失值的插补。它通过替换缺失值为统计值(例如均值、中位数或众数)或指定的常数来处理缺失数据。以下是 SimpleImputer 的详细介绍:

  • missing_values: 指定需要替换的缺失值。默认值为 np.nan,表示替换 NaN 值。
  • strategy: 指定替换策略。可选值包括:
  •  'mean': 用均值替换缺失值。仅适用于数值数据。
  •  'median': 用中位数替换缺失值。仅适用于数值数据
  •  'most_frequent': 用众数(出现频率最高的值)替换缺失值。适用于数值和分类数据。
  •  'constant': 用常数替换缺失值。需要同时指定 fill_value 参数。
  • fill_value: 在 strategy='constant' 时,指定替换缺失值的常数。默认值为 None
  • add_indicator: 是否添加二进制指示变量,用于指示缺失值的位置。默认值为 False

SimpleImputer方法该要:

  • fit(X, y=None): 拟合 imputer,计算用于替换缺失值的统计值。
  • transform(X): 使用拟合的 imputer 替换缺失值。
  • fit_transform(X, y=None): 结合 fittransform,对数据集进行拟合并替换缺失值。

示例:

import numpy as np
from sklearn.impute import SimpleImputer

# 创建数据集,其中包含缺失值
X = [[1, 2], [np.nan, 3], [7, 6], [4, np.nan]]

# 创建 SimpleImputer 对象,指定用均值替换缺失值
imputer = SimpleImputer(strategy='mean')

# 训练 imputer 并转换数据
X_imputed = imputer.fit_transform(X)

print(X_imputed)

# 创建 SimpleImputer 对象,指定用常数 -1 替换缺失值
imputer = SimpleImputer(strategy='constant', fill_value=-1)

# 训练 imputer 并转换数据
X_imputed = imputer.fit_transform(X)

print(X_imputed)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值