数据处理工具记录【四】—— 降维

PCA

简单实现

奇异值分解

import numpy as np
X_centered = X - X.mean(axis=0)
U, s, V = np.linalg.svd(X_centered)
c1 = V.T[:, 0]  # 第一个成分
c2 = V.T[:, 1]  # 第二个成分

低维度投影

W2 = V.T[:, :2]
X2D = X_centered.dot(W2)

sklearn

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X2D = pca.fit_transform(X)

方差解释率

print(pca.explained_variance_ratio_)

选择正确数量的维度

pca = PCA(n_compoents=0.95)
X_reduced = pca.fit_transform(X)

调用外存

增量PCA(IPCA)

from sklearn.decomposition import IncermentalPCA
n_batches = 100
inc_pca = IncrementalPCA(n_compoents=154)
for X_batch in np.array_split(X_mnist, n_batch):
	inc_pca.partial_fit(X_batch)
X_mnist_reduced = inc_pca.transfrom(X_mnist)

# 或者使用numpy里的memmap类
X_mm = np.memmap(filename, dtype="float32", mode="readonly", shape=(m,n))
batch_size = m // n_batches
inc_pca = IncrementalPCA(n_componemts=154, batch_size=batch_size)
inc_pca.fit(X_mm)

随机PCA

rnd_pca = PCA(n_components=154, svd_solver="randomized")
X_reduced = rnd.pca.fit_transform(X_mnist)

核主成分分析

使用RBF核函数

from sklearn.decomposition import KernelPCA
rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.04)
X_reduced = rbf_pca.fit_transform(X)

选择核函数和调整超参数

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

clf = Pipeline([
	("kpca", KernelPCA(n_components=2)),
	("log_reg", LogisticRegression())
])
param_grid = [{
	"kpca_gamma": np.linspace(0.03, 0.05, 10),
	"kpca_kernel": ["rbf", "sigmoid"]
}]
grid_search = GridSearchCV(clf, param_grid, cv=3)
grid_search.fit(X,y)
print(grid_search.best_params_)

局部线性嵌入

from sklearn.manifold import LocallyLinearEmbedding

lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10)
X_reduced = lle.fit_transform(X)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

73826669

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值