内容目录

一、pearson 皮尔森系数介绍二、pearson 皮尔森应用三、对皮尔森相关系数的通俗解

一、pearson 皮尔森系数介绍

皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。

  Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算 相关系数 和p-value。

优点:可以通过数字对变量的关系进行度量,并且带有方向性,1表示正相关,-1表示负相关,可以对变量关系的强弱进行度量,越靠近0相关性越弱。

缺点:无法利用这种关系对数据进行预测,简单的说就是没有对变量间的关系进行提炼和固化,形成模型。要利用变量间的关系进行预测,需要使用到下一种相关分析方法,回归分析。

使用场景:当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

  • 两个变量之间是线性关系,都是连续数据。

  • 两个变量的总体是正态分布,或接近正态的单峰分布。

  • 两个变量的观测值是成对的,每对观测值之间相互独立。

相关系数也可以看成两个变量X、Y之间的协方差乘积和两者标准差乘积的比值:一种剔除了两个变量量纲影响、标准化后的特殊协方差

二、pearson 皮尔森应用

# numpy和panda用于数据操作
import numpy as np
import pandas as pd
df = pd.read_csv('.\PimaIndiansdiabetes.csv')
df.head()
   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  DiabetesPedigreeFunction  Age  Outcome
0            6      148             72             35        0  33.6                     0.627   50        1
1            1       85             66             29        0  26.6                     0.351   31        0
2            8      183             64              0        0  23.3                     0.672   32        1
3            1       89             66             23       94  28.1                     0.167   21        0
4            0      137             40             35      168  43.1                     2.288   33        1
df.describe()
       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin         BMI  DiabetesPedigreeFunction         Age     Outcome
count   768.000000  768.000000     768.000000     768.000000  768.000000  768.000000                768.000000  768.000000  768.000000
mean      3.845052  120.894531      69.105469      20.536458   79.799479   31.992578                  0.471876   33.240885    0.348958
std       3.369578   31.972618      19.355807      15.952218  115.244002    7.884160                  0.331329   11.760232    0.476951
min       0.000000    0.000000       0.000000       0.000000    0.000000    0.000000                  0.078000   21.000000    0.000000
25%       1.000000   99.000000      62.000000       0.000000    0.000000   27.300000                  0.243750   24.000000    0.000000
50%       3.000000  117.000000      72.000000      23.000000   30.500000   32.000000                  0.372500   29.000000    0.000000
75%       6.000000  140.250000      80.000000      32.000000  127.250000   36.600000                  0.626250   41.000000    1.000000
max      17.000000  199.000000     122.000000      99.000000  846.000000   67.100000                  2.420000   81.000000    1.000000

共768例,8个特征,1个标签。最低血糖、血压、皮肤厚度、胰岛素、BMI均为0。这看起来是可疑的,因为这些物理量不可能是0(对于活人)。因此,这已经告诉我们,我们需要对这五列进行估算。其他变量的范围似乎都是合理的。

可视化:我们可以从配对图开始,配对图中所有变量都相互对应。这对于发现变量之间的相关性和可视化分布非常有用。

import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('fivethirtyeight')
sns.pairplot(df, hue = 'Outcome', vars = df.columns[:8], diag_kind = 'kde')
plt.show()

唯一明确的趋势似乎是,较高的血糖与1的结果相关,这意味着患者患有糖尿病。年龄似乎也与糖尿病有关:较年轻的患者患糖尿病的风险较低。

输入缺失值:在继续之前,让我们先来处理一下这些缺失的值。同样,在血糖、血压、皮肤厚度、胰岛素和BMI分类中也有0。这些值都不可能是0,所以我们假设缺失的值是由于缺少数据。为了填充这些缺失的值,我们将用列中的中值替换它们。还有其他更复杂的方法来填补缺失的值,但在实践中,中值估算通常表现良好。

df['Glucose'] = df['Glucose'].replace({0: df['Glucose'].median()})
df['BloodPressure'] = df['BloodPressure'].replace({0: df['BloodPressure'].median()})
df['SkinThickness'] = df['SkinThickness'].replace({0: df['SkinThickness'].median()})
df['Insulin'] = df['Insulin'].replace({0: df['Insulin'].median()})
df['BMI'] = df['BMI'].replace({0: df['BMI'].median()})
df.describe()
       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin         BMI  DiabetesPedigreeFunction         Age     Outcome
count   768.000000  768.000000     768.000000     768.000000  768.000000  768.000000                768.000000  768.000000  768.000000
mean      3.845052  121.656250      72.386719      27.334635   94.652344   32.450911                  0.471876   33.240885    0.348958
std       3.369578   30.438286      12.096642       9.229014  105.547598    6.875366                  0.331329   11.760232    0.476951
min       0.000000   44.000000      24.000000       7.000000   14.000000   18.200000                  0.078000   21.000000    0.000000
25%       1.000000   99.750000      64.000000      23.000000   30.500000   27.500000                  0.243750   24.000000    0.000000
50%       3.000000  117.000000      72.000000      23.000000   31.250000   32.000000                  0.372500   29.000000    0.000000
75%       6.000000  140.250000      80.000000      32.000000  127.250000   36.600000                  0.626250   41.000000    1.000000
max      17.000000  199.000000     122.000000      99.000000  846.000000   67.100000                  2.420000   81.000000    1.000000

