散布矩阵(scatter_matrix)及相关系数(correlation coefficients)实例分析

在进行机器学习建模之前,需要对数据进行分析,判断各特征(属性,维度)的数据分布及其之间的关系成为十分必要的环节,本文利用Pandas和Numpy的散布矩阵函数及相关系数函数对数据集特征及其关系进行实例分析。


散布矩阵(scatter_matrix)

Pandas中散布矩阵的函数原型为:

def scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, diagonal='hist', marker='.', density_kwds=None,hist_kwds=None, range_padding=0.05, **kwds)

各参数如下:

  • frame:(DataFrame),DataFrame对象
  • alpha:(float, 可选), 图像透明度,一般取(0,1]
  • figsize: ((float,float), 可选),以英寸为单位的图像大小,一般以元组 (width, height) 形式设置
  • ax:(Matplotlib axis object, 可选),一般取None
  • diagonal:({‘hist’, ‘kde’}),必须且只能在{‘hist’, ‘kde’}中选择1个,’hist’表示直方图(Histogram plot),’kde’表示核密度估计(Kernel Density Estimation);该参数是scatter_matrix函数的关键参数,下文将做进一步介绍
  • marker:(str, 可选), Matplotlib可用的标记类型,如’.’,’,’,’o’等
  • density_kwds:(other plotting keyword arguments,可选),与kde相关的字典参数
  • hist_kwds:(other plotting keyword arguments,可选),与hist相关的字典参数
  • range_padding:(float, 可选),图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像远离坐标原点
  • kwds:(other plotting keyword arguments,可选),与scatter_matrix函数本身相关的字典参数
‘hist’值

diagonal参数取’hist’值时,表示散布矩阵的对角线上的图形为数据集各特征的直方图。直方图是一种可对值频率进行离散化显示的柱状图,数据点被拆分到离散的,间隔均匀的面元中,绘制的是各面元中数据点的数量。
例如有1维整型数组,共有元素440个,按照值从大至小的顺序排列后,其散布图与直方图如下所示:
这里写图片描述

‘kde’值

diagonal参数取’kde’值时,表示散布矩阵的对角线上的图形为数据集各特征的核密度估计(Kernel Density Estimation,KDE)。核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。简单来说,核密度估计就是在当前数据集(连续型数据样本)已知的情况下,通过计算来获取该样本分布的概率密度函数;在计算获取时需要用到核函数,如Gaussian Kernel Density、Exponential Kernel Density、Cosine Kernel Density等,不同核函数可以得到样本整体趋势和密度分布规律性基本一致的结果;影响该结果的还包括带宽(bandwidth),带宽值过大或过小都会影响估计结果;关于核密度估计的进一步论述请参考这里
以相同的1维整型数组为例,使用Gaussian Kernel Density估计得到的密度函数如下所示:
这里写图片描述

scatter_matrix函数实例

优达学城的数据集为例,来说明散布矩阵函数的使用方法。该数据集是某供货商统计的各类客户的年度采购额,每行数据为1个客户的采购记录,共440行;数据集包括6个维度——Fresh(生鲜)、Milk(奶制品)、Grocery(杂货)、Frozen(冷藏食品)、Detergents_Paper(清洁纸)、Delicatessen(熟食品),记录了客户采购不同门类产品的情况;数据集元素均为整型数据,无缺失值。

import pandas as pd
import matplotlib.pyplot as plt
try:
    data = pd.read_csv("customers_dataset.csv")
except:
    print "Dataset could not be loaded."
pd.plotting.scatter_matrix(data, alpha=0.7, figsize=(14,8), diagonal='kde')
plt.show()

这里写图片描述

在上文介绍diagonal参数取’hist’、’kde’值时,绘图所用数据为Fresh列数据;从图中可以看出,单列数据绘制的密度函数曲线与本图左上角第1个子图一致。
图中对角线上的子图均为经高斯核密度估计后的密度函数曲线,scatter_matrix函数源码中对应部分如下:

……
# Deal with the diagonal by drawing a histogram there.
if diagonal == 'hist':
    ax.hist(values, **hist_kwds)
elif diagonal in ('kde', 'density'):
    from scipy.stats import gaussian_kde
    y = values
    gkde = gaussian_kde(y)
    ind = np.linspace(y.min(), y.max(), 1000)
    ax.plot(ind, gkde.evaluate(ind), **density_kwds)
……

