PCA 分析中的纯度分数低于预期

Posted

技术标签:

【中文标题】PCA 分析中的纯度分数低于预期【英文标题】:Fewer than expected purity scores in PCA analysis 【发布时间】:2020-12-14 05:19:33 【问题描述】:

我正在尝试绘制纯度分数与 PCA 中捕获的方差的折线图。目标是仅针对捕获的 89% 和 99% 的方差绘制纯度分数的折线图。在我的代码中,当组件/维度为 2 时,它捕获 89% 的方差,而当组件/维度为 4 时,它捕获 99% 的方差。

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

df = pd.read_csv("clustering.csv")
X10_df = df.drop("Class",axis = 1) #feature matrix
Y10_df = df["Class"] #Target vector
X10_df = np.array(X10_df)
Y10_df = np.array(Y10_df)
scaler = StandardScaler() # Standardizing the data
df_std = scaler.fit_transform(X10_df)
pca = PCA()
pca.fit(df_std)
purity = []
n_comp = range(2,5)
for k in n_comp :
    pca = PCA(n_components = k)
    pca.fit(df_std)
    pca.transform(df_std)
    scores_pca = pca.transform(df_std)
    kmeans_pca = KMeans(n_clusters=3, init ='k-means++', max_iter=300, n_init=10, random_state=0)
    pred_y12 = kmeans_pca.fit_predict(scores_pca)
    purity13 = purity_score(Y10_df, pred_y12)
    purity.append(purity13)

下面的函数计算纯度分数:

def purity_score(y_true, y_pred):
    contingency_matrix = metrics.cluster.contingency_matrix(y_true, y_pred)
    return np.sum(np.amax(contingency_matrix, axis=0)) / np.sum(contingency_matrix)

但是,虽然我有四个方差分数,但我只有三个纯度分数。我希望有四个纯度分数,以便我可以创建方差与纯度的图。

为什么只有三个纯度分数?

这是我的数据集文件的链接:https://gofile.io/d/3CgFTi

【问题讨论】:

等等,这个问题真的是关于 matplotlib 还是关于 PCA 库? 感谢 Paul 的编辑。我已按照 stackoveflow 指南发布了错误消息。 同意包含回溯是件好事,但问题与 matplotlib 无关。 【参考方案1】:

这仅仅是因为当您对范围使用 for 循环时,范围中的最后一个数字被忽略。所以在一个范围(2,5)中,它会去 2, 3, 4 然后相当循环。请继续阅读 Python 中的 for 循环。

【讨论】:

以上是关于PCA 分析中的纯度分数低于预期的主要内容,如果未能解决你的问题,请参考以下文章

外媒分析:iPhone销量低于预期是中国市场疲软影响的

R语言使用psych包的principal函数对指定数据集进行主成分分析PCA进行数据降维(输入数据为原始数据)计算每个样本(观察)的主成分的分数计算得分与特定变量的相关性并解读结果

降维算法中的PCA方法

R语言使用psych包的principal函数对指定数据集进行主成分分析PCA进行数据降维(输入数据为相关性矩阵)计算主成分评分系数每个样本(观察)的主成分得分由主成分分数系数构建的公式得到

Prolog中的“逻辑纯度”是啥意思?

主成分分析PCA