- 🍨 本文为🔗365天深度学习训练营中的学习记录博客
- 🍖 原作者:K同学啊
一、我的环境
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
对象,并命名为imputer
。strategy='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)
: 结合fit
和transform
,对数据集进行拟合并替换缺失值。
示例:
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)