在数据预处理的问题上
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)