python - 高斯混合:最小值必须小于或等于最大值
问题描述
在我的探索性分析中,我目前正在使用高斯混合模型通过绘制每个手机模型(总共 4 个独特模型)的等高线图来排除异常值。我正在使用这 2 个变量 ( r_max
, b_max
) 来检测一个点是否是异常值。
这是我的数据集(180 行,4 列):
r_max | b_max | SPAD | model
255.0 | 46.0 | 35.1 | Redmi 5A
198.0 | 36.0 | 32.5 | Vivo 1820
237.0 | 77.0 | 35.8 | CPH1920
255.0 | 79.0 | 30.1 | SM-M105F
这是我创建等高线图的代码:
for ph in final_df.model.unique():
dataf = final_df[final_df.model==ph]
dataf = dataf[['r_max', 'b_max', 'SPAD', 'model']]
dataf = dataf[['r_max', 'b_max']].values
#dataf = np.array(dataf).reshape(-1,1)
# fit gaussian mixture model
gmm = mixture.GaussianMixture()
gmm.fit(dataf)
X, Y = np.meshgrid(np.linspace(0, 300), np.linspace(0, 300))
XX = np.array([X.ravel(), Y.ravel()]).T
Z = gmm.score_samples(XX)
Z = Z.reshape(X.shape)
CS = plt.contour(X, Y, -Z, norm=LogNorm(vmax=500), levels=np.logspace(0, 3, 10))
CB = plt.colorbar(CS, shrink= 1.0, extend = 'both')
plt.scatter(dataf[:,0], dataf[:,1], marker = "x", cmap='viridis')
plt.title(f"{ph} : r_max vs b_max")
#ax.set_title(f"{feats[idx]} vs SPAD")
plt.show()
我可以为除 CPH1920 之外的所有模型创建图。在这一行:
CS = plt.contour(X, Y, -Z, norm=LogNorm(vmax=500), levels=np.logspace(0, 3, 10))
我收到此错误:
ValueError: min value must be less than or equal to max value
我不确定我是否理解正确,但紫色圆圈之外的点是异常值,对吗?
下一个问题,我如何提取哪些数据点是异常值?我想知道哪些点被认为是异常值,所以我可以在我的 EDA 数据集中排除它们。如果> 0.5是异常值,是否有某种方法可以计算每个点成为异常值的概率然后设置阈值?
希望有人可以在这里提供一些帮助,任何帮助表示赞赏!
解决方案
按照评论中的要求,我只会回答有关如何排除异常值的问题。您已经在代码中为等高线图使用了所需的一切。该函数gmm.score_samples
采用数据点数组并返回 GMM 下的概率数组。现在您可以按照您的建议简单地将它们设置为阈值:
threshold = 0.5
probs = gmm.score_samples(dataf)
not_outliers = dataf[probs > threshold]
该数组no_outliers
现在应该只包含高于阈值的数据点。您必须尝试一下应该设置多高。
推荐阅读
- reactjs - 在 Google GCP 应用引擎中部署 React v16.7 应用程序时出现 502 网关错误
- angular - 将 json 从一个组件发送到另一个组件,而不会在目标组件的 url 中看到
- c++ - 错误:未定义对...的引用有什么问题?
- asp.net-mvc - 如何将 http:\\localhost:8001 更改为 Electron .Net Core 应用程序的 HTTPS
- javascript - 循环浏览文件夹的所有内容以放在网站上
- html - 将床原始 html 表单添加到房间原始 html 作为弹出窗口以添加大量床
- next.js - NextJS - 未定义窗口
- java - 在 Spring AMQP 中根据其消费者数量来消费一个队列
- amazon-web-services - 具有两个 ENI 和公共 IP 的 EC2 实例
- joi - 如何在模式中使用嵌套 JSON