微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条件多元KDE具有多个最大值和最小值

如何解决条件多元KDE具有多个最大值和最小值

以下是使用Statsmodel的条件多元KDE的PDF,CDF和Log CDF的图:

import statsmodels.api as sm
import pandas as pd
import numpy as np
import random

random.seed(30)
nobs = 100
c1 = np.random.normal(size=(nobs,1))
c2 = np.random.normal(2,1,size=(nobs,1))
c3 = np.random.normal(3,2,1))


x = pd.DataFrame(c1,columns=['var1'])
y = pd.DataFrame(c2,columns=['var2'])
z = pd.DataFrame(c3,columns=['var3'])

data = pd.concat([x,y,z],axis=1)
data =data.sort_values('var1')
# Assume each row in the data corresponds to a point in the (x,z) plane.

kde = sm.nonparametric.KDEMultivariateConditional(endog=[data['var1']],exog=[data['var2'],data['var3']],dep_type='c',indep_type='cc',bw='cv_ml')

fig = plt.figure(figsize=(15,7))
ax = fig.add_subplot(111)

#Edited as suggested by JohanC 
ax.plot(data['var1'],kde.pdf(endog_predict=[data['var1']],exog_predict=[data['var2'],data['var3']]),label='PDF')
ax.plot(data['var1'],kde.cdf(endog_predict=[data['var1']],label='CDF')
ax.plot(data['var1'],np.log(kde.pdf(endog_predict=[data['var1']],data['var3']])),label='Log PDF')
ax.legend(loc = 'best')
ax.grid(True,zorder=-5)

输出为:

enter image description here

我打算对pdf进行分段,但是我发现有多个最小值和最大值:

from scipy.signal import argrelextrema
minima,maxima = argrelextrema(kde.pdf(endog_predict=[data['var1']],np.less)[0],argrelextrema(kde.pdf(endog_predict=[data['var1']],np.greater)[0]
print('minima')
print(minima)
print('maxima')
print(maxima)

输出

minima
[ 2  5  8 12 15 19 23 25 29 31 33 35 37 39 41 46 48 51 54 56 60 66 69 72
 76 78 81 83 89 91 94 98]
maxima
[ 3  7 10 14 17 22 24 28 30 32 34 36 38 40 45 47 50 53 55 58 62 67 70 74
 77 79 82 87 90 92 96]

要进行细分,这是我的代码

#segmentation part
a = [c1[c1 < minima[0]],c1[(c1 >= minima[0]) & (c1 <= minima[1])],c1[c1 >= minima[1]]]
#number of segments
print(len(a))

有人可以验证我的细分过程是否正确吗?另一个问题是我应该使用PDF还是原木(PDF)查找切口(局部极值)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。