我正在尝试根据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
发布于 2020-08-28 21:48:17
这很简单,因为当您使用带范围的for循环时,范围中的最后一个数字将被忽略。所以在一个范围( 2,5)中,它将转到2,3,4,然后是一个循环。请继续阅读Python中的for循环。
https://stackoverflow.com/questions/63580150
复制相似问题