如何解决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循环。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。