微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我自己的 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 举报,一经查实,本站将立刻删除。