探索性数据分析的残差是什么

探索性数据分析的残差是什么,第1张

正态性检验
用于检验数据是否符合正态性分布
# 生成正态分布的观测数据
norm_data = ssnormrvs(loc = 0,scale = 1,size = int(10e6)) # loc为均值,scale为标准差,size为生成数据个数,可以为元组
ssnormaltest(norm_data)
1
2
3
1
2
3
12 卡方检验
常用作检验两个样本数据之间是否有较强联系
sschi2_contingency([[15,95],[85,5]])
1
1
13 独立分布t检验
常用作比较均值是否有相异性,不要求两个样本之间数据量一致
ssttest_ind(ssnormrvs(size = 500),ssnormrvs(size = 1000))
1
1
14 方差检验
常用作检验多组样本数据之间的均值是否有差异
ssf_oneway(ssnormrvs(size = 5000),ssnormrvs(size = 10000),ssnormrvs(size = 5000))
1
1
15 Q-Q图
横轴为:标准分布的分位数值(默认为正态分布)
纵轴为:已知分布的分位数的值
数据集中在对角线上则说明越符合正态分布
from statsmodelsgraphicsapi import qqplot
import matplotlibpyplot as plt
qqplot(ssnormrvs(size = 50))
pltclose()
# pltshow()
1
2
3
4
5
1
2
3
4
5
16 相关系数
pearson相关系数和具体数值有关
spearman相关系数和名次差有关,运用于相对比较的情况
s1 = pdSeries(nprandomrandn(10))
s2 = pdSeries(nprandomrandn(10))
s1corr(s2,method = "spearman")
df = pdDataFrame(nparray([s1,s2])T)
dfcorr()
1
2
3
4
5
1
2
3
4
5
2 单因素分析
21 线性回归
求解方法:最小二乘法
关键指标:
决定系数: [0,1],越接近于1,回归效果越好
残差不相关(DW检验):[0,4],DW = 2 回归效果好,即残差不相关,0负相关,4正相关
# 一元线性回归
from sklearnlinear_model import LinearRegression as LR
from sklearncross_validation import train_test_split
x = nparange(50)astype(npfloat)reshape(-1,1)
y = 3x + 2+5nprandomrandom((50,1))
x_train,x_test,y_train,y_test = train_test_split(x,y,train_size = 08)
lr = LR()
lrfit(x_train,y_train) # 线性拟合
y_pre = lrpredict(x) # 拟合模型进行预测
pltscatter(x_train,y_train,color = "b")
pltscatter(x_test,y_test,color = "y")
pltplot(x,y_pre,color = "r")
pltclose()
lrcoef_ # 斜率
lrintercept_ #截距
lrscore(x_test,y_test) # 决定系数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
22 PCA 奇异值分解
sklearn自带的PCA方法使用的是奇异值分解
from sklearndecomposition import PCA
decom = PCA(n_components = 1)
data = nprandomrandom((50,2))
decomfit(data)
decomexplained_variance_ratio_ # 降维后得到的信息量
decomfit_transform(data) # 得到降维后的数据
1
2
3
4
5
6
1
2
3
4
5
6
23 主成分分析(PCA自定义实现)
def myPCA(data,n_components = 2):
from scipy import linalg # linear algbra 线性代数
data_cov = npcov(data,rowvar = False)
data_mean = npmean(data,axis = 0)
data_temp = data - data_mean
eig_value,eig_vector = linalgeig(npmat(data_cov)) # eigen为特征的、固有的意思,linalgeig为计算特征值和特征向量的函数
eig_value_index = npargsort(eig_value)[:-(n_components+1):-1]
eig_vector = eig_vector[:,eig_value_index]
data_decom = npdot(data_temp,eig_vector) # npdot和npmatmul都为矩阵乘法
return data_decom,eig_value
data = nparray([[25,05,22,19,31,23,2,1,15,11],[24,07,29,22,3,27,16,11,16,09]])T
myPCA(data,n_components = 1)
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
3 复合分析
31 分组分析
分组分析只是一种辅助手段
钻取:分为向上钻取和向下钻取,向上钻取即为汇总分析
分割:一阶差分
拐点:二阶差分
不纯度:GiNi系数
311 离散数据分组
import seaborn as sns
snsbarplot(data = df,x = "a",y = "b",hue = "c")
1
2
1
2
312 连续数据分组
snsbarplot(list(range(len(df['a']))),df['a']sort_values())
1
1
313 不纯度(GiNi系数)
针对目标标注的GiNi系数
选取GiNi系数接近于0的目标标注
# 定义概率平方和函数:
def getProbSS(s):
import pandas as pd
import numpy as np
if not isinstance(s,pdcoreseriesSeries):
s = pdSeries(s)
return sum((pdgroupby(s,by = s)count()values/float(len(s)))2)
# 定义GiNi系数求取函数
def getGiNi(s1,s2):
"""
其中s1为目标标注
"""
import pandas as pd
import numpy as np
dict_temp = {}
for i in range(len(s1)):
dict_temp[s1[i]] = dict_tempget(s1[i],[]) + [s2[i]]
return 1 - sum([getProbSS(value)/float(len(value)) for value in dict_tempvalues()])
s1 = ["x1","x1","x2","x2","x2","x2"]
s2 = ["y1","y1","y1","y2","y2","y2"]
getGiNi(s1,s2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
32 相关分析
相关性分析分为两种:
连续数据的相关性分析 - 相关性系数
离散数据的相关性分析 - 基于熵定义的相关性系数
# __________离散数据相关系数的计算
s1 = ["x1","x1","x2","x2","x2","x2"]
s2 = ["y1","y1","y1","y2","y2","y2"]
# 定义计算熵的函数
def getEntropy(s):
"""
熵是度量不确定性的指标
熵趋近于0,则不确定会很小。
"""
import pandas as pd
import numpy as np
if not isinstance(s,pdcoreseriesSeries):
s = pdSeries(s)
prob_dist = pdgroupby(s,by = s)count()values/float(len(s))
return -(prob_distnplog2(prob_dist))sum()
# 自定义计算条件熵的函数
def getCondEntropy(s1,s2):
"""
在s1分布下分别对s2计算熵
"""
import pandas as pd
import numpy as np
if not isinstance(s1,pdcoreseriesSeries):
s1 = pdSeries(s1)
if not isinstance(s2,pdcoreseriesSeries):
s2 = pdSeries(s2)
dict_temp = {}
for i in nparange(len(s1)):
dict_temp[s1[i]] = dict_tempget(s1[i],[]) + [s2[i]]
return sum([getEntropy(value)float(len(value))/float(len(s1)) for value in dict_tempvalues()])
# 自定义互信息即熵增益函数
def getEntropyGain(s1,s2):
"""
计算由s1分布到s2的熵增益
"""
return getEntropy(s2) - getCondEntropy(s1,s2)
# 自定义熵增益率系数
def getEntropyGainRatio(s1,s2):
return getEntropyGain(s1,s2)/getEntropy(s2)
# 自定义熵相关度函数
def getDiscreteRelation(s1,s2):
"""
计算离散变量的相关系数
"""
return getEntropyGain(s1,s2)/(getEntropy(s1)getEntropy(s2))05
getDiscreteRelation(s1,s2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
4 因子分析(成分分析)
from factor_analyzer import FactorAnalyzer
class CyrusFactorAnalysis():
def __init__(self,logger=None):
selflogger = logger
selfmetric_tool = CyrusMetrics(logger=selflogger)
selfplot_tool = PlotTool(selflogger)
def select_factor_nums(self,data):
selfstandard_tool = StandardTool(data)
std_data = selfstandard_tooltransform_x(data)
selffactor_tool = FactorAnalyzer(n_factors=datashape[1], rotation="promax")
var = selffactor_toolget_factor_variance()
save_to_excel()
def run_factor_analysis(self,data,n_factor=2):
selfstandard_tool = StandardTool(data)
std_data = selfstandard_tooltransform_x(data)
selffactor_tool = FactorAnalyzer(n_factors=n_factor, rotation="promax")
process_data = selffactor_toolfit_transform(std_data)
factor_data = selffactor_toolloadings_
weights = selffactor_toolweights_
var = selffactor_toolget_factor_variance()
save_to_excel([(pdDataFrame(factor_data),"载荷矩阵"),(pdDataFrame(process_data),"归因后结果"),
(pdDataFrame(weights),"归因系数"),(pdDataFrame(var),"方差解释性")],
path="FactorAnalysisResult_{}"format(datetimedatetimenow()strftime("%Y-%m-%d")))
def transform(self,data):
std_data = selfstandard_tooltransform_x(data)
factor_data = selffactor_tooltransform(std_data)
return factor_data
def save_model(self):
save_var(selffactor_tool,path="FactorAnalysisModel_{}"format(datetimedatetimenow()strftime("%Y-%m-%d")))
1

不是
另一方面,残差大小是一个相对的概念,相对于期望频数为10时,期望频数为20的残差非常大,但相对于期望频数为1 000时20的残差就很小了。考
CSDN编程社区

解读卡方检验概念及用途金融常识 - - 赢家财富网

2016年12月16日卡方值表示观察值和理论值的偏离程度,其计算公式如

如果说方差是用来衡量一个样本中,样本值的偏离程度的话,协方差就是用来衡量两个样本之间的相关性有多少,也就是一个样本的值的偏离程度,会对另外一个样本的值偏离产生多大的影响,协方差是可以用来计算相关系数的,相关系数P=Cov(ab)/SaSb, Cov(ab)是协方差, Sa Sb 分别是样本标准差。
异方差性(heteroscedasticity )是相对于同方差而言的。所谓同方差,是为了保证回归参数估计量具有良好的统计性质,经典线性回归模型的一个重要假定:总体回归函数中的随机误差项满足同方差性,即它们都有相同的方差。如果这一假定不满足,即:随机误差项具有不同的方差,则称线性回归模型存在异方差性。 所谓残差是指观测值与预测值(拟合值)之间的差,即是实际观察值与回归估计值的差。

1、标准差计算公式是标准差σ=方差开平方。标准差,中文环境中又常称均方差,是离均差平方的算术平均数的平方根,用σ表示。在概率统计中最常使用作为统计分布程度上的测量。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。
2、标准差系数,又称为均方差系数,离散系数。它是从相对角度观察的差异和离散程度,在比较相关事物的差异程度时较之直接比较标准差要好些。标准差系数是将标准差与相应的平均数对比的结果。标准差和其他变异指标一样,是反映标志变动度的绝对指标。
3、它的大小,不仅取决于标准值的离差程度,还决定于数列平均水平的高低。因而对于具有不同水平的数列或总体,就不宜直接用标准差来比较其标志变动度的大小,而需要将标准差与其相应的平均数对比,计算标准差系数,即采用相对数才能进行比较


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12716347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存