PCA,SVD原理介绍及python下的具体实现及包的调用
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