4. python里如何使用成熟的现有PCA包

1. PCA原理介绍

详情参见我的上一篇博客:PCA原理介绍

2. PCA+SVD原理介绍

详情参见我的上一篇博客:PCA+SVD原理介绍

3. python下编写代码实现PCA+SVD

详情参见我的上一篇博客:python下编写代码实现PCA+SVD

4. python里如何使用成熟的现有PCA包

整体调用函数:
data, dataTest = get_data()  # 获取训练集data 准备PCA
        print(len(data), '个样本', len(data.columns), '个属性')

        print('----------------------------- PCA my data ...  -------------------------------------	')

        dataY = data[['allcase']]  # 去除训练集的结果属性
        dataX = data.drop('allcase', axis=1, inplace=False)  #  保留训练集的普通属性 用于PCA

        dataTestY = dataTest[['allcase']]  # 去除测试集的结果属性
        dataTestX = dataTest.drop('allcase', axis=1, inplace=False)  # 保留测试集的普通属性 用于PCA

        # 用训练集的平均数,方差去归一化测试集
        dataX, dataTestX = NormalizeData(dataX, dataTestX)

        # PCA降维
        dataAfterPca, newColLen, dataTestAfterPca = myPCA(per, dataX, dataTestX)
预处理函数:
def NormalizeData(data, dataTest):
    scaler = StandardScaler()   # 建立标准化模型
    dataAttr = scaler.fit_transform(data)  # fit_transform:采用训练集fit 模型,保存均值,方差 然后对训练集进行标准化
    dataTestAttr = scaler.transform(dataTest)   # transform:采用训练集的均值,方差 然后对测试集进行标准化

    return dataAttr, dataTestAttr
调用sklearn的包:
from sklearn.decomposition import PCA

def myPCA(mcomponent, dataAttr, dataTestAttr):
    pca = PCA(n_components=mcomponent, copy=True, whiten=False)  # 建立pca model
    #  copy表示在数据副本上进行pca降维

    dataAttrAfterPca = pd.DataFrame(pca.fit_transform(dataAttr))  # fit拟合数据,transform返回降维后的数据矩阵
    dataTestAttrAfterPca = pd.DataFrame(pca.transform(dataTestAttr))  # transform用训练好的投影矩阵去降维测试集


    print('降维后新特征的方差百分比: ', pca.explained_variance_ratio_,
          '\n在保持mcomponent达到', mcomponent,   '后共有', len(pd.DataFrame(pca.explained_variance_ratio_)), '个新属性')

    dataAttrAfterPca = pd.DataFrame(dataAttrAfterPca.iloc[:, :len(pd.DataFrame(pca.explained_variance_ratio_))])
     
     # 把降维后的属性名改为str字符型的 便于存储成csv
    for each in dataAttrAfterPca.columns:
        dataAttrAfterPca.rename(columns={each: str(each)}, inplace=True)

    dataTestAttrAfterPca = dataTestAttrAfterPca.iloc[:, :len(pd.DataFrame(pca.explained_variance_ratio_))]
    for each in dataTestAttrAfterPca.columns:
        dataTestAttrAfterPca.rename(columns={each: str(each)}, inplace=True)

    return dataAttrAfterPca, len(pd.DataFrame(pca.explained_variance_ratio_)), dataTestAttrAfterPca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值