1.实现要求
对于一个含有N个记录和P个属性的数据集,以principal_component.xls为例,分别对每一个属性取值进行规范化,对原始的数据矩阵分别用最小—最大规范化、零-均值规范化,小数定标规范化进行预处理。并写出PCA降维代码。
原始数据:
2.具体实现
0.读取数据:
#读取excel文件:
data = pd.read_excel('./principal_component.xls',header=None)
print(data) #打印查看是否正确
1.最小最大规范化:
这里不赘述数学原理,只讲解代码本身,如有疑问请自行查阅其他相关资料。
#----------最小-最大规范化--------------------------------------------
def MinMax_Normalize(data):
text=(data - data.min())/(data.max() - data.min()) #最小-最大规范化
text.to_excel ('./最小-最大规范化.xlsx',index=None) #另存为excel(删除索引
return text
实现效果:
2.零均值规范化:
#----零-均值规范化--------------------------------------------
def ZeroAvg_Normalize(data):
text=(data - data.mean())/data.std()
text.to_excel ('./零-均值规范化.xlsx',index=None)
return text
实现效果:
3.小数定标规范化:
#-----小数定标规范化--------------------------------------------
def Float_Normalize(data):
text=data/10**np.ceil(np.log10(data.abs().max()))
text.to_excel ('.小数定标规范化.xlsx',index=None)
return (text)
实现效果:
4.PCA降维代码(并且绘制图形):
#------pca降维代码--------------------------------------------
def PCA(data):
#调用sklearn库实现PCA:
pca = decomposition.PCA()
pca.fit(data) #X_arr是原始数据集,一行表示一个样本,一列表示一个feature
pca.n_components = 1 #降为1维,可自由选择几维
X_reduced = pca.fit_transform(data) #X_reduced是降维后的数据集
plt.plot(X_reduced)#绘图模块
plt.show()
return(X_reduced) #这里的X_reduced根据自己选择是否返回,若不清楚是什么可以打印一下查看
实现效果:
3.完整代码:
"""
@author: [YouYang Wang]
@version: [1.0]
@time: 2021/5/22
@factor: 对excel数据进行最大最小规范化、零均值规范化、小数定标规范化,PCA处理
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import decomposition
#--------------------------------------------最小-最大规范化--------------------------------------------
def MinMax_Normalize(data):
text=(data - data.min())/(data.max() - data.min()) #最小-最大规范化
text.to_excel ('./最小-最大规范化.xlsx',index=None) #另存为excel(删除索引
return text
#--------------------------------------------零-均值规范化--------------------------------------------
def ZeroAvg_Normalize(data):
text=(data - data.mean())/data.std()
text.to_excel ('./零-均值规范化.xlsx',index=None)
return text
#--------------------------------------------小数定标规范化--------------------------------------------
def Float_Normalize(data):
text=data/10**np.ceil(np.log10(data.abs().max()))
text.to_excel ('.小数定标规范化.xlsx',index=None)
return (text)
#--------------------------------------------pca降维代码--------------------------------------------
def PCA(data):
#调用sklearn库实现PCA:
pca = decomposition.PCA()
pca.fit(data) #X_arr是原始数据集,一行表示一个样本,一列表示一个feature
pca.n_components = 1 #降为1维
X_reduced = pca.fit_transform(data) #X_reduced是降维后的数据集
plt.plot(X_reduced)
plt.show()
return(X_reduced)
if __name__ == '__main__':
#读取excel文件:
data = pd.read_excel('./principal_component.xls',header=None)
print(data)
#规范化:
M=MinMax_Normalize(data)
F=Float_Normalize(data)
Z=ZeroAvg_Normalize(data)
print(M)
print(F)
print(Z)
#PCA降维:
print(PCA(data))