使用scikit-learn进行初步的数据预处理

对于机器学习来说,sklearn具有非常丰富且方便的算法模型库,现在我们将使用sklearn中的preprocessing库来对数据进行初步的预处理。


1.Z-Score标准化(尽量使均值为0,方差为1)

标准化即将数据按比例进行缩放,使其落入一个限定的区间。特点是使得不同量纲之间的特征具有可比性,同时不改变原始数据的分布。属于无量纲化处理。

公式

需要计算特征的均值和标准差,使用sklearn中preprocessing库中的StandardScaler类对特征进行标准化代码如下:

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
# data 即为标准化后返回的数据
data = ss.fit_transform(train_data)
特点:

1.标准化后不会改变原始数据的分布,即不会影响各自特征对目标函数的权重。
2.在样本数据大的情况下比较稳定,适用于嘈杂的现代大数据场景。


2.区间缩放法

顾名思义,将数据进行伸缩变换到[0, 1]或者是[-1, 1]范围内进行处理,也是属于无量纲化处理。

最小最大值标准化(MinMaxScaler)

使用sklearn中preprocessing库中的MinMaxScaler类对特征进行标准化代码如下:

from sklearn.preprocessing import MinMaxScaler

# 使用 MinMaxScaler 对数据进行缩放
# MinMaxScaler(feature_range = (0, 1), copy = True) 
# 其中 feature_range: tuple(min, max), default = (0, 1)
# 即可以自行指定最小最大值范围,因此也称最小最大值标准化

mms = MinMaxScaler()
data = mms.fit_transform(data)
绝对值最大标准化

使用sklearn中preprocessing库中的MaxAbsScaler类对特征进行标准化代码如下:

from preprocessing import MaxAbsScaler

# 通过除以最大值,将数据缩放至[-1, 1]
# 这意味着数据以0为中心或者含有非常多的0,即稀疏数据

mas = MaxAbsScaler()
train_data = mas.fit_transform(data)
特点:

1.对不同特征维度数据进行伸缩变换,达到归一。
2.改变了原始数据的分布,即各特征对目标函数的权重影响是一致的。
3.可对方差特别小的数据增强其稳定性,也可以维持稀疏矩阵中多为0的样本条目。
4.可以提高迭代求解的收敛速度和精度。
5.最小值和最大值容易受噪声点影响,鲁棒性差。


3.正则化

奥卡姆剃刀定律:如无需要,勿增实体。因此模型越复杂,越容易出现过拟合。之前以最小化损失函数(经验风险最小化)为目标,后来以最小化损失函数和模型复杂度(结构风险最小化)为目标。所以,通过降低模型的复杂度来防止模型过拟合的规则称为正则化。

  • 机器学习中最常见的无外乎就是L1正则化L2正则化
  • 对于线性回归模型而言,使用L1正则化的模型称为Lasso回归,使用L2正则化的模型称为岭回归(Ridge 回归)
  • 在一般回归模型分析中,w一般称为回归系数,而使用正则化项就是对回归系数进行处理。
  • L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为||w||1
  • L2正则化是指权值向量w中各个元素的平方和然后再求平方根,通常表示为||w||2
  • L1正则使得带有L1正则的模型在拟合过程中,部分参数权值降为0,可以产生稀疏权值矩阵,进而用来进行特征选择。
  • L2正则即使带有L2正则的模型在拟合的过程中,不断的让权值变小,因此加入有数据发生偏移(噪声点)也不会对结果造成什么影响,即抗干扰能力强。
  • L1正则之所以一定程度上可以防止过拟合,是因为当L1的正则化系数很小时,得到的最优解会很小,可以达到和L2正则化类似的效果。

使用sklearn中preprocessing库中的normalize类对特征进行标准化代码如下:

from preprocessing import normalize

# data 为被正则的数据集,norm 参数选择为 l1, l2
# 即选择L1正则还是L2正则

train_data = normalize(data, norm = 'l2')
开始使用scikit-learn进行数据预处理,可以从以下几个步骤入手: 1. **安装**:确保你已经安装了Python和必要的库,包括`numpy`, `pandas`, 和 `scikit-learn`。如果还没有,可以分别通过pip进行安装: ```bash pip install numpy pandas scikit-learn ``` 2. **基础理解**:熟悉Pandas,它是数据操作的核心库。学会读取CSV、Excel等常见文件格式,以及数据清洗(处理缺失值、异常值)、基本统计描述等操作。 3. **数据探索**:使用Pandas的`head()`, `describe()`, 或者可视化工具(如matplotlib或seaborn)查看数据的基本情况,了解特征分布。 4. **编码**:对于非数值型变量(如分类变量),可能需要进行独热编码(One-Hot Encoding)或标签编码(Label Encoder)。scikit-learn库提供了一些工具,如`LabelEncoder`和`OneHotEncoder`。 5. **标准化或归一化**:如果是连续数值,需要对其进行缩放以保证所有特征在同一尺度上,scikit-learn有`StandardScaler`和`MinMaxScaler`等。 6. **特征选择**:如果你的数据包含冗余或者无关紧要的特征,可以选择保留重要特征或降维。常用方法有单变量分析、递归特征消除(RFE)等。 7. **拆分数据**:将数据划分为训练集、验证集和测试集,通常使用`train_test_split`函数。 8. **实践项目**:尝试用一些经典的sklearn示例数据集(如波士顿房价、鸢尾花等)做实战练习,一步步应用以上步骤。 学习过程中,记得查阅官方文档https://scikit-learn.org/stable/tutorial/index.html,以及在线课程、博客文章和书籍(如《利用scikit-learn和Python进行机器学习》)会有很大帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值