特征处理

1. 特征缩放

公式:
X i = X i − X m i n X m a x − X m i n X_i = \frac{X_i - X_{min}}{X_{max} - X_{min}} Xi=XmaxXminXiXmin

import numpy as np
from sklearn.preprocessing import MinMaxScaler

data = np.array([[115.], [140.], [175.]])
scaler = MinMaxScaler()
rescaled = scaler.fit_transform(data)

print(rescaled)

[[0. ]
[0.41666667]
[1. ]]

2. PCA

PCA(Principal Component Analysis)指主要成分分析。
以二维数据为例,PCA的过程:

  1. 选取数据中心,作为新坐标中心
  2. 在整个数据集中寻找最大方差的位置,将这个位置作为主轴
  3. 然后把另一个轴移至与主轴正交的位置
  4. 最后将原本的数据投影到主轴上

特征处理_第1张图片
方差最大也就是数据分布最散,这样使得信息损失最低。

PCA的作用:

  • 访问数据的隐藏特征
  • 降维、特征压缩
from sklearn.decomposition import PCA
'''
n_components: 如果是整数则是保留下来的特征个数,n_components = 1表示将把原始数据降到一维;
              如果是(0,1]之间的浮点数,表示主成分的方差和所占的最小比例阈值
              默认n_components=min(样本数,特征数)
'''
pca = PCA(n_components).fit(X)
X_transformed = pca.transform(X)

'''
pca.explained_variance_ratio_:返回所保留各个特征的方差百分比
pca.n_components_:返回所保留的特征个数
pca.components_ :返回保留的成分(列表形式)
'''

3. 稀疏随机映射

参考:https://blog.csdn.net/qq_37423198/article/details/77651484

首先我们来看一个问题, 如果你手头有一组数据 X ∈ R n X\in R^n XRn,它的维数太高,,从而不得不进行降维至 X ∈ R k X\in R^k XRk你会怎么办?

如果用PCA处理时间会很长。既然要快, 那我们就用个最简单的方法: 随机在高维空间里选k个单位向量ei, 但注意, 这里我们仅仅要求是单位向量, 并没有要求它们之间必须正交,因此你可以随便选。 最后, 我们把高维数据投影到选择的这一组基上。也就完成了降维。

随便选的轴如何能保证降维效果? 但它是有数学依据的, 叫做Johnson-Lindenstrauss Lemma。这个定理保证了任何降维方法的精度上下限。
#####Johnson-Lindenstrauss Lemma
假设我们有数据 x ∈ R n x \in R^n xRn, 而我们通过一种方法 f ( x ) f(x) f(x))将其降维成 y ∈ R k y \in R^k yRk, 那么, 将为前后任意两点a,b之间的距离有不等式保证:
( 1 − ϵ ) ∥ a − b ∥ 2 ≤ ∥ f ( a ) − f ( b ) ∥ ≤ ( 1 + ϵ ) ∥ a − b ∥ 2 (1−\epsilon)∥a−b∥^2 ≤ ∥f(a)−f(b)∥ ≤ (1+\epsilon)∥a−b∥^2 (1ϵ)ab2f(a)f(b)(1+ϵ)ab2

对于随机映射来说, 只要注意到下面几点就行了:

  1. 不定式中的精度仅仅受制于维数、数据大小等因素, 与将为方法无关。
  2. 在维数差不是很大时, 总可以保证一个相对较高的精度, 不论用什么方法。
  3. 到这里一切就很明显了, 既然精度有上界, 那我们也就不必担心轴的选取,那么最简单的方法自然就是随机挑选了, 这也就产生的Random Projection这一方法。

Random Projection

简单来说,Random Projection流程就是

  1. 选择影射矩阵 R ∈ R K × N R \in R^{K×N} RRK×N
  2. 用随机数填充影射矩阵。 可以选择uniform或者gaussian。
  3. 归一化每一个新的轴(影射矩阵中的每一行)。
  4. 对数据降维 y = R X y = RX y=RX

上面的JL-lemma保证的降维的效果不会太差。

from sklearn import random_projection
'''
n_components:目标投影空间的维度,默认'auto'即自动调整
eps:∈,严格为正浮点,可选,默认0.1
'''
rp = random_projection.SparseRandomProjection(n_components=2, random_state=42)

X_projected = rp.fit_transform(X)#随机投射

4. ICA

ICA指独立成分分析(Independent Component Analysis),将数据中独立的特征分离出来。如经典的鸡尾酒会问题,假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据X(i)(X1(i),X2(i),… ,Xn(i)),i表示采样的时间顺序,也就是说共得到了m组采样,每一组采样都是n维的。ICA就是从这m组采样数据中分辨出每个人说话的信号。

from sklearn.decomposition import FastICA
'''
n_components:独立成分的个数,默认为训练的样本数
'''
ica = FastICA(n_components)
data_ica = ica.fit_transform(data) #拟合并转化数据为独立成分
data_ica2 = ica.transform(data2)   #使用拟合好的ica转化另一份数据为独立成份

你可能感兴趣的:(机器学习)