机器学习实践笔记(二)EOF

1、简单介绍:
EOF是一种分析矩阵数据中的结构特征,提取主要数据特征量的一种方法。EOF又名PCA.(嘿嘿先这么想,其实在python里就一个函数鸭,PCA可以额外写一篇进行解释,这里只写一下应用啦)。Lorenz在1950年代首次将其引入气象和气候研究。
2、原理
选定要分析的数据,进行数据预处理,通常处理成距平的形式。得到一个数据矩阵Xm×n.
数据大概就是这样的:这个原出处我也没找到,就是给大家看看数据格式。

机器学习实践笔记(二)EOF_第1张图片
(1)开始导入包

import pandas as pd
import numpy as np

(2)把数据转换成距平和把数据标准化。

line = np.mean(data,axis=1)
data = np.array(data)
line = np.array(line)
for i in range(line.shape[0]):
    data[i,:]=data[i,:]-line[i]
mu = np.mean(data, axis=0)
sigma = np.std(data, axis=0)
data = (data - mu) / sigma

(3)计算X与其转置矩阵XT的交叉积,得到方阵并求出特征值
Cm×m = 1/n×X × XT
如果X是已经处理成了距平的话,则C称为协方差阵;如果X已经标准化(即C中每行数据的平均值为0,标准差为1),则C称为相关系数阵。
这里我把我对标准化的理解说一下,我感觉这个东西是用来处理一种多维tensor可能不同的变量的方差啊等数据差异很大的问题。如X={X1,X2},X1的方差等数据远远大于X2,如果求欧几里得距离等操作的话X1对结果影响远大于X2,所以要进行标准化。

计算特征值和特征向量:

import pandas as pd
import numpy as np
import cmath

eof_data =pd.read_csv(r'C:/Users/13056/Desktop/气温.csv',encoding = 'gb2312')
data = eof_data.drop(['站点'],axis=1)

#来一手数据标准化
mean = np.mean(data, axis=0)  # 求平均值
std = np.std(data, axis=0)    # 标准差
data_zcore = (data - mean)/std
#求交叉积
data1 = np.array(data_zcore)
data2 = np.array(data_zcore.T)
data_eof = (np.dot(data1,data2))/data1.shape[1]

eigenvalue,featurevector=np.linalg.eig(data_eof)
#这里说一下eigenvalue是特征值,featurevector是特征向量,俺用库做的,因为懒。

(4)求时间系数矩阵

#3求时间系数矩阵
data_e = np.zeros([data1.shape[0],data1.shape[0]])
i =0
sum1=0
for e in eigenvalue:
    sum1+=e
    data_e [i][i]=e
    i+=1

data_T = data_e.T.dot(data1)

(5)求方差贡献率

R = []
for e in eigenvalue:
    k = e/sum1
    R.append(k)

(6)我要拿特征根大于1的数据,一共五个

i = 0
for e in eigenvalue:
    if e>1 :
        i += 1
    else:
        break
l_R = R[0:i]
l_eigenvalue = eigenvalue[0:i]
l_featurevector = featurevector[0:i]
l_eigenvalue = eigenvalue[0:i]
l_data_T =data_T[0:i]

(7)显著性检验(重点!!!)

ca=[]
ca.append(l_eigenvalue[0])
ej = l_eigenvalue *cmath.sqrt(2/i)
for m in range(i-1):
    if (l_eigenvalue[m+1]-l_eigenvalue[m])>=ej[m]:
             ca.append(l_eigenvalue[m+1])

3、画图
机器学习实践笔记(二)EOF_第2张图片

机器学习实践笔记(二)EOF_第3张图片
具体是用Echarts写的。点击这里

你可能感兴趣的:(人工智能,机器学习,python,数据分析,算法,气象)