数学建模学习8

F论文

p10-p25

4、KS算法检验是否符合正态分布

K-S检验理论

K-S可以检验总体是否服从某种已知的理论分布,通过比较实际频数和期望频数,来检验拟合程度。

转载

原假设和备择假设:

H0:S(x)=F( x ), H1:S(x)!=F( x )

样本观测值实际累计概率为S(x),理论累计概率为F(x),实际和理论的差值为D

D=max( |S(xi)-f(xi)| )

因为累计概率是离散值,要做修正,修正为:

D=max(( |S(xi)-f(xi)| ),( |S(xi-1)-f(xi)| ))

然后用K-S检验统计量,小样本服从Kolmogorov分布(3~50),大样本服从正态分布。

大样本:

Z=n0.5 D

计算P值,若P<0.05(显著性水平a),拒绝原假设,否则不拒绝原假设

from scipy import stats
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# scipy包是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算
data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
       76,77,78,92,75,80,78]
# 样本数据,35位健康男性在未进食之前的血糖浓度
df = pd.DataFrame(data, columns =['value']) #应用DataFrame
u = df['value'].mean()  # 计算均值
std = df['value'].std()  # 计算标准差
test=stats.kstest(df['value'], 'norm', (u, std))
print(test.pvalue-0.05)
# .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
# 结果返回两个值:statistic → D值,pvalue → P值
# p值大于0.05,为正态分布
#可视化展示:
#直方图
fig = plt.figure(figsize = (10,6))
ax2 = fig.add_subplot(3,1,1)  # 创建子图2
s = pd.DataFrame(data,columns= ['value'])
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()

#QQ图
mean = s['value'].mean()
std = s['value'].std()
s.sort_values(by = 'value', inplace = True)  # 重新排序

s_r = s.reset_index(drop = False)  # 重新排序后,更新index
st = s['value'].describe()
#print(st)
x1 ,y1 = 0.25, st['25%']
x2 ,y2 = 0.75, st['75%']
s_r['p'] = (s_r.index - 0.5) / len(s_r)
s_r['q'] = (s_r['value'] - mean) / std
ax3 = fig.add_subplot(3,1,2)  # 创建子图3
ax3.plot(s_r['p'],s_r['value'],'g.',alpha = 0.1)
ax3.plot([x1,x2],[y1,y2],'-r')
plt.grid()
plt.show()

5、横向频率直方图代码实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(6,4),
                 index=['one','two','three','four','five','six'],
                 columns=pd.Index(['A','B','C','D'],name='Genus'))
fig, axes = plt.subplots(2, 2)
df.plot.bar(ax=axes[0, 0], alpha=0.7, rot=0, legend=False)
df.plot.bar(ax=axes[0, 1], stacked=True, alpha=0.7, rot=0)
# 参数stacked为True时,普通条形图变成堆积条形图

df.plot.barh(ax=axes[1, 0], alpha=0.7, rot=0, legend=False)
df.plot.barh(ax=axes[1, 1], stacked=True, alpha=0.7, rot=0, legend=False)

axes[0, 0].set_title('The ordinary vertical bar plot')
axes[0, 1].set_title('The stacked vertical bar plot')
axes[1, 0].set_title('The ordinary horizontal bar plot')
axes[1, 1].set_title('The stacked horizontal bar plot')

axes[0, 1].legend(loc=2, bbox_to_anchor=(1.05, 1.0), borderaxespad=-0.2)
# 为防止图例覆盖条形图,将图例放置在条形图的外面
fig.subplots_adjust(wspace=0.4, hspace=0.4)  # 调整子图之间的距离
fig.savefig('d://p2.png')
print(df)

6、马尔科夫预测链模型(机器学习)

马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法、序列分类等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。到目前为止,它一直被认为是实现快速精确的语音识别系统的最成功的方法之一。

马尔科夫过程与初始状态无关,跟转移矩阵有关。

以上代码均为转载。

1、马尔科夫原理介绍

马尔可夫模型_Fitz的博客-CSDN博客_马尔可夫模型

2、代码分步解析:

马尔科夫链预测,Python实现_PY_smallH的博客-CSDN博客_马尔可夫python实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值