sk-learn 特征数据预处理方式汇总

数据集及基本操作

1)数据集的组成

数据集由特征(feature)与标签(label)构成。

特征是输入数据。 什么是特征(Features): 机器学习中输入数据,被称为特征。通常特征不止1个,可以用 n 维向量表示n个特征。
Features 数据通常表示为大写 X,数据格式为 Numpy array 或者 Pandas 的 dataFrame
X的数据类型必须是float32,或 float64.

标签是输出数据,在sklearn 中有时也称为target, response.
通常标记为小写 y, 只能是1维向量,数据格式为 Numpy array 或者 Pandas 的 Series

2)常用测试集:

  • iris 鸢尾花数据集
  • digits 手写体分类数据集
  • Boston house prices波士顿房价回归数据集

注意 Boston House Price数据集已从1.2中被移除,但仍有很多教程中还使用此数据集做回归示例。手工加载该数据集的方法如下:

import pandas as pd
    import numpy as np

    data_url = "http://lib.stat.cmu.edu/datasets/boston"
    raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
    data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
    target = raw_df.values[1::2, 2]

也可以从 http://lib.stat.cmu.edu/datasets/boston 复制保存至本地,从本地加载

raw_df = pd.read_csv("./boston", sep="\s+", skiprows=22, header=None)

官方提供了California housing datase替代

  from sklearn.datasets import fetch_california_housing
  housing = fetch_california_housing()  #可能下载不了。 

切分数据集

通常,需要将数据集切分为两部分: training set and testing set.

如:

from sklearn.datasets import load_iris
iris = load_iris()

data_X = iris.data
data_y = iris.target

from sklearn.model_selection import train_test_split

#划分为训练集和测试集数据
X_train, X_test, y_train, y_test = train_test_split(
    data_X, 
    data_y, 
    test_size=0.3,
    random_state=111
)

print(X_train.shape)
print(X_test.shape)

print(y_train.shape)
print(y_test.shape)

Output
(105, 4)
(45, 4)
(105,)
(45,)

数据集预处理技术

sklearn的数据预处理操作分类

(1) Feature Extract
① Load features from dict
② 文件特征化
(2) Preprocessing Data
① Standalizaiton , scaling
② Normalization
③ Encoding categorical features
④ Discretization
⑤ Custom transformers
(3) Imputation of missing values
① Univariate feature imputation, Multivariate feature imputation
② Nearest neighbors imputation
③ 用常量填充
④ NaN空值填充
(4) Dimension Reduction
① PCA: principal component analysis
② Random projections
③ Feature agglomeration
(5) 快速降维技术 Random Projection
① The Johnson-Lindenstrauss lemma
② Gaussian random projection
③ Sparse random projection

(1)Binarisation 二值 化

二值化主要用于将数值特征向量转换为(0,1), 或(true, false)

原始数据
import numpy as np
from sklearn import preprocessing
data = np.array([[3, -1.5, 2, -5.4],
[0, 4, -0.3, 2.1],
[1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4
二值化处理:
binarized=preprocessing.Binarizer(threshold=1.4).transform(data)
#小于等于1.4的为0,其余为1
print(“原始:\n”,data)
print(“二值化:\n”,binarized)
[
[ 1. 0. 1, 0.]
[ 0. 1. 0, 1]
[ 0. 1. 0. 0]
]

(2)标准化与归一化处理

数据集的标准化(Standardization)是一种特征缩放技术。其主要目的是调整特征的尺度,使得所有特征都具有相同的尺度或范围。

具体来说,标准化通常是通过将每个特征值减去其均值,然后除以其标准差来实现的。这样处理后,每个特征的均值为0,标准差为1,符合标准正态分布。标准化对于那些依赖于距离和权重的算法(如KNN、Logistic Regression等)来说尤其重要,因为这些算法不应受到不均匀缩放数据集的影响。

Normalizatioin,也称归一化。 但与标准化有区别的。归一化主要目的是将数据映射到特定的范围,通常是[0,1]或[-1,1]。标准化更适用于那些特征值分布接近正态分布的情况。而归一化则更适用于那些数据范围有限或需要限制输出范围的情况。

但很多文档中,也将Normalizaiton 归为标准化的方法中。

标准化方式:
Z-score标准化(标准差标准化):这是最常用的标准化方法之一。这种方法对于大多数基于梯度的优化算法(如神经网络和逻辑回归)非常有效,因为它可以确保每个特征在模型中具有相同的权重。
Scaling 缩放技术
Min-max标准化(最小-最大标准化):它通过缩放特征值,使其落在[0,1]的范围内。具体实现是将每个特征值减去其最小值,然后除以其最大值与最小值之差。这种方法适用于那些需要限制数据范围或输出范围的情况,例如某些图像处理和信号处理的任务。
MaxAbsScaler:原理:将每个特征值缩放到[-1, 1]区间,通过除以每个特征的最大绝对值实现。如果数据集中有很大的异常值,使用MaxAbsScaler可能是一个好选择,因为它不会受到异常值的影响。

A)StandardScaler 基本标准化方法

计算z score, 分布转为标准正态分布

示例:

import numpy as np  
from sklearn.preprocessing import StandardScaler  
 
# 假设的数据集  
data = np.array([[170, 60], [180, 70], [165, 55], [175, 65]])  
  
# 创建StandardScaler对象  
scaler = StandardScaler()  
  
# 对数据进行标准化处理  
standardized_data = scaler.fit_tra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值