数据处理与转换

目录

一.归一化

  1.1 最小最大值标准化(MinMaxScaler)

  1.2绝对值最大标准化( MaxAbsScaler)

二.标准化

  2.1 零均值单位方差(scale

  2.2 训练数据的均值方差(StandardScaler)

三.正则化(Normalization)

  3.1  L1、L2正则化

四.其他方法

  4.1 特征二值化

  4.2 自定义转换


一.归一化

  1.1 最小最大值标准化(MinMaxScaler)

将属性缩放到一个指定的最大和最小值(通常是0-1)之间,常用的最小最大规范化方法(x-min(x))/(max(x)-min(x)),这可以通过preprocessing.MinMaxScaler类实现。

使用这种方法的目的包括:

1、对于方差非常小的属性可以增强其稳定性。

2、维持稀疏矩阵中为0的条目,即保留数据中的0元素

import numpy as np
from sklearn import preprocessing 

X_train = np.array([[ 1., -1., 2.],
     [ 2., 0., 0.],
    [ 0., 1., -1.]])
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
X_train_minmax
[out]array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])

#缩放因子等属性
min_max_scaler.scale_
[out]array([0.5       , 0.5       , 0.33333333])

min_max_scaler.min_
[out]array([0.        , 0.5       , 0.33333333])

  1.2绝对值最大标准化( MaxAbsScaler)

与上述标准化方法相似,但是它通过除以最大值将训练集缩放至[-1,1]。应用于数据以0为中心或者是含有非常非常多0的稀疏数据。

X_train = np.array([[ 1., -1., 2.],
     [ 2., 0., 0.],
    [ 0., 1., -1.]])

max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
X_train_maxabs
[out]array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])

二.标准化

数据的标准化是将数据按比例缩放,使之落入一个小的特定区间,标准化后的数据可正可负,但是一般绝对值不会太大。一般是 z-score规范化方法:(x-mean(x))/std(x)

实现时,有两种不同的方式:

  2.1 零均值单位方差(scale

使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。

X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])  

X_scaled = preprocessing.scale(X)
X_scaled
[out]array([[ 0.        , -1.22474487,  1.33630621],
       [ 1.22474487,  0.        , -0.26726124],
       [-1.22474487,  1.22474487, -1.06904497]])

#scaled之后的数据零均值,单位方差
X_scaled.mean(axis=0)
[out]array([0., 0., 0.])

X_scaled.std(axis=0)
[out]array([1., 1., 1.])

  

  2.2 训练数据的均值方差(StandardScaler)

使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。

scaler = preprocessing.StandardScaler().fit(X)
scaler
[out]StandardScaler(copy=True, with_mean=True, with_std=True)

#均值
scaler.mean_
[out]array([1.        , 0.        , 0.33333333])

#方差
scaler.var_
[out]array([0.66666667, 0.66666667, 1.55555556])

#数据转换
scaler.transform(X)
[out]array([[ 0.        , -1.22474487,  1.33630621],
       [ 1.22474487,  0.        , -0.26726124],
       [-1.22474487,  1.22474487, -1.06904497]])

注:1.若设置with_mean=False 或者 with_std=False,则不做centering 或者scaling处理。

  2.scale和StandardScaler可以用于回归模型中的目标值处理。

三.正则化

  3.1  L1、L2正则化(Normalization)

正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。

Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(L1-norm,L2-norm)等于1。

p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

该方法主要应用于文本分类和聚类中。

可以使用preprocessing.normalize()函数对指定数据进行转换:

X = [[ 1., -1.,  2.],
     [ 2.,  0.,  0.],
    [ 0.,  1., -1.]]
X_normalized = preprocessing.normalize(X, norm=‘l2‘)

X_normalized
[out]array([[ 0.40824829, -0.40824829,  0.81649658],
       [ 1.        ,  0.        ,  0.        ],
       [ 0.        ,  0.70710678, -0.70710678]])

可以使用processing.Normalizer()类实现对训练集和测试集的拟合和转换:

normalizer = preprocessing.Normalizer().fit(X)  # fit does nothing
normalizer
[out]Normalizer(copy=True, norm=‘l2‘)

normalizer.transform(X)
[out]array([[ 0.40..., -0.40...,  0.81...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 0.  ...,  0.70..., -0.70...]])

normalizer.transform([[-1.,  1., 0.]])
[out]array([[-0.70...,  0.70...,  0.  ...]])

四.其他方法

  4.1 特征二值化

特征二值化是把数值特征转化成布尔值的过程。这个方法对符合多变量伯努利分布的输入数据进行预测概率参数很有效。详细可以见这个例子sklearn.neural_network.BernoulliRBM.

#data
X = [[ 1., -1.,  2.],
         [ 2.,  0.,  0.],
         [ 0.,  1., -1.]]

