NLP自然语言处理|PCA降维算法|标准化

算法演示和完整代码见文末,下一期将带来NLP的经典Word2Vec算法。若需转载请注明来源,谢谢。

  • 简要介绍

  • 部分理论

  • 数据清单

  • 工程复现

  • 结果演示

  • 优化展望

 简要介绍  

最近忙着上线推荐业务,以后再更新Word2Vec,根据业务的embedding数据,许多算法工程师为了加速模型训练会采用各种降维手段,在此将PCA部分理论融入自己的知识进行工程复现,内容涉及使用基本运算库实现数据标准化、PCA降维等。

 部分理论  

Name: Normalization

Model: Principal Component Analysis

 数据清单  

在线手写数字图像数据集

dataset.zip:包含1797行,64列特征列(仅采用特征列),1列标签列

Fig.2 Partial images set display

Fig.3 Partial feature set display

 工程复现  

配置基本需求库

""" Import the basic requirements package """ 

import time
import math

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.datasets import load_digits

配置数据集导出函数

""" Dataset export function """

def read_csv():
    X, y = load_digits(return_X_y=True)

    print(X.shape)  # Print feature set and label set length

    return X

配置数据标准化函数

""" Dataset Normalization function """

def normalization(X):
    columns = 'col_' + pd.Series(np.arange(1, 1 + X.shape[1]).astype(str)).values
    data = pd.DataFrame(X, columns=columns)
    data = pd.DataFrame(data.apply(lambda x_row: (x_row - np.mean(x_row)) / math.sqrt(np.var(x_row)), axis=1).values, columns=columns)

    return data.values

配置协方差计算函数

""" Dataset Covariance function """

def covariance(X):

    X_cov = np.cov(np.transpose(X))

    return X_cov

配置特征值、特征向量计算函数

""" Dataset Eig function """

def eig_values(X):

    a, b= np.linalg.eig(X)

    X_eig = pd.DataFrame()

    X_eig['Lambda'] = a
    X_eig['Beta_i'] = np.arange(X.shape[0])
    X_eig['Beta'] = X_eig['Beta_i'].apply(lambda i: b[i])

    X_eig.sort_values(by='Lambda', ascending=False)

    return X_eig

配置PCA算法函数

""" PCA model function """

# create model
def PCAVectorizer(decomposition=10):

    pca_params = {
        'decomposition': decomposition,  # Set the base of the idf logarithm
    }
    return pca_params

# fit model
def fit_transform(pca_params, X):

    X = normalization(X)
    
    X_cov = covariance(X)

    X_eig = eig_values(X_cov)
    X_eig = np.vstack(X_eig.sort_values(by='Lambda', ascending=False)[ :pca_params['decomposition']]['Beta'].values)
    
    pca_X = np.transpose(np.dot(X_eig, np.transpose(X)))

    columns = 'col_' + pd.Series(np.arange(1, 1 + pca_params['decomposition']).astype(str)).values
    submit = pd.DataFrame(pca_X, columns=columns)
    print(submit.head(20))

    return pca_X

配置训练主进程

""" PCA model training host process """

if __name__ == '__main__':
    sta_time = time.time()

    X = read_csv()

    model = PCAVectorizer(decomposition=6)

    pca_X = fit_transform(model, X)

    print("Time:", time.time() - sta_time)

 结果演示  

Fig.4 Results of the algorithm

 优化展望  

在本次复现的结果中,可以观察到结果有两个以上可以优化的方向。

  • 在本次降维中并没有降维效果评估指标,通常可以采用累计方差贡献率来评价降维效果。

  • PCA降维算法是线性降维算法,可以通过采用类似SVM中的非线性Kernel进行非线性降维或者采用如LLE非线性降维算法等进行非线性降维。

 完整代码  

 

结尾扫码关注精彩的公众号!后台回复"PCA"获取完整代码

参考链接  

Digits

Cvcr

Kpca

LLe

 

 

扫描二维码获取更多算法前沿知识和精彩

筝自然语言处理和推荐算法

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主成分分析(PCA)和神经网络(Neural Network)是两个不同的概念和技术,它们在数据分析和机器学习中有着不同的应用。 主成分分析(PCA)是一种常用的降维技术,用于将高维数据集映射到低维空间。它通过线性变换将原始特征转换为一组新的正交特征,称为主成分。这些主成分按照方差的大小排序,通常只选择前几个主成分作为表示数据的新特征。PCA可以用于数据可视化、噪声过滤、特征选择等任务。 下面是使用Python中的scikit-learn库进行PCA的示例代码: ```python from sklearn.decomposition import PCA # 假设X是你的数据集,其中每一行表示一个样本,每一列表示一个特征 pca = PCA(n_components=2) # 指定要保留的主成分数量 # 对数据进行降维 X_pca = pca.fit_transform(X) # 查看降维后的数据 print(X_pca) ``` 神经网络是一种模拟人脑神经元工作方式的计算模型。它由多个节点(神经元)和连接这些节点的权重组成。神经网络通常被用于处理复杂的非线性关系,如图像识别、自然语言处理等任务。 以下是使用Python中的Keras库创建一个简单的全连接神经网络的示例代码: ```python from keras.models import Sequential from keras.layers import Dense # 创建神经网络模型 model = Sequential() model.add(Dense(units=64, activation='relu', input_dim=100)) model.add(Dense(units=10, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=10, batch_size=32) # 在测试集上评估模型 loss, accuracy = model.evaluate(x_test, y_test) print('Test loss:', loss) print('Test accuracy:', accuracy) ``` 请注意,上述代码仅仅是简单的示例,并不包含完整的数据预处理、模型调参等步骤。在实际应用中,你可能需要根据具体任务进行适当的调整和优化。 希望以上代码能对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值