散布矩阵图呈对称结构,除对角上的密度函数图之外,其他子图分别显示了不同特征列之间的关联关系,如Grocery与Detergents_Paper之间、Grocery与Milk之间、Milk与Detergents_Paper之间近似成线性关系,说明该些特征之间关联性很强;相反地,其他各特征列之间的散布状态比较杂乱,基本无规律可循,说明各特征之间的关联性不强。
分析数据集各特征(列)之间的关系时,散布矩阵能以图形的形式“定性”给出各特征之间的关系,如要进一步“定量”分析,则需要使用相关系数。

相关系数(correlation coefficients)

在统计学中,皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,又称作 PPMCC或PCCs, 常用r或Pearson’s r表示)用于度量两个变量X和Y之间的相关关系(线性相关),其值介于-1与1之间。在进行数据分析时,常用作度量各特征之间的相关程度。
Numpy中的计算相关系数的函数为:

corrcoef(x, y=None, rowvar=True, bias=<class numpy._globals._NoValue>, ddof=<class numpy._globals._NoValue>)

各参数如下:

  • x:(array_like),包含多个特征和值的1维或2维数组,每行表示一个特征,每列表示各特征的取值,以行为依据计算各特征之间的相关系数
  • y:(array_like,可选),一组额外的特征和值,数组形状与x相同
  • rowvar:(bool, 可选),该值为True时,每行表示1个特征,各列表式各特征的取值;该值为False时,每列表示1个特征,各行表式各特征的取值;默认情况下为True
  • bias:(_NoValue,可选),无效果,从1.10.0版本后废止
  • ddof :(_NoValue,可选),无效果,从1.10.0版本后废止
corrcoef函数实例

仍以优达学城的数据集为例,计算各特征之间的相关系数并绘图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
try:
    data = pd.read_csv("customers_dataset.csv")
except:
    print "Dataset could not be loaded."
cov = np.corrcoef(data.T)
img = plt.matshow(cov,cmap=plt.cm.winter)
plt.colorbar(img, ticks=[-1,0,1])
plt.xticks(np.arange(len(data.keys())), data.keys())
plt.yticks(np.arange(len(data.keys())), data.keys())
plt.show()

这里写图片描述

该图形也为对称结构,依据相关系数的计算式,其对角线上的相关系数为1;子图颜色越接近绿色表示相关系数越接近1,特征相关性越强且为正相关,子图颜色接近另一个极端(-1)时,特征之间相关性也很强且为负相关;本例相关系数最小值为-0.132,蓝色最浓的子图即为该值,0处的颜色表示特征之间不相关(相关系数为0)。
从图中可以看出,Grocery与Detergents_Paper特征相关性最强,Grocery与Milk、Milk与Detergents_Paper特征之间也有较强相关性,其余各特征之间相关性较弱、甚至不相关,该结论与散布矩阵图得出的结论一致。

总结

对于给定数据集,Pandas的scatter_matrix函数能够显示各特征的密度函数曲线,能大致显示各特征之间的相关关系,Numpy的corrcoef函数能够准确计算各特征之间的相关系数,且能借助Matplotlib库以图形形式直观表达。

参考

http://blog.csdn.net/sinat_25059791/article/details/71336557

scatter_matrix函数是Pandas中用于创建散点图矩阵的函数。它可以通过绘制不同特征之间的散点图,帮助我们发现特征之间的关系。该函数的原型为scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, diagonal='hist', marker='.', density_kwds=None, hist_kwds=None, range_padding=0.05, **kwds)。 scatter_matrix函数的参数包括: 1. frame:一个Pandas的DataFrame对象,包含要绘制散点图的数据。 2. alpha:图像的透明度,取值范围为(0,1]。 3. figsize:图像的大小,以英寸为单位,一般以元组 (width, height) 的形式设置。 4. ax:图像的坐标轴对象,可选参数。 5. diagonal:必须且只能在{'hist', 'kde'}中选择一个,'hist'表示绘制直方图,'kde'表示绘制核密度估计曲线。 6. marker:Matplotlib可用的标记类型,如'.',',','o'等。 7. density_kwds:与核密度估计相关的字典参数。 8. hist_kwds:与直方图相关的字典参数。 9. range_padding:图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像离坐标原点越远。 10. kwds:与scatter_matrix函数本身相关的字典参数。 11. c:散点图的颜色。 通过调用scatter_matrix函数,并传入相应的参数,我们可以创建一个散点图矩阵来展示不同特征之间的关系。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [pandas库scatter_matrix绘图可视化参数详解](https://blog.csdn.net/wangxingfan316/article/details/80033557)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [散布矩阵(scatter_matrix)及相关系数(correlation coefficients)实例分析](https://blog.csdn.net/hurry0808/article/details/78573585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值