数据规约三种方法
1、维归约(dimensionlity)
减少所考虑的随机变量或属性的个数。维归约方法包括小波变换和主成分分析,他们把原始数据变换或投影到较小的空间。属性子集选择是一种维归约方法,其中不相关、弱相关或冗余的属性或维被检测和删除。
2、数量归约(numerosity reduction)
用替代的、较小的数据表示形式替换原始数据。
3、数据压缩(data compression)
使用变换,以便得到原始数据的归约或“压缩”表示。如果原始数据可以从压缩后的数据重构,而不损失信息,则该数据归约称为无损的。反之,称之为有损的。维归约和数量归约也可以视为某种形式的数据压缩。
维归约-主成分分析(principal components analysis)
它把原始数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是在处理观测数目小于变量数目时无法发挥作用,例如基因数据。
1、PCA算法步骤
①去平均,每个特征减去各自的平均值
②计算协方差矩阵Σ=E{(x-E(x)) * (x-E(x))T}
③计算协方差矩阵的特征值与特征向量
④对特征值从大到小排序
⑤保留最大的K个特征向量
⑥将数据转换到K个特征向量构建的新空间中
(注:对角线上分别是x和y的方差,非对角线上是协方差。协方差是衡量两个变量同时变化的变化程度。协方差大于0表示x和y若一个增,另一个也增;小于0表示一个增,一个减。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量,因此,如果同样的两个变量所采用的量纲发生变化,它们的协方差也会产生树枝上的变化)
2、代码实现
#属性规约①与数值规约②
#属性规约之主成分分析(PCA算法)
'''
算法步骤
①去平均,每个特征减去各自的平均值
②计算协方差矩阵
③计算协方差矩阵的特征值与特征向量
④对特征值从大到小排序
⑤保留最大的K个特征向量
⑥将数据转换到K个特征向量构建的新空间中
'''
from sklearn.decomposition import PCA
#导入数据
import pymysql
import numpy as npy
import pandas as pda
import matplotlib.pylab as pyl
pyl.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
pyl.rcParams['axes.unicode_minus']=False # 用来正常显示负号
conn=pymysql.connect(host="127.0.0.1",user="root",password="root",db="csdn")
sql="select hits,comment from hexun"
data=pda.read_sql(sql,conn)
data["hits"][(data["hits"]==0)]=None #除数hits=0置空
data1=data.fillna(data.mean()) #均值替换或者删除该行
chr=data1[u"comment"]/data1[u"hits"] #构造评点比
data1[u"评点比"]=chr #评比比赋值给原数据并命名为评点比
#---主成分分析开始---
pca1=PCA()
pca1.fit(data1)
Character=pca1.components_ #返回模型中各个特征向量
Contribution_rate=pca1.explained_variance_ratio_#各个成分中方差百分比,贡献率
#---三维降二维---
pca2=PCA(2) #2维
pca2.fit(data1)
reduce=pca2.transform(data1) #降维
recovery=pca2.inverse_transform(reduce) #降维恢复