公式:
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=Xmax−XminXi−Xmin
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. ]]
PCA(Principal Component Analysis)指主要成分分析。
以二维数据为例,PCA的过程:
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_ :返回保留的成分(列表形式)
'''
参考:https://blog.csdn.net/qq_37423198/article/details/77651484
首先我们来看一个问题, 如果你手头有一组数据 X ∈ R n X\in R^n X∈Rn,它的维数太高,,从而不得不进行降维至 X ∈ R k X\in R^k X∈Rk你会怎么办?
如果用PCA处理时间会很长。既然要快, 那我们就用个最简单的方法: 随机在高维空间里选k个单位向量ei, 但注意, 这里我们仅仅要求是单位向量, 并没有要求它们之间必须正交,因此你可以随便选。 最后, 我们把高维数据投影到选择的这一组基上。也就完成了降维。
随便选的轴如何能保证降维效果? 但它是有数学依据的, 叫做Johnson-Lindenstrauss Lemma。这个定理保证了任何降维方法的精度上下限。
#####Johnson-Lindenstrauss Lemma
假设我们有数据 x ∈ R n x \in R^n x∈Rn, 而我们通过一种方法 f ( x ) f(x) f(x))将其降维成 y ∈ R k y \in R^k y∈Rk, 那么, 将为前后任意两点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−ϵ)∥a−b∥2≤∥f(a)−f(b)∥≤(1+ϵ)∥a−b∥2
对于随机映射来说, 只要注意到下面几点就行了:
简单来说,Random Projection流程就是
上面的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)#随机投射
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转化另一份数据为独立成份