#binary
binarizer = preprocessing.Binarizer().fit(X)  # fit does nothing
binarizer
[out]Binarizer(copy=True, threshold=0.0)

#transform
binarizer.transform(X)
[out]array([[ 1.,  0.,  1.],
       [ 1.,  0.,  0.],
       [ 0.,  1.,  0.]])     

# 调整阈值
binarizer = preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)
[out]array([[ 0.,  0.,  1.],
       [ 1.,  0.,  0.],
       [ 0.,  0.,  0.]])

 

  4.2 自定义转换

如果以上的方法觉得都不够,譬如你想用对数据取对数,可以自己用 FunctionTransformer自定义一个转化器,并且可以在Pipeline中使用

from sklearn.preprocessing import FunctionTransformer

transformer = FunctionTransformer(np.log1p)#括号内的就是自定义函数
X = np.array([[0, 1], [2, 3]])
transformer.transform(X)
[out]array([[0.        , 0.69314718],
       [1.09861229, 1.38629436]])

参考:

https://www.cnblogs.com/charlotte77/p/5622325.html

https://www.cnblogs.com/zhanglianbo/p/5690974.html

原文地址:https://www.cnblogs.com/jin-liang/p/9478607.html

时间: 2024-10-10 13:38:22

数据处理与转换的相关文章

kettle转换和作业插件开发及调试

这是一篇几年前写下的文档,最近打算根据这篇文档重写一下kettle插件的教程.结果各种理由,一推再推.今天索性将这篇文档发布出来,分享给大家,例子等有空再补上.这是一篇基于kettle3.2基础上完成的kettle插件文档.然而现在最新版的kettle的界面已经完全变了样了,但是那些组件还是那么熟悉.对数据处理稍微熟悉点的应该对kettle都不陌生,kettle是一个快速格式化和数据抽取的工具.好吧,入正题: 如果你对kettle插件感兴趣可以到官网查看更多的资料:http://www.pent

数据库基础 MySQL

数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享. 数据库管理系统软件 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称DBMS.它对数据库进行统一的管理和控制,以保证数据库的安全性和 完整性.用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms

数据库:socketserver模块、MySQL(一)

一.socketserver实现并发 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环. socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) server类: request类: 继承关系: 以下述代码为例,分析socketserver源码: ftpserver=socketserver.ThreadingTCPServer(('127.0.0.1',8080),FtpServer)ftpserver.serve_foreve

Day43:socketserver模块、MySQL

一.socketserver实现并发 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环. socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) server类: request类: 继承关系: 以下述代码为例,分析socketserver源码: ftpserver=socketserver.ThreadingTCPServer(('127.0.0.1',8080),FtpServer)ftpserver.serve_foreve

走入计算机的第四十天(数据库1)

一  什么是数据库 数据库故名思意就是存放数据的地方,是指长期存储在计算机内有组织可以共享的数据的集合. 数据库的数据按照一定的数学模型组织,描述和储存的,具有较小的冗余性和较高的可扩展性,并共享 二 数据库管理系统软件 数据库管理系统(Database Management System)是操纵和管理数据库的大型软件,用于建立,使用和维护数据库,简称DBMS. 它对数据库进行统一的管理和控制,以确保数据库的安全性和完整性.用户通过DBMS访问数据库中的数据,数据库中的管理员也是通过DBMS进行

MySQL数据库(1)_MySQL数据库介绍与安装

一.数据库相关概念的简介 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享. 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称DBMS.它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性.用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行

2017年6月26日课堂笔记

2017年6月26日 星期一 晴 空气质量:轻度污染 内容:MySQL第一节课: 1.基本概念 1)MySQL: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件. MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表

Kettle plugin 插件开发

Kettle本身提供了很多组件,多个组件一起构成一个transformation(转换),多个转换一起构成一个job(任务).kettle的组件已经非常丰富,在组件不满足需求时可以在kettle上面开发自己的组件,kettle支持的组件开发如下: Kettle中的插件包含两部分: 一是系统本身就已经实现的功能点,在源码目录src中说明,如kettle-steps.xml: 二是系统之外开发的插件,在plugins目录对应插件目录下的plugins.xml说明,如plugins/steps/S3C

Spark ML Pipeline简介

Spark ML Pipeline基于DataFrame构建了一套High-level API,我们可以使用MLPipeline构建机器学习应用,它能够将一个机器学习应用的多个处理过程组织起来,通过在代码实现的级别管理好每一个处理步骤之间的先后运行关系,极大地简化了开发机器学习应用的难度.        Spark ML Pipeline使用DataFrame作为机器学习输入输出数据集的抽象.DataFrame来自Spark SQL,表示对数据集的一种特殊抽象,它也是Dataset(它是Spar