您的位置:首页 > 编程语言 > Python开发

Python数据分析与挖掘实战学习笔记(二)

2018-03-04 15:45 1031 查看
接着补充昨天的学习笔记:

1.     数据规约
(1)     属性规约
和冰属性、逐步向前选择、向后删除、决策树归纳、主成分分析
主成分分析:是一种用于连续属性的数据降维方法,它够早了原始数据的一个正交变换,新空间的基底去除了原始空间基底下数据的相关性,只需使用少数新变量就能够解释原始数据中的大部分变异。应用中通常是选出比原始变量个数少,能解释大部分数据中的变量的几个新变量,即所谓主成分,来代替原始变量进行建模。
步骤如下:
①   设原始变量X1,X2···Xp的n词观测数据矩阵为:
 = (X1,x2,```xp)
②   将数据矩阵按列进行中心标准化,为了方便,将标准化后的数据矩阵仍然记为X。
③   求相关系数矩阵R,R=(rij)pxp,,rij定义为:
④   求R的特征方程
⑤   确定主成分个数m,而此处a一般取>=80%。
⑥   计算m个相应的单位特征向量
⑦   计算主成分
在Python中,主成分分析的函数位于Scikit-learn下:
Sklearn.decomposition.PCA(n_components= None,copy = True, whiten = False)
参数说明:
n_components
意义:PCA算法中所要保留的主成分个数n,即保留下来的特征个数n。
类型:int或string,缺省时默认为None,所有成分被保留,赋值为int,比如n_components=1,将把原始数据降到一个维度。赋值为string,比如n_components=‘mle’,将自动选取特征个数n,使的满足所要求的方差百分比。
Copy:
类型:bool,True或者False,缺省时默认为True
意义:表示是否在运行算法是,将原始训练集数据复制一份。
Whiten
类型:bool,缺省时默认为False
意义:白化,使得每个特征具有相同的方差。
使用主成分分析降维的程序如下:import pandas as pd
#参数初始化
inputfile='F:/fenxiyuwajue/dataandcode/chapter4/chapter4/demo/data/principal_component.xls'
outputfile = 'C:/Users/Administrator/Desktop/data/first.xls'#降维后的数据
data = pd.read_excel(inputfile,header=None)#读入数据
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(data)
pca.components_#返回模型的各个特征向量运行上面的代码得到结果如下:array([[ 0.56788461, 0.2280431 , 0.23281436, 0.22427336, 0.3358618 ,
0.43679539, 0.03861081, 0.46466998],
[ 0.64801531, 0.24732373, -0.17085432, -0.2089819 , -0.36050922,
-0.55908747, 0.00186891, 0.05910423],
[-0.45139763, 0.23802089, -0.17685792, -0.11843804, -0.05173347,
-0.20091919, -0.00124421, 0.80699041],
[-0.19404741, 0.9021939 , -0.00730164, -0.01424541, 0.03106289,
0.12563004, 0.11152105, -0.3448924 ],
[-0.06133747, -0.03383817, 0.12652433, 0.64325682, -0.3896425 ,
-0.10681901, 0.63233277, 0.04720838],
[ 0.02579655, -0.06678747, 0.12816343, -0.57023937, -0.52642373,
0.52280144, 0.31167833, 0.0754221 ],
[-0.03800378, 0.09520111, 0.15593386, 0.34300352, -0.56640021,
0.18985251, -0.69902952, 0.04505823],
[-0.10147399, 0.03937889, 0.91023327, -0.18760016, 0.06193777,
-0.34598258, -0.02090066, 0.02137393]])
pca.explained_variance_ratio_ #返回各个成分各自的方差比
array([  7.74011263e-01,   1.56949443e-01,   4.27594216e-02,
2.40659228e-02,   1.50278048e-03,   4.10990447e-04,
2.07718405e-04,   9.24594471e-05])
由上面的结果可以得到特征方程det(R-λE)=0有7个特征根,对应的7个单位特征向量以及各个成分各自的方差百分比(贡献率)。其中,方差百分比越大,说明向量的权重越大。
当选取前4个主成分的时候,累计贡献率以及达到99.7%,选取前三个后发现达到了97.37%,因此重新建立PCA模型,设置n_components = 3,计算出成分结果、
代码如下:pca = PCA(3)
pca.fit(data)
low_d = pca.transform(data)#降低维度
pd.DataFrame(low_d).to_excel(outputfile)
pca.inverse_transform(low_d)#必要时可以用inverse_transform()函数来复原数据
low_d降维结果如下:array([[ 8.19133694, 16.90402785, 3.90991029],
[ 0.28527403, -6.48074989, -4.62870368],
[-23.70739074, -2.85245701, -0.4965231 ],
[-14.43202637, 2.29917325, -1.50272151],
[ 5.4304568 , 10.00704077, 9.52086923],
[ 24.15955898, -9.36428589, 0.72657857],
[ -3.66134607, -7.60198615, -2.36439873],
[ 13.96761214, 13.89123979, -6.44917778],
[ 40.88093588, -13.25685287, 4.16539368],
[ -1.74887665, -4.23112299, -0.589
a619
80995],
[-21.94321959, -2.36645883, 1.33203832],
[-36.70868069, -6.00536554, 3.97183515],
[ 3.28750663, 4.86380886, 1.00424688],
[ 5.99885871, 4.19398863, -8.59953736]])原始数据从8维降到了3维,这3维数据占比达97%以上。
(2)数值规约
数值规约指通过选择替代的、较小的数据来减少数据量,包括有参数方法和无参数方法两类。
有参数方法是使用一个模型来评估数据,只需要存放参数,而不需要存放实际数据,如回归和对数线性模型。五参数需要存放实际数据,如直方图、聚类、抽样等。
聚类:有效性依赖于对蔟的定义是否符合数据的分布性质。
今天介绍Python自带的数据预处理函数:
1.interpolate:interpolate是Scipy的一个子库,包含了大量的插值函数,如拉格朗日插值,样条插值,高维插值等。
使用格式:
from Scipy.interpolate import *引入相应插值函数
f = scipy.interpolate.lagrange(x,y)
2.unique函数:去除数据中的重复元素,得到单值元素列表,既是Numpy库的一个函数即np.unique(),也是Series对象的一个方法。
使用格式:
np.unique(D)D是一维数据,可以使list,array,Series;
D.unique(),D是pandas的Seriec对象
实例如下:求向量A中的单值元素,并返回相关索引。import pandas as pd
import numpy as np
D = pd.Series([1,2,3,4,5])
D.unique()
np.unique(D)
array([1, 2, 3, 4, 5], dtype=int64)
3.isnull/notnul:判断每个元素是否空值/非空值
使用:D.isnull()/D.notnull(),这里的D要求是series对象,返回一个布尔Series,可以通过D[D.isnull来找出D中的空值
4.random:random是Numpy的一个子库,可以使用该库下的各种函数生成服从特定分布的随机矩阵,抽样是可使用。
使用:np.random.rand(k,m,n,...)生成一个随机矩阵,其元素均匀分布在区间(0,1)上,
np.random.randn(k,m,n,...)生成一个随机矩阵,其元素服从标准正态分布

5.PCA:对指标变量矩阵进行主成分分析,使用前需要从sklearn中引入
使用格式:model = PCA(),Scikit-Learn下的PCA是一个建模式的对象,也是说,一般的流程是建模,然后是训练model.fit(D),D为要进行主成分分析的数据矩阵,训练结束后获取模型的参数,如.components_获取特征向量,以及.explaine_variance_ration_获取各个属性的贡献率等。
实例:使用PCA()对一个10x4维的随机矩阵进行主成分分析from sklearn.decomposition import PCA
import numpy as np
D = np.random.rand(10,4)
pca = PCA()
pca.fit(D)
PCA(copy=True,n_components=None,whiten=False)
pca.components_#返回模型的各个特征向量
array([[ 0.50124359, -0.25085058,  0.75522935,  0.33979034],
[ 0.39395686,  0.04046294, -0.57141846,  0.71877791],
[ 0.25408962, -0.85609646, -0.30347243, -0.33232784],
[-0.7273179 , -0.45003954,  0.10494786,  0.50740422]])
pca.explained_variance_ratio_#返回各个成分各自的方差百分比
array([ 0.55216944,  0.29278445,  0.08567173,  0.06937437])


综上,本次Python数据预处理已经学习完毕,回顾下数据预处理的4个主要任务:数据清洗、数据集成、数据变换和数据规约。数据清洗主要介绍了对缺失值和异常值的处理,处理缺失值用删除记录、数据插补、不处理方式,处理异常值用删除异常值、不处理、平均值修正、视为缺失值等;数据集成是合并多个数据源中的数据,并存放到一个数据存储的过程,UI该部分的从实体识别的问题和冗余属性两个方面进行;数据变换介绍了如何从不同的应用角度对已有属性进行函数变换;数据规约从属性规约和数值规约介绍了,是的挖掘的效率的得到了提升,为之后的挖掘建模提供了良好的数据基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