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

引言:最近几天帮几个人工智能专业的同学做了一些机器学习课程的大作业,我发现机器学习一些常见的数据处理方法他们并不会用程序表示出来,仅仅是停留在理论层面。那么今天我将就机器学习一些常见数据处理方式实现皮尔森矩阵及数据关系图,以便大家加深对皮尔森的理解,同时掌握一些机器学习数据处理的技巧。
首先介绍下机器学习,机器学习是将近20多年蓬勃发展的学问多各个领域学科,牵涉到概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。神经网络学说主要是的设计和研究一些让计算机系统可以系统会“自学”的推演算法。神经网络演算法是一类从统计数据中的系统会研究取得规律性,并借助规律性对不得而知的统计数据展开预测的推演算法。因为学习算法中涉及了大量的统计学理论,神经网络与统计数据推测习紧密联系最为紧密,也被称作统计学习理论。演算法的设计各个方面,神经网络学说注目可以构建的,系统化的自学演算法。很多假设难题归属于无程序中难以确定可玩性,所以部份的神经网络研究工作是研发更容易处置的近似算法。
而皮尔森系数作为机器学习数据处理的必备方式,其重要性不言而喻,今天我们就一步步搭建皮尔森矩阵数据并显示,并且我会在每个代码上都添加注释以方便理解。
首先介绍下皮尔森先关系数:皮尔森相关系数(Pearson correlation coefficient)也称皮尔森积矩相关系数(Pearson product-moment correlation coefficient) ,是一种线性相关系数。皮尔森相关系数是用来反映两个变量线性相关程度的统计量。相关系数用r表示,其中n为样本量,分别为两个变量的观测值和均值。r描述的是两个变量间线性相关强弱的程度。r的绝对值越大表明相关性越强。
其公式理解为:样本的简单相关系数一般用r表示,其中n 为样本量, 分别为两个变量的观测值和均值。r描述的是两个变量间线性相关强弱的程度。r的取值在-1与+1之间,若r>0,表明两个变量是正相关,即一个变量的值越大,另一个变量的值也会越大;若r<0,表明两个变量是负相关,即一个变量的值越大另一个变量的值反而会越小。r 的绝对值越大表明相关性越强,要注意的是这里并不存在因果关系。若r=0,表明两个变量间不是线性相关,但有可能是其他方式的相关(比如曲线方式)。利用样本相关系数推断总体中两个变量是否相关,可以用t 统计量对总体相关系数为0的原假设进行检验。若t 检验显著,则拒绝原假设,即两个变量是线性相关的;若t 检验不显著,则不能拒绝原假设,即两个变量不是线性相关的
其程序步骤如下所示,首先使用numpy初始化一个随机数数组,每个随机数的范围为0到1。 数组应该为shape=1000,50
接着对步骤一创建所有行对之间的皮尔森相关性的相关矩阵,相关矩阵为shape=[1000,1000])。
然后使用步骤二得到的1000*1000皮尔森相关系数r的下三角值,用matplotlib,绘制100-bin的直方图(忽略对角线和对角线上方的所有像元)
通过直方图,关联大小为50的两个随机向量的估计r>0.75或r<-0.75的概率
在步骤一仅用10列的情况下重复步骤一至步骤三,考虑较小的样本如何影响直方图分布。
最后的输出部分:两张直方图,第一张是基于大小为50的向量相关性,用hist1标识,在直方图上方的标题处标明概率大小。第二张用则以10为载体,用hist2标识,同样也在直方图上方标题处标明概率大小。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

#关联大小为50的两个随机向量函数
def del50():
#使用numpy初始化一个随机数数组,每个随机数的范围为0到1.数组应该为shape=1000,50
a=np.random.rand(1000,50)
#对步骤一创建所有行对之间的皮尔森相关性的相关矩阵,相关矩阵为shape=[1000,1000])。
s=np.corrcoef(a)
#获取1000*1000皮尔森相关系数r的下三角值赋值给data,
data=[]
for i in range(1000):
for j in range(i):
data.append(s[i][j])

设置matplotlib正常显示中文和负号,否则中文乱码

    matplotlib.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
    matplotlib.rcParams['axes.unicode_minus']=False     # 正常显示负号

    """

绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
“”"
num=0
for i in range(1000):
for j in range(1000):
if s[i][j]>0.75 or s[i][j]<-0.75:
num+=1
percent=(num/1000000)*100
tit=“hist1概率为”+str(percent)+"%"
#绘制100个矩形的直方图
plt.hist(data, bins=100, normed=0, facecolor=“blue”, edgecolor=“black”, alpha=0.7)

显示横轴标签

    plt.xlabel("区间")

显示纵轴标签

    plt.ylabel("频数/频率")

显示图标题

    plt.title(tit)
    plt.show()

def del10():
#使用numpy初始化一个随机数数组,每个随机数的范围为0到1.数组应该为shape=1000,50
a=np.random.rand(1000,10)
#对步骤一创建所有行对之间的皮尔森相关性的相关矩阵,相关矩阵为shape=[1000,1000])。
s=np.corrcoef(a)
#获取1000*1000皮尔森相关系数r的下三角值赋值给data,
data=[]
for i in range(1000):
for j in range(i):
data.append(s[i][j])

设置matplotlib正常显示中文和负号,否则中文乱码

    matplotlib.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
    matplotlib.rcParams['axes.unicode_minus']=False     # 正常显示负号

    """

绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
“”"
num=0
for i in range(1000):
for j in range(1000):
if s[i][j]>0.75 or s[i][j]<-0.75:
num+=1
percent=(num/1000000)*100
tit=“hist2概率为”+str(percent)+"%"
#绘制100个矩形的直方图
plt.hist(data, bins=100, normed=0, facecolor=“blue”, edgecolor=“black”, alpha=0.7)

显示横轴标签

    plt.xlabel("区间")

显示纵轴标签

    plt.ylabel("频数/频率")

显示图标题

    plt.title(tit)
    plt.show()

del50()
del10()
最终显示的图片如下所示:
在这里插入图片描述
在这里插入图片描述
通过对直方图数据的比较我们很容易发现数据之间的相关性特征,故可得知数据分布存在着一定的规律,即大部分数据都存在一个合理的区间范围,故机器学习数据处理才具有可能性。这也是机器学习对数据做统计应用可行合理性的一个证明,要不然岂不是认为机器学习就是瞎猜的了。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI看世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值