Numpy 二值随机变量的局部加权平滑

Numpy 二值随机变量的局部加权平滑,numpy,scipy,histogram,logistic-regression,probability-density,Numpy,Scipy,Histogram,Logistic Regression,Probability Density,我有一个随机变量,如下所示: import numpy as np import matplotlib.pyplot as plt from scipy.stats import binned_statistic list = np.ndarray(shape=(200,2)) g = np.random.rand(200) for i in range(len(g)): list[i] = (g[i], np.random.choice([0, 1], p=[1-g[i], g[i

我有一个随机变量,如下所示:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binned_statistic

list = np.ndarray(shape=(200,2))

g = np.random.rand(200)
for i in range(len(g)):
    list[i] = (g[i], np.random.choice([0, 1], p=[1-g[i], g[i]]))

print(list)
plt.plot(list[:,0], list[:,1], 'o')
f(x)=1,概率为g(x)

f(x)=0,概率为1-g(x)

其中0 假设g(x)=x。假设我在不知道函数g的情况下观察这个变量,并获得了100个样本,如下所示:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binned_statistic

list = np.ndarray(shape=(200,2))

g = np.random.rand(200)
for i in range(len(g)):
    list[i] = (g[i], np.random.choice([0, 1], p=[1-g[i], g[i]]))

print(list)
plt.plot(list[:,0], list[:,1], 'o')

现在,我想从这些点检索函数g。我所能想到的最好方法是使用绘制直方图并使用平均统计:

bin_means, bin_edges, bin_number = binned_statistic(list[:,0], list[:,1], statistic='mean', bins=10)
plt.hlines(bin_means, bin_edges[:-1], bin_edges[1:], lw=2)

相反,我想得到生成函数的连续估计


我想这是关于内核密度估计的,但我找不到合适的指针

直接,无需显式拟合估计器:

import seaborn as sns 
g = sns.lmplot(x= , y= , y_jitter=.02 , logistic=True)
插入
x=
你的外生变量和类似的
y=
因变量
y_jitter
是一个抖动点,如果你有很多数据点的话,它可以提高可视性
logistic=True
是这里的要点。它将为您提供数据的逻辑回归线


Seaborn基本上是围绕
matplotlib
定制的,并且与
pandas
配合使用非常好,以防您想将数据扩展到数据帧。

您可以在
Statsmodels
sklearn
中找到KDE,而
scipy
也有KDE。如果只需要一个绘图,请查看
seaborn
,它是
distplot
kdeplot
。但是为什么你想要二进制数据的kde呢?@MarvinTaschenberger我关于kde的评论可能会误导你。看来我有逻辑回归问题。但我不是在尝试适合一个模型。我想以一种平滑的方式绘制它。这看起来也很相关:现在,我知道我想要的是局部加权散点图平滑。谢谢你指向sns。df=pd.DataFrame()df['x']=list[:,0]df['y']=list[:,1]sns.lmplot(x='x',y='y',data=df,lowess=True)plt.show()