既然没有缺失值,我们就可以计算相关值来查看特性与结果之间的关系。当然,相关性并不意味着因果关系,但因为我们正在建立一个线性模型,相关特征可能对学习患者信息与他们是否患有糖尿病之间的映射很有用。在具有大量特征的问题中,我们可以使用相关阈值来删除变量。在这种情况下,我们可能希望保留所有的变量,让模型来决定哪些是相关的。

  • 皮尔森(pearson)相关系数和斯皮尔曼(spearman)相关系数肯德尔(kendall)相关系数,这三大相关系数中,spearman和kendall属于等级相关系数亦称为“秩相关系数”,是反映等级相关程度的统计分析指标。

  • 公式定义为:两个连续变量(X,Y)的pearson相关性系数(Px,y)等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX,σY)。

  • 系数的取值总是在-1.0到1.0之间,接近0的变量被成为无相关性,接近1或者-1被称为具有强相关性。

  • 皮尔森相关系数是衡量线性关联性的程度,p的一个几何解释是其代表两个变量的取值根据均值集中后构成的向量之间夹角的余弦。

df.corr()['Outcome']
Pregnancies                 0.221898
Glucose                     0.492782
BloodPressure               0.165723
SkinThickness               0.189065
Insulin                     0.148457
BMI                         0.312249
DiabetesPedigreeFunction    0.173844
Age                         0.238356
Outcome                     1.000000
Name: Outcome, dtype: float64

我们对这些图的最初解释是正确的:葡萄糖是与结果相关的最高值。没有一个特征与结果有很强的相关性,也没有负相关。

在这个简短的探索性数据分析中,我们了解了关于数据集可以用于建模的两个主要方面。首先,我们需要在几个列中输入缺失的值,因为这些值在物理上是不可能的。我们可以使用中值法作为一种简单而有效的填充0值的方法。我们还了解到,特征和响应之间存在相关性,尽管相关性不强。此外,所有的特征至少与结果有轻微的正相关(无论患者是否患有糖尿病)。没有明显的特性工程步骤,也没有必要减少维度的数量,因为只有8个特性。此外,像主成分分析这样的技术模糊了特性的物理相关性,因此我们不能解释模型。总的来说,我想让模型从所有的数据中学习,从而保留所有的特性。通过这种方式,我们可以让数据说话并解释建模结果。

from scipy.stats import pearsonr
import numpy as np
np.set_printoptions(suppress=False)a = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']
b = {}
for i in a:# c,d  = pearsonr(df['Age'],df['Outcome'])b[i] = pearsonr(df[i],df['Outcome'])
print(b)
{'Pregnancies': (0.22189815303398652, 5.065127298051825e-10),
'Glucose': (0.49278240391502626, 3.1287190418421105e-48),
'BloodPressure': (0.16572291308057635, 3.890835490646442e-06),
'SkinThickness': (0.18906541957539405, 1.3011814339566044e-07),
'Insulin': (0.14845723810682138, 3.6217221617810545e-05),
'BMI': (0.3122490266732709, 7.8791476215668415e-19),
'DiabetesPedigreeFunction': (0.1738440656529598, 1.2546070101484021e-06),
'Age': (0.2383559830271976, 2.2099754606646917e-11),
'Outcome': (0.9999999999999978, 0.0)}
  • 一般来说皮尔森相关系数越大,p_value越小,线性相关性就越大。但是,p_value不是完全的可靠,当数据量大于500的时候,可能是合理的。

  • 相关系数矩阵,即给出任意两特征之间的相关系数

  • Pearson相关系数来衡量两个数据集合是否在一条线上面,即针对线性数据的相关系数计算,针对非线性数据便会有误差。

三、对皮尔森相关系数的通俗解释

对皮尔森相关系数的通俗解释

  • 对于协方差,可以通俗的理解为:两个变量在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何?

  • 你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正的。

  • 你变大,同时我变小,说明两个变量是反向变化的,这时协方差就是负的。

  • 从数值来看,协方差的数值越大,两个变量同向程度也就越大。反之亦然。

About Me:小婷儿

● 本文作者:小婷儿,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 微信:tinghai87605025 联系我加微信群

● QQ:87605025

● QQ交流群py_data :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

如果你觉得到文章对您有帮助,欢迎赞赏哦!有您的支持,小婷儿一定会越来越好!

