python-3.x - PCA 分析中的纯度分数低于预期
问题描述
我正在尝试根据 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
解决方案
这仅仅是因为当您使用带有范围的 for 循环时,该范围中的最后一个数字被忽略。所以在一个范围(2,5)中,它会去 2, 3, 4 然后相当循环。请继续阅读 Python 中的 for 循环。
推荐阅读
- html - 我正在使用 JqueryUI Sortable,但我无法让句柄选项工作。我用错了吗?
- python - 在 Python 中绘制一个通用函数
- c# - 如何导出C#编写的接口实现TLB生成的Delphi代码
- python - 如何从 asyncpg 库连接到 pgbouncer?
- python - 添加两个不同的子类作为它们的公共超类
- javascript - 等待 OpenWeather 函数,然后运行另一个函数
- node.js - 如何强制 Docker 使用内部地址而不接受来自外部的连接?
- azure - 错误:引用 modules/site_recovery/main.tf 上未声明的模块
- javascript - 如何使用 javacsript 动态创建 json 文件
- asp.net - IIS Blazor JS 错误 CircuitOptions.DetailedError