在lec3 与 lec4 中,我们使用了Beta分布来反映我们对参数π的先验认识。
我们知道若先验可以用Beta(α,β)描述,收集到的数据可以用Bin(n,π)描述,后验分布就可以用Beta(α+y,β+n−y)描述
在lec3中,我们介绍过共轭先验的概念(conjugate prior):
事实上,Beta-Binomial分布这类先验-数据组合,被称为共轭家族(conjugate family),利用这些家族来获得后验,既有计算上的便利性,由于我们明确知道后验的分布类型,解释起来也很容易。
非共轭先验会带来什么
让我们再回到纣王支持率的例子,考虑一个非共轭先验的状况
假如此时的先验分布f(π)不是beta分布,而是以下形式:
f(π)=e−eπ; for π∈[0,1].
在有共轭先验Beta(45,55)的情况下,后验分布可以简洁地写为Beta(75,75)
但在非共轭先验的情况下,该后验分布的结果变得很繁琐。
并且在非共轭先验的情况下,我们很难从这个后验表达式中获得类似的直觉。
假设我们在50人的投票结果中观察到10人投了支持票,那么似然函数仍是一个二项分布,可以写成:
L(π|y=10)=(!5010!)π10(1−π)40;; for π∈[0,1]
后验可以写成:
f(π|y=10)∝f(π)L(π|y=10)=(e−eπ)⋅(5010)π10(1−π)40.
加入归一化常数后:
f(π|y=10)=(e−eπ)π10(1−π)40∫10(e−eπ)π10(1−π)40dπ;; for π∈[0,1].
例子:亚运会中国每天获得金牌的数量:🤔我们该使用哪种分布来描述下面这个例子?
假设一位体育爱好者每天都会查询中国在亚运会期间每天获得金牌的数量。
她觉得平均下来,中国每天会获得12枚金牌,并且这个数字大概在5-20之间波动
我们假设中国每天会获得金牌的平均数量设为λ
<iframe src="https://tiyu.baidu.com/major/home/%E6%9D%AD%E5%B7%9E%E4%BA%9A%E8%BF%90%E4%BC%9A/tab/%E5%A5%96%E7%89%8C%E6%A6%9C"></iframe>请注意一些新的希腊字母:λ = lambda
🤔我们该使用哪种分布来描述下面这个例子?
需要注意的是,通常我们会:
在这一节中,为了方便探讨共轭先验,我们先从似然函数出发,然后再选取先验,最后讨论后验和共轭先验的关系。
假设λ是已知的,接下来我们对中国每天会获得金牌的数量(Y1,Y2,…,Yn)进行估计
f(Yn|λ)
- 注意,在这里,我们并不能使用二项模型来描述事件的分布情况
- 在二项模型中,我们需要有事件重复的总次数n,和事件成功发生的概率p
f(y|π)=P(Y=y|π)=(ny)πy(1−π)n−y- 在这里,我们已知的是λ,即每天会获得金牌的平均数量
Poisson分布
我们可以使用 泊松分布(Poisson distribution) 来表示在给定λ下,中国每天会获得金牌在不同数量下的概率
Poisson分布的概率质量函数(pmf)可以表示为:
f(y)=λye−λy!
poisson分布对数据做出的假设:
- 事件发生比率(λ)是常数
- 事件的发生是相互独立的
在这个例子中,中国每天会获得金牌的平均数量是固定的,并且前一天获得金牌的数量不会影响后一天获得金牌的数量
Poisson分布图示
下图展示了不同λ下,事件发生y次的可能性分布
# @title setup
import ipywidgets
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
from scipy.stats import gamma
from ipywidgets import interact
from matplotlib.lines import Line2D
import seaborn as sns
y = np.linspace(0, 25, 26) # 假设明天获得金牌的平均数量 0到25次
λ = 12 # 假设每天平均获得12枚金牌
st.poisson.pmf(y, λ)
y = np.linspace(0, 25, 26) # 假设明天获得金牌的平均数量 0到25次
λs = [5,10,15] # 生成三种每天获得枚金牌平均数量 lambda
fig, axes = plt.subplots(1,3,figsize=(15,5),sharex=True,sharey=True) # 生成三个子图
for i,λ in enumerate(λs):
y_p = st.poisson.pmf(y,λ) # 在给定λ下,y发生的概率
axes[i].stem(y,y_p, # 画图
linefmt='black',
bottom=-1)
axes[i].set_title(f"poisson($\lambda=${λ})") # 设置标题
axes[i].set_xlabel('$y$') # 设置x轴标题
axes[0].set_ylabel('$f(y)$') # 设置y轴标题
plt.ylim(0, 0.5) # 设置y轴范围
plt.yticks(np.arange(0, 0.5, 0.1)) # 设置y轴刻度
sns.despine()
计算Poisson的似然函数
🤔如果我们一共获得了四天的数据,此时的似然函数怎么写?
我们将四天内中国获得的金牌数量(Y1,Y2,…,Yn)组合为一个向量→y=(y1,y2,…,yn)
在给定的λ下,→y发生的可能性可以表示为:
f(→y|λ)=n∏i=1f(yi|λ)=f(y1|λ)⋅f(y2|λ)⋅⋯⋅f(yn|λ)
注意:由于每天获得金牌的数量是互不影响的,所以我们可以直接相乘:P(A∩B)=P(A)P(B)
我们可以把公式代入并进行整理,最后可得到
f(→y|λ)=λ∑yie−nλ∏ni=1yi!
其中n为数据的数量(在这个例子中是收集多少天的数据),当n很大时,∏yi!的计算将变得麻烦,同样的我们可以暂时忽略分母
L(λ|→y)=λ∑yie−nλ∏ni=1yi!∝λ∑yie−nλ;; for λ>0
具体计算
f(→y|λ)=λy1e−λy1!⋅λy2e−λy2!⋯λyne−λyn!=[λy1λy2⋯λyn][e−λe−λ⋯e−λ]y1!y2!⋯yn!=λ∑yie−nλ∏ni=1yi!
代入具体数据
假设四天内中国获得金牌的数量分别是20,13,13,8,我们可以将其组合成一个向量→y=(y1,y2,y3,y4)=(20,13,13,8)
代入公式:
L(λ|→y)=λ∑yie−nλ∏ni=1yi!;;;;;;;;;4∑i=1yi=20+13+13+8=54
可得:
L(λ|→y)=λ54e−4λ20!×13!×13!×8!∝λ54e−4λ;;;; for λ>0
此时,输入不同的参数λ,就可以计算得到对应参数的似然值。
首先,我们尝试绘制数据的频率分布图,以确定数据的形态。
其次,我们假设中国每天平均获得12枚金牌(λ=12),并尝试计算对应数据的似然值。
# 绘制数据的分布
#------------------------------------------------
# 你可以更改以下数据,体会不同数据形成的分布,例如 observed_data = [3,3,2,2,2,1,...]
#------------------------------------------------
observed_data = [20,13,13,8] # 假设连续四天中国获得金牌的数量
plt.hist(observed_data)
plt.title('Histogram of Observations')
plt.xlabel('Number of Gold Medal')
plt.ylabel('Frequency')
plt.show()
# 计算数据的似然
#------------------------------------------------
# 你可以尝试不同的lambda 参数值
#------------------------------------------------
λ = 12 # 假设每天获得金牌的平均数量为12
print('The likelihood of observing the data given the parameter lambda is: ', st.poisson.pmf(observed_data,λ))
The likelihood of observing the data given the parameter lambda is: [0.00968203 0.10557038 0.10557038 0.06552328]
Poisson似然函数图示
如何画出Poisson的似然函数图?
# 定义似然函数,由于该似然函数不能通过调用已有的函数获得,因此我们根据得到的公式定义一个
def poisson_likelihood(y):
lambdas = np.arange(0, 25, 0.1)
# Calculate the Poisson likelihood for each lambda
likelihood_values = np.exp(-len(y) * lambdas) * np.power(lambdas, np.sum(y)) / np.prod([np.math.factorial(val) for val in y])
return lambdas, likelihood_values
#传入需要的参数vec y
observed_data = [20,13,13,8]
lambdas, likelihood_values = poisson_likelihood(observed_data)
likelihood_values /= np.sum(likelihood_values)
plt.plot(lambdas, likelihood_values, color='black', lw=2)
plt.xlabel('$\lambda$')
plt.ylabel('$L(\lambda | Y=y)$')
sns.despine()
🤔思考:
在之前的例子中,我们主要关注泊松分布相关的似然函数,而忽略了参数λ的先验分布。
L(λ|→y)=λ∑yie−nλ∏ni=1yi!∝λ11e−4λ
请根据公式的形态猜测一下,以下哪种先验分布可以作为poisson似然的共轭先验??
Gamma模型:f(λ)∝λs−1e−rλ
Weibull模型:f(λ)∝λs−1e(−rλ)s
"F"模型:f(λ)∝λs2−1(1+λ)−s
考虑到 λ 是一个可以取任何正值的连续变量。
我们可以使用Gamma分布对它进行模拟,以此作为λ的先验分布。
λ∼Gamma(s,r)
Gamma分布由两个参数指定:
其pdf为:
f(λ)=rsΓ(s)λs−1e−rλ;; for λ>0
# @title interactive gamma
import ipywidgets
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st
from scipy.stats import gamma
from ipywidgets import interact
import seaborn as sns
x = np.linspace(0, 20, 1000)
def plot_beta(a, b):
y = gamma.pdf(x, a=a, scale=1/b)
plt.plot(x, y, color='black', lw=2)
plt.title(f"Gamma({a}, {b})")
plt.xlabel('$\lambda$')
plt.ylabel('$f(\lambda)$')
plt.gca().yaxis.set_major_formatter('{x:1.1f}')
plt.xlim(0, 8)
plt.xticks(np.arange(0, 9, 2))
plt.yticks(np.arange(0, 2.5, 0.5))
sns.despine()
ipywidgets.interact(plot_beta, a=(0, 10), b=(0, 10))
<function __main__.plot_beta(a, b)>
已知λ的平均值为12,我们选用λ∼Gamma(24,2)作为λ的先验
x = np.arange(0, 15, 0.1)
prior_y = st.gamma.pdf(x, a=10, scale=1/2)
plt.plot(x, prior_y, color='black', lw=2)
plt.title(f"Gamma(10,2)")
plt.xlabel('$\lambda$')
plt.ylabel('$f(\lambda)$')
plt.gca().yaxis.set_major_formatter('{x:1.1f}')
plt.xticks(np.arange(0, 16, 5))
plt.yticks(np.arange(0, 0.3, 0.1))
sns.despine()
由于Gamma先验分布和Poisson似然来自一组共轭家族,既二者组成的后验分布同样也是Gamma分布,具有计算上的便利性,因此我们可以直接代入公式来计算后验:
先验:λ∼Gamma(s,r)似然:Yi|λind∼Pois(λ)后验:λ|→y;∼;Gamma(s+∑yi,;r+n)
代入当前数据可得:
先验:λ∼Gamma(24,2)
→y=(y1,y2,y3,y4)=(20,13,13,8);;;;;
似然:L(λ|→y)=λ54e−48λ20!×13!×13!×8!∝λ54e−48λ
s+∑yi=24+54;;;;;r+n=2+4后验:λ|→y;∼;Gamma(78,6)
我们可以将这三者画出来:
在收集了四天的数据后,我们对λ的信念发生了更新,
x = np.arange(0, 25, 0.1)
prior_y = st.gamma.pdf(x, a=24, scale=1/2) / np.sum(st.gamma.pdf(x, a=24, scale=1/2))
posterior = st.gamma.pdf(x, a=78, scale=1/6) / np.sum(st.gamma.pdf(x, a=78, scale=1/6))
observed_data = [20,13,13,8]
lambdas, likelihood_values = poisson_likelihood(observed_data)
likelihood_values /= likelihood_values.sum()
plt.plot(x, prior_y, color='black')
plt.fill_between(x, prior_y, color="#f0e442", alpha=0.5)
plt.plot(lambdas, likelihood_values, color='black')
plt.fill_between(lambdas, likelihood_values, color="#0071b2", alpha=0.5)
plt.plot(x, posterior, color='black')
plt.xticks(np.arange(0, 16, 5))
plt.fill_between(x, posterior, color="#009e74", alpha=0.5)
# 设置 x 和 y 轴标签
plt.xlabel('$\lambda$')
plt.ylabel('density')
# 创建自定义图例
custom_lines = [Line2D([], [], color="#f0e442", lw=5),
Line2D([], [], color="#0071b2", lw=5),
Line2D([], [], color="#009e74", lw=5)]
# 将图例放置在子图外部的右上角
plt.legend(custom_lines, ['prior', 'likelihood', 'posterior'], loc='upper right', bbox_to_anchor=(1, 1))
# 移除图的上、右边框线
sns.despine()
扩展
除了 Gamma分布外,Poisson分布的共轭先验还包括 Negative Binomial分布:
Gamma:f(λ)∝λs−1e−rλNegative−binomial:P(X=k)=(k+r−1)C(k)∗pk∗(1−p)r
然而,Weibull模型和"F"模型不是Poisson分布的共轭先验:
Weibull模型:f(λ)∝λs−1e(−rλ)sF模型:f(λ)∝λs2−1(1+λ)−s
我们已经学习了两个共轭族:Beta-Binomial 和 Gamma-Poisson。
但还有更多的共轭族存在!最常见的就是:Normal-Normal。
来看一个经典的例子:身高分布
国家卫健委:2020年我国18-44岁成年人平均身高为165厘米。随着生成质量的提高,我们有理由相信,这一数据有所提高,所以我们打算新收集一万名被试(n=10000)的身高数据,并使用正态-正态贝叶斯模型来估计根据数据更新后的平均身高。
source: https://baijiahao.baidu.com/s?id=1736757271631341254&wfr=spider&for=pc
同样,我们的贝叶斯分析也是从对平均身高(μ)的先验开始。
然而,要为μ指定一个适当的先验模型结构,需要考虑数据(Yi)的特征。
由于身高 Yi 是连续数据,因此有很多潜在可能的模型:贝塔模型、指数模型、伽马模型、正态分布模型、F 模型等。
正态模型介绍
假设 Y 是一个连续随机变量,可以取 -∞ 和 ∞ 之间的任意值,即 Y∈ (-∞, ∞)。
那么,Y 的变异性可以很好地用均值参数 μ∈ (-∞, ∞) 和标准差参数 σ > 0 的正态模型来表示:
Y∼N(μ,σ2).
正态模型的连续 pdf 形式:
f(y)=1√2πσ2exp[−(y−μ)22σ2];; for y∈(−∞,∞)
正太模型的基本特征:
E(Y)= Mode(Y)=μVar(Y)=σ2SD(Y)=σ.
此外,大家都知道的,大约 95% 的 Y 值都在 μ 的 2 个标准差范围内。
import seaborn as sns
import matplotlib.pyplot as plt
# 创建数据
import numpy as np
np.random.seed(0)
data1 = np.random.normal(loc=0, scale=1, size=1000)
data2 = np.random.normal(loc=5, scale=2, size=1000)
data3 = np.random.normal(loc=10, scale=5, size=1000)
# 绘制图形
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# 绘制第一个图
sns.histplot(data=data1, kde=True, ax=axes[0], stat = 'density')
axes[0].set_title('Mean=0, Std=1')
axes[0].set_ylim([0, 0.5])
# 绘制第二个图
sns.histplot(data=data2, kde=True, ax=axes[1], stat = 'density')
axes[1].set_title('Mean=5, Std=2')
axes[1].set_ylim([0, 0.5])
# 绘制第三个图
sns.histplot(data=data3, kde=True, ax=axes[2], stat = 'density')
axes[2].set_title('Mean=10, Std=5')
axes[2].set_ylim([0, 0.5])
# 显示图形
plt.tight_layout()
# 移除图的上、右边框线
sns.despine()
上图展示了各种平均值和标准差参数值 μ 和 σ 下的正态模型。
Normal data model
回到我们的例子,我们假设收集了 n = 10000 名被试的身高(Y1, Y2, ... , Yn)
接着我们可以定义出正态模型的似然函数:
L(μ|→y)∝n∏i=1exp[−(yi−μ)22σ2]=exp[−∑ni=1(yi−μ)22σ2].
# 模拟10000名被试身高的数据并绘图
# 创建数据
np.random.seed(0)
data = np.random.normal(loc=168, scale=5, size=10000)
# 绘图
sns.histplot(data=data, kde=True, stat = 'density')
plt.xlabel('Height (cm) for 10000 participants')
# 显示图形
plt.tight_layout()
# 移除图的上、右边框线
sns.despine()
根据2020年之前的数据,我们可以用 165cm 作为我们正态先验模型的均值,即 µ = 165。
具体来说,我们假设 μ 本身是围绕某个均值 θ 和标准差 τ 的正态分布 (其中, θ 和 τ是超参):
μ∼N(θ,τ2)f(μ)=1√2πτ2exp[−(μ−θ)22τ2];; for μ∈(−∞,∞)
注意👁️,正态先验假设 μ∈(-∞,∞)与我们对数据模型的假设一致,我们还将在后面证明这是一个共轭先验。因为两个模型都正比于该项:
exp[−(μ−◼)22◼2]
先验模型和数据模型的差异仅表现为均值的差异,即先验模型的均值为 165cm,而数据模型的均值为 168cm。
# 绘制先验
# 创建数据
np.random.seed(0)
data = np.random.normal(loc=165, scale=5, size=1000)
# 绘图
sns.histplot(data=data, kde=True, stat = 'density')
plt.xlabel('Height (cm) of prior')
# 显示图形
plt.tight_layout()
# 移除图的上、右边框线
sns.despine()
为了得到 μ 的后验模型,我们必须将先验模型和数据信息结合起来。
需要强调的是,我们选择的正态先验模型属于正态-正态的共轭族!因此,μ 的后验模型也将是正态的,并根据先验数据和观测数据更新参数。
以下公式展示了μ的后验模型:
Yi|μind∼N(μ,σ2)μ∼N(θ,τ2)μ|→y;∼;N(θσ2nτ2+σ2+ˉynτ2nτ2+σ2,;τ2σ2nτ2+σ2)
首先,后验均值是先验均值 E(μ) = θ 和样本均值 y 的加权平均值;
posterior mean∼θσ2nτ2+σ2+ˉynτ2nτ2+σ2
其次,后验方差受先验变异性 τ 和数据变异性 σ 的影响:
posterior variance τ2σ2nτ2+σ2
两者都受到样本量n的影响。
结合之前的先验模型和数据模型,现在我们可以来计算后验并绘制它。
# 定义身高范围
x = np.linspace(150, 200, 10000)
# 定义先验分布
prior_mean = 165
prior_std = 5
prior_y = st.norm.pdf(x, loc = prior_mean, scale = prior_std) / np.sum(st.norm.pdf(x, prior_mean, prior_std))
# 生成似然
likelihood_mean = 168
likelihood_std = 5
likelihood_values = st.norm.pdf(x, loc = likelihood_mean, scale = likelihood_std) / np.sum(st.norm.pdf(x, likelihood_mean, likelihood_std))
# 计算后验分布
posterior_mean = (prior_mean * prior_std**2 + likelihood_mean * likelihood_std**2) / (prior_std**2 + likelihood_std**2)
posterior_std = np.sqrt((prior_std**2 * likelihood_std**2) / (prior_std**2 + likelihood_std**2))
posterior = st.norm.pdf(x, loc = posterior_mean, scale = posterior_std) / np.sum(st.norm.pdf(x, posterior_mean, posterior_std))
plt.plot(x, prior_y, color='#f0e442', label="prior")
plt.fill_between(x, prior_y, color="#f0e442", alpha=0.5)
plt.plot(x, likelihood_values, color='#0071b2', label="likelihood")
plt.fill_between(x, likelihood_values, color="#0071b2", alpha=0.5)
plt.plot(x, posterior, color='#009e74', label="posterior")
plt.fill_between(x, posterior, color="#009e74", alpha=0.5)
# 设置 x 和 y 轴标签
plt.xlabel('$\mu$ for height')
plt.ylabel('density')
plt.legend()
# 移除图的上、右边框线
sns.despine()
print(f"后验分布的均值:{posterior_mean}。 介于先验和似然之间。")
后验分布的均值:166.5。 介于先验和似然之间。
扩展阅读:证明 Normal-Normal conjugacy
为完整起见,我们在此证明正态-正态模型产生后验模型。如果你不喜欢推导,也没关系。请随意跳到下一节。
让我们直接进入正题。μ 的后验 pdf 与正态先验 pdf 和似然函数 的乘积成正比。对于 μ∈ (-∞, ∞):
f(μ|→y)∝f(μ)L(μ|→y)∝exp[−(μ−θ)22τ2]⋅exp[−(ˉy−μ)22σ2/n].
接下来,我们可以展开指数中的平方,包括第一个指数分子中的θ2 和第二个指数分子中的 y2:
f(μ|→y)∝exp[−μ2+2μθ−θ22τ2]exp[−μ2+2μˉy−ˉy22σ2/n]∝exp[−μ2+2μθ2τ2]exp[−μ2+2μˉy2σ2/n].
我们给出指数的共同分母,并将它们合并成一个指数:
f(μ|→y)∝exp[(−μ2+2μθ)σ2/n2τ2σ2/n]exp[(−μ2+2μˉy)τ22τ2σ2/n]∝exp[(−μ2+2μθ)σ2+(−μ2+2μˉy)nτ22τ2σ2].
现在,让我们把 μ 项合并起来,重新排列,这样 μ2 就是:
f(μ|→y)∝exp[−μ2(nτ2+σ2)+2μ(θσ2+ˉynτ2)2τ2σ2]∝exp[−μ2+2μ(θσ2+ˉynτ2nτ2+σ2)2(τ2σ2)/(nτ2+σ2)].
仔细观察,你会发现我们可以带回一些不依赖于 μ 的常数来完成分子中的平方:
f(μ|→y)∝exp[−(μ−θσ2+ˉynτ2nτ2+σ2)22(τ2σ2)/(nτ2+σ2)].
这看起来仍然很混乱,但是一旦我们完成了正方形,我们实际上就得到了 μ 的正态 pdf 内核,即 exp部分。通过确定缺失的部分 ∎,我们可以得出以下结论
μ|→y;∼;N(θσ2+ˉynτ2nτ2+σ2,;τ2σ2nτ2+σ2)
我们可以将后验均值重组为先验均值 μ 和数据均值 y 的加权平均值:
θσ2+ˉynτ2nτ2+σ2=θσ2nτ2+σ2+ˉynτ2nτ2+σ2.
Critiques of conjugate family models
最后,我们补充一下共轭族模型的缺点
练习
在先前的示例中,我们将身高的标准差固定为5,这显然不符实实时。
在接下来的练习中,你可以尝试将标准差设置为不同的值,并观察结果的变化。
你练习的目标:
# 定义身高范围
x = np.linspace(150, 200, 10000)
# 定义先验分布
prior_mean = 165
prior_std = 5
# 生成似然
#===========================================================================
# 请调整似然,观察不同似然参数对于先验的影响。
# 请修改 ... 中的值。
#===========================================================================
likelihood_mean = ...
likelihood_std = ...
likelihood_values = st.norm.pdf(x, loc = likelihood_mean, scale = likelihood_std) / np.sum(st.norm.pdf(x, likelihood_mean, likelihood_std))
#===========================================================================
# 进阶:你可以尝试修改先验为不同分布,体验非共轭先验带来的影响
# 例如,将 norm 修改为 gamma,并修改对应的参数。(这里不做任何修改也可以运行)
#===========================================================================
prior_y = st.norm.pdf(x, loc = prior_mean, scale = prior_std) / np.sum(st.norm.pdf(x, prior_mean, prior_std))
# 计算后验分布
posterior_mean = (prior_mean * prior_std**2 + likelihood_mean * likelihood_std**2) / (prior_std**2 + likelihood_std**2)
posterior_std = np.sqrt((prior_std**2 * likelihood_std**2) / (prior_std**2 + likelihood_std**2))
posterior = st.norm.pdf(x, loc = posterior_mean, scale = posterior_std) / np.sum(st.norm.pdf(x, posterior_mean, posterior_std))
plt.plot(x, prior_y, color='#f0e442', label="prior")
plt.fill_between(x, prior_y, color="#f0e442", alpha=0.5)
plt.plot(x, likelihood_values, color='#0071b2', label="likelihood")
plt.fill_between(x, likelihood_values, color="#0071b2", alpha=0.5)
plt.plot(x, posterior, color='#009e74', label="posterior")
plt.fill_between(x, posterior, color="#009e74", alpha=0.5)
# 设置 x 和 y 轴标签
plt.xlabel('$\mu$ for height')
plt.ylabel('density')
plt.legend()
# 移除图的上、右边框线
sns.despine()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。