教你真正使用PCA(以特征匹配为例)

songxf
2022-01-15 / 0 评论 / 1,534 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年09月04日,已超过25天没有更新,若内容或图片失效,请留言反馈。

前言

  网上一堆狂吹PCA和讲原理的,可就是不讲怎么用。
  给了代码的,拿过来用效果贼差,毕竟那些只是为了画图的代码而已。。。


上代码

  真正使用,分3步即可:
1、数据预处理(非常重要!!!)——零均值化和缩放
原因可以看网上原理教程,这里只关心怎么做。
很简单:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler().fit(des_query)
des_query = scaler.transform(des_query)
des_train = scaler.transform(des_train)

2、真正执行PCA

from sklearn.decomposition import PCA

pca = PCA(n_components=32, whiten=True).fit(des_query_new)
des_query_pca = pca.transform(des_query)
des_train_pca = pca.transform(des_train)

3、对结果再做归一化(欧氏距离就用l2)

import torch

def desc_l2norm(desc):
    eps_l2_norm = 1e-10
    return (desc / torch.Tensor(desc).pow(2).sum(dim=1, keepdim=True).add(eps_l2_norm).pow(0.5)).numpy()

des_query_new = desc_l2norm(des_query_pca)
des_train_new = desc_l2norm(des_train_pca)

4、注意train和query要用同一个fit,因为不然分开学习,肯定最后结果是个“0”。这里具体fit内容怎么设置,我还没整明白,随大流填个query的吧。。。

运行结果

  这时候再去做匹配,发现维度下降,有效果且精度甚至会上升。(图就不画了,懒。。。)
  注意:这里只是粗匹配上升了啊,它很可能有很多的误匹配的!!!

后言

其他还有umap可以玩玩。

0

评论 (0)

取消