You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PCA马氏距离椭圆绘制边缘缺失问题及Python实现求助

结合PCA与马氏距离的异常值移除及聚类椭圆绘制问题

我正在实现结合PCA与马氏距离的异常值移除功能,参考了一篇使用R语言的相关文章,需要在Python中实现马氏距离并围绕聚类绘制椭圆。

示例数据与绘图代码

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.covariance import EmpiricalCovariance, MinCovDet

iris = datasets.load_iris()

X = iris.data
y = iris.target
target_names = iris.target_names

steps = [
        ("preprocessing", StandardScaler()),
        ("pca", PCA()),]
        
pipe = Pipeline(steps)
searchPCA = GridSearchCV(pipe, { "pca__n_components": [1, 2,3]}, n_jobs = 3)
searchPCA.fit(X)
DF = searchPCA.transform(X)

plt.figure()
colors = ["navy", "turquoise", "darkorange"]
lw = 2

for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(
        DF[y == i, 0], DF[y == i, 1], color=color, alpha=0.8, lw=lw, label=target_name
    )
    plt.legend(loc="best", shadow=False, scatterpoints=1)
    plt.title("PCA of IRIS dataset")
    xx, yy = np.meshgrid(
            np.linspace(plt.xlim()[0], plt.xlim()[1], 100),
            np.linspace(plt.ylim()[0], plt.ylim()[1], 100),)
    zz = np.c_[xx.ravel(), yy.ravel()]
    
    robust_cov = MinCovDet().fit(DF[y == i,0:2])
    
    mahal_robust_cov = robust_cov.mahalanobis(zz)
    
    mahal_robust_cov = mahal_robust_cov.reshape(xx.shape)

    plt.contour(
            xx, yy, np.sqrt(mahal_robust_cov), cmap=plt.cm.YlOrBr_r, linestyles="dashed", levels=[3])

编辑补充

已成功绘制出三个聚类对应的等高线椭圆,但椭圆边缘存在缺失,请问该如何补全完整的椭圆边缘?

椭圆边缘缺失的PCA聚类图


内容的提问来源于stack exchange,提问作者joe_bill.dollar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:30:50