数据预处理

来源:互联网 发布:js array find 编辑:程序博客网 时间:2024/06/05 04:15

在数据预处理的问题上

1.数据清理

(1)缺失的值

插值法包括拉格朗日插值 牛顿插值 Hermite插值 分段插值 样条插值

也可以插均值,中位数等,还可以插入固定值,缺失值边上的值等

回归法,就是把所有数据拟合成一条线。

(2)错误的值

删除,当作缺失值来看

去噪
  1.分箱,分箱方法通过考察数据的“近邻”(即周围的值)来光滑有序数据的值,有序值分布到一些“桶”或箱中。由于分箱方法考察近邻的值,因此进行局部光滑。几种分箱技术:用箱均值光滑、用箱边界光滑、用箱中位数光滑。

      2.回归:可以用一个函数(如回归函数)拟合数据来光滑数据。线性回归涉及找出拟合两个属性(或变量)的“最佳”线,是的一个属性可以用来预测另一个。多元线性回归是线性回归的扩展,其中涉及的属性多于两个,并且数据拟合到一个多维曲面。
 

     3.聚类:通过聚类检测离群点

2.数据变换

(1)简单函数处理

通过数学函数,开方,平方等,变成你想要等序列

(2)规范化 
消除指标间量纲影响 
1.最小-最大规范化 
[100,1000]变成[0,1] 
v'=(v-min)(max-min)/(new_max-new_min)+ne_min

2.零-均值规范化 
v'=(v-均值)/方差

3.小数定标规范化 
v'=v/10^j  变成小数

4.Z-score方法
v'=(v-均值)/标准差  服从正态分布

5.范数方法。
x'=x/n次根号(x1^n+...+xm^n)
https://sanwen.net/a/djnyowo.html(下面几个函数的详细介绍)
常被用来进行非线性变换的函数包括:Atan函数、Logistic函数、Sigmoid函数、Sin函数和Log函数。

(3)离散化

确定分类以及如何将连续属性值映射到这些分类值。

1.等宽法

2.等频法

3.基于聚类分析的方法

3.数据规约

数据多了,错误也就越多,所以选取少量高质量的数据进行分析


合并属性
逐步向前选择
逐步向后删除
决策树归纳
主成分分析 


4.基于sklearn的预处理函数

preprocessing模块提供了数据预处理函数和预处理类,预处理类http://www.cnblogs.com/zhuyuanhao/p/5387839.html
preprocessing.scale(X, axis=0, with_mean=True, with_std=True, copy=True):
将数据转化为标准正态分布(均值为0,方差为1)
preprocessing.normalize(X, norm='l2', axis=1, copy=True):
将数据归一化到区间 [0, 1],norm 可取值 'l1'、'l2'、'max'。可用于稀疏数据 scipy.sparse
preprocessing.binarize(X, threshold=0.0, copy=True):
将数据转化为 0 和 1,其中小于等于 threshold 为 0,可用于稀疏数据 scipy.sparse

import scipy as sp
from sklearn import preprocessing
import numpy as np

X = np.array([[1.,-1.,2.],[2., 0., 0.],[0., 1., -1]])
#异常矩阵
XY = np.array([[np.nan,2],[6,np.nan],[7,6]])
#创建一个稀疏矩阵
a = np.array([7,8,9])
b = np.array([0,2,2])
c = np.array([0,2,3,3])

m = sp.sparse.csc_matrix((a,b,c),shape=(3, 3)).toarray()
#稀疏矩阵
y = np.array([[-1,0,0],
              [1,0,0],
             
[0,1,-1]])
x_scaled = preprocessing.scale(X)

scaler = preprocessing.StandardScaler().fit(X)
#均值
scaler.mean_
#标准差
scaler.scale_
#转化成标准化
scaler.transform(X)
#[0到1]
scalerMaxMin = preprocessing.MinMaxScaler()
scalerMaxMinTran = scalerMaxMin.fit_transform(X)
#[1,-1]
scalerMinAbs = preprocessing.MaxAbsScaler()
scalerMinAbsTran = scalerMinAbs.fit_transform(X)
#稀疏数据缩放
# MaxAbsScaler 和:func:maxabs_scale 是稀疏数据缩放比较推荐的实现方式
MaxAbsScaler = preprocessing.MaxAbsScaler()
MaxAbsScaler.fit_transform(m)
#含异常值数据缩放
robut = preprocessing.robust_scale(XY)
#规范化
x_normalized = preprocessing.normalize(X, norm='l2')
#默认为l2
normalizer = preprocessing.Normalizer()
normalizer.transform(X)
#稀疏输入
y_normalized = preprocessing.normalize(y, norm='l2')
#二值化 (默认threshold为2)
binarizer = preprocessing.Binarizer(threshold=1.1).fit(X)
binarizer.transform(X)
#分类特征
enc = preprocessing.OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])
#处理缺失值
imp = preprocessing.Imputer(missing_values="NaN", strategy='mean', axis=0)
imp.fit([[1, 2],[np.nan, 3],[7, 6]])
imp.transform(XY)
#多项式特征生成
XX = np.arange(6).reshape(3,2)
#参数degree=3, interaction_only=True(相互作用X_1X_2)
poly = preprocessing.PolynomialFeatures(2)
#特征向量X从:math:(X_1, X_2) 被转换成:math:(1, X_1, X_2, X_1^2, X_1X_2, X_2^2)。
poly.fit_transform(XX)
#装换器定制
#创建一个实现对数变换的转换器
transformer = preprocessing.FunctionTransformer(np.log1p)
YY = np.array([[0, 1], [2, 3]])
transformer.transform(YY)
np.log1p(YY)


原创粉丝点击