【068】特征选择之 pearson 皮尔森系数 PimaIndiansdiabetes相关推荐

  1. 机器学习必备知识之皮尔森系数实现

    引言:最近几天帮几个人工智能专业的同学做了一些机器学习课程的大作业,我发现机器学习一些常见的数据处理方法他们并不会用程序表示出来,仅仅是停留在理论层面.那么今天我将就机器学习一些常见数据处理方式实现皮 ...

  2. 三大统计学相关系数(pearson皮尔森、spearman斯皮尔曼、kendall肯德尔)

    目录 1 person correlation coefficient(皮尔森相关性系数) 2 spearman correlation coefficient(斯皮尔曼相关性系数) 3 kendal ...

  3. c语言皮尔森系数程序,pearson coefficient (皮儿森相关系数)计算及R语言实现 zz

    皮尔逊相关系数R语言例子 理解皮尔逊相关的两个角度 其一, 按照高中数学水平来理解, 皮尔逊相关(Pearson Correlation Coefficient)很简单, 可以看做将两组数据首先做Z分 ...

  4. [学习笔记] [机器学习] 8. 聚类算法(聚类算法:K-means、K-means++;聚类算法评估;特征降维:特征选择(Pearson相关系数、Spearman相关系数)、PCA主成分分析)

    视频链接 数据集下载地址:无需下载 1. 聚类算法简介 学习目标: 掌握聚类算法实现过程 知道 K-means 算法原理 知道聚类算法中的评估模型 说明 K-means 的优缺点 了解聚类中的算法优化 ...

  5. c语言皮尔森系数程序,按条件选入观测;皮尔森相关系数

    MEAP01.RAW 中的数据是 2001 年密歇根州的数据.利用这些数据回答如下问题. (1)求出 math4 的最大值和最小值.这个范围合理吗?请解释. (2)有多少学校在数学测试中有 100%的 ...

  6. 特征选择-皮尔逊系数、RFE(原理及代码)

    特征选择 1皮尔逊系数 1.1介绍: 1.2试用范围: 2.RFE递归特征消除 2.1介绍 2.2 python实现 1皮尔逊系数 1.1介绍: 皮尔逊相关也称为积差相关(或者积矩相关).我们假设有两 ...

  7. 皮尔逊相关(Pearson correlation)系数概述及其计算例

    目录 1. 前言 2. 皮尔逊相关系数定义 3. 数学性质 3.1 对称性 3.2 位移不变性 3.3 尺度不变性 4. 5个假设 5. 几何解释 6. Some calculation exampl ...

  8. 商品关联度分析(关联三度,附Python实战) 我的钱就是这么没的,不只有皮尔森系数的相关分析

    引言    上一年组织烧烤活动买食材时,我在超市的货架29买了一个烧烤架,然后到货架27买了瓶1.5L的可乐,最后在货架25找到了我需要的塑料小碗.今年再去那家超市的时候,特地再去烧烤架所在的货架查看 ...

  9. 如何理解相关性系数(pearson、spearman、kendall)

    转载: https://www.jianshu.com/p/7697eb89926a 三个相关性系数(pearson, spearman, kendall)反应的都是两个变量之间变化趋势的方向以及程度 ...

最新文章

  1. python流程控制语句-【Python学习之三】流程控制语句
  2. R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介
  3. WEBSERVICE之JDK开发webservice
  4. Ubuntu 18.10安装MySql8.0.13
  5. redis学习篇(十)-----高级特性之持久化处理
  6. 高通8155车载芯片_WEY来“摩卡”云首秀,搭载高通8155芯片
  7. html控制弯曲图,html – CSS3 3D弯曲视角
  8. 多线程扫描网络计算机
  9. python用jieba模块分词实现关键词提取
  10. 两数相加—C语言逐位相加版(注释详尽)
  11. Pytorch遍历DataLoader时报错BrokenPipeError: [Errno 32] Broken pipe
  12. Java 中的枚举 (enum)
  13. Windows Server 2019 Datacenter OVF 模板 百度网盘 下载
  14. KNN实现手写字体的识别
  15. 实践四 -- 文本词频分析
  16. 进程管理——PV操作
  17. flac格式的音乐怎么转换成mp3格式
  18. 设计模式-一些输出方式demo
  19. 3dMax模型数据转cesium Gltf模型
  20. docker学习篇(二)---- 基础篇

热门文章

  1. 通过第三方jar实现中文转换为拼音
  2. html清除盒子间距,inline-block元素默认间距清除
  3. java编程50_荐非常经典的java编程题全集-共50题(1-10)...
  4. asp.net(c#)如何把字符串转换成数组
  5. python混淆ios代码_iOS-代码混淆
  6. linux 下写不了文件,linux下用root为什么写不了windows下的文件
  7. 沁阳市计算机硬件市场主要分布地,太行山石种分类及太行奇石资源产地分布(图)...
  8. 蓝牙APP开发你应该知道的几件事
  9. 【观察】大型企业的数字化转型之旅 浪潮云ERP是真正的“引路人”
  10. 从 Spec.到芯片_(数字IC、模拟IC、FPGA/CPLD设计的流程及EDA工具)