我自己的 PCA 版本的准确性问题?

问题描述

我用 Python 创建了自己的 PCA 版本,并用它来训练人脸识别,但问题是我如何使用该 PCA。如果我拆分我的数据集,然后在 x_train、x_test 上使用 PCA 并使用该结果来预测准确度将约为 20%。另一方面,如果我在拆分之前将 PCA 与数据集一起使用,结果会很好,准确率为 90%,所以我的问题是哪个是使用 pca 的正确方法? 这是我的第一个选项的代码

df = pd.read_csv("dataset/face_data.csv")
targets = df["target"]
pixels = df.drop(["target"],axis=1)
x_train,x_test,y_train,y_test = train_test_split(pixels,targets)
Xtrainpca  = PCA_cal(x_train,num_components = 150)
Xtestpca = PCA_cal(x_test,num_components = 150)

clf = SVC(kernel='rbf',C=1500,gamma=0.001)
clf = clf.fit(Xtrainpca,y_train)
print("Predicting people's names on the test set")
t0 = time()
y_pred = clf.predict(Xtestpca)
print("done in %0.3fs" % (time() - t0))
print(classification_report(y_test,y_pred))

这是我的第二个选项代码

df = pd.read_csv("dataset/face_data.csv")
targets = df["target"]
pixels = df.drop(["target"],y_test = train_test_split(X,targets)
clf = SVC(kernel='rbf',gamma=0.001)
clf = clf.fit(x_train,y_train)
print("Predicting people's names on the test set")
t0 = time()
y_pred = clf.predict(x_test)
print("done in %0.3fs" % (time() - t0))
print(classification_report(y_test,y_pred))

我的 PCA 版本:

def PCA_cal(X,num_components):
    
    X_meaned = X - np.mean(X,axis=0)
   
    cov_mat = np.cov(X_meaned,rowvar=False) 
  
    eigen_values,eigen_vectors = np.linalg.eigh(cov_mat) 
    
    sorted_index = np.argsort(eigen_values)[::-1] 
    sorted_eigenvalue = eigen_values[sorted_index] 
    sorted_eigenvectors = eigen_vectors[:,sorted_index] 
  
    eigenvector_subset = sorted_eigenvectors[:,0:num_components]
   
    X_reduced = np.dot(eigenvector_subset.transpose(),X_meaned.transpose()).transpose()
    return X_reduced

强文本

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)