Matlab2019B中PCA函数替代Princomp的测试指南

版权申诉
0 下载量 31 浏览量 更新于2024-12-14 收藏 1KB RAR 举报
资源摘要信息:"本资源主要介绍了在Matlab2019B环境中使用PCA(主成分分析)的变更情况。随着Matlab版本的更新,原有的princomp函数已经被新的pca函数所替代,虽然两者功能相似,但是函数名的更改可能会对旧有代码的兼容性造成影响。因此,资源中特别提醒用户在代码迁移和更新时,需要将旧版本中的princomp函数替换为新的pca函数,以保证代码能够在新版的Matlab环境中正常运行。" 知识点详细说明: 1. 主成分分析(PCA)概念: 主成分分析(Principal Component Analysis,PCA)是一种统计方法,通过正交变换将一组可能相关的变量转换为一组线性不相关的变量,这些新变量称为主成分。在多个维度的数据集中,PCA可以识别出最重要的几个线性组合,这些线性组合形成了数据的主成分。每个主成分在方差最大化的同时彼此之间又是相互独立的。通过PCA分析,可以在降维的同时保留大部分的数据特征。 2. Matlab环境下的PCA使用: Matlab是一个高性能的数学计算和可视化软件,它提供了很多内置的函数来执行各种数学和统计分析,其中就包括PCA。在早期的Matlab版本中,用于执行PCA的标准函数是princomp。该函数能够读取数据集,计算主成分,并返回一个包含主成分分析结果的数据结构。 3. Matlab2019B版本变更: 随着时间的推移,Matlab软件也在不断地更新和改进。在Matlab2019B版本中,princomp函数被pca函数所取代。尽管新的pca函数在功能上与之前的princomp相似,但是名字的改变可能会导致原有脚本在新版本中出现兼容性问题。这需要用户在进行软件升级时,检查并更新旧代码中的相关函数调用。 4. 代码兼容性问题: 代码兼容性是指旧有软件代码在新版本的软件环境中是否能够正确执行而不出现错误的能力。在Matlab2019B版本中,由于princomp函数的废弃和pca函数的引入,用户必须将原有代码中的princomp函数调用替换为pca函数,以避免运行时的错误。更新代码时,需要仔细核对参数和使用方法,确保新函数的使用方式符合Matlab2019B的函数规范。 5.PCA应用领域: PCA广泛应用于模式识别、图像处理、数据分析、特征提取等领域。在这些领域中,PCA被用来降低数据的维度、减少计算复杂度,同时尽量保留原始数据集的重要信息。例如,在人脸识别中,PCA可以提取人脸的主要特征用于后续的比对和识别;在多变量数据分析中,PCA常用于数据降维,便于可视化和后续处理。 6.PCA函数在Matlab中的使用方法: 在Matlab中,使用pca函数进行主成分分析的一般步骤包括:准备数据集、调用pca函数、分析返回的主成分。首先,用户需要准备要分析的数据矩阵,矩阵的每一行代表一个观测对象,每一列代表一个变量。然后,通过调用pca函数来计算主成分,Matlab将返回一系列的输出,包括主成分的得分、解释方差的比例等。最后,根据这些输出结果,用户可以对数据进行进一步的分析,如确定数据集的主要结构、绘制散点图等。 7.资源中提到的文件: 在提供的资源信息中,包含了两个文件,分别是pca2.m和pca.txt。其中pca2.m很可能是一个Matlab脚本文件,包含了用户编写的代码,这段代码中可能包含有对princomp函数的调用。pca.txt可能是一个文本文件,包含了关于PCA的说明、示例代码或者使用说明。在进行Matlab版本更新时,用户需要打开并检查这些文件,确保princomp函数已经被正确替换为pca函数。 8.未来版本更新的预期: 随着技术的发展和用户需求的变化,Matlab软件会不断地进行更新。开发者可能会引入新的函数或改进现有函数。用户在使用过程中应当留意官方发布的更新日志和文档,以便及时了解新的功能特性,特别是当涉及到代码库中函数名或功能发生变化时,应及时进行调整,以保证代码的持续可用性和稳定性。

优化这段代码 for j in n_components: estimator = PCA(n_components=j,random_state=42) pca_X_train = estimator.fit_transform(X_standard) pca_X_test = estimator.transform(X_standard_test) cvx = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) cost = [-5, -3, -1, 1, 3, 5, 7, 9, 11, 13, 15] gam = [3, 1, -1, -3, -5, -7, -9, -11, -13, -15] parameters =[{'kernel': ['rbf'], 'C': [2x for x in cost],'gamma':[2x for x in gam]}] svc_grid_search=GridSearchCV(estimator=SVC(random_state=42), param_grid=parameters,cv=cvx,scoring=scoring,verbose=0) svc_grid_search.fit(pca_X_train, train_y) param_grid = {'penalty':['l1', 'l2'], "C":[0.00001,0.0001,0.001, 0.01, 0.1, 1, 10, 100, 1000], "solver":["newton-cg", "lbfgs","liblinear","sag","saga"] # "algorithm":['auto', 'ball_tree', 'kd_tree', 'brute'] } LR_grid = LogisticRegression(max_iter=1000, random_state=42) LR_grid_search = GridSearchCV(LR_grid, param_grid=param_grid, cv=cvx ,scoring=scoring,n_jobs=10,verbose=0) LR_grid_search.fit(pca_X_train, train_y) estimators = [ ('lr', LR_grid_search.best_estimator_), ('svc', svc_grid_search.best_estimator_), ] clf = StackingClassifier(estimators=estimators, final_estimator=LinearSVC(C=5, random_state=42),n_jobs=10,verbose=0) clf.fit(pca_X_train, train_y) estimators = [ ('lr', LR_grid_search.best_estimator_), ('svc', svc_grid_search.best_estimator_), ] param_grid = {'final_estimator':[LogisticRegression(C=0.00001),LogisticRegression(C=0.0001), LogisticRegression(C=0.001),LogisticRegression(C=0.01), LogisticRegression(C=0.1),LogisticRegression(C=1), LogisticRegression(C=10),LogisticRegression(C=100), LogisticRegression(C=1000)]} Stacking_grid =StackingClassifier(estimators=estimators,) Stacking_grid_search = GridSearchCV(Stacking_grid, param_grid=param_grid, cv=cvx, scoring=scoring,n_jobs=10,verbose=0) Stacking_grid_search.fit(pca_X_train, train_y) var = Stacking_grid_search.best_estimator_ train_pre_y = cross_val_predict(Stacking_grid_search.best_estimator_, pca_X_train,train_y, cv=cvx) train_res1=get_measures_gridloo(train_y,train_pre_y) test_pre_y = Stacking_grid_search.predict(pca_X_test) test_res1=get_measures_gridloo(test_y,test_pre_y) best_pca_train_aucs.append(train_res1.loc[:,"AUC"]) best_pca_test_aucs.append(test_res1.loc[:,"AUC"]) best_pca_train_scores.append(train_res1) best_pca_test_scores.append(test_res1) train_aucs.append(np.max(best_pca_train_aucs)) test_aucs.append(best_pca_test_aucs[np.argmax(best_pca_train_aucs)].item()) train_scores.append(best_pca_train_scores[np.argmax(best_pca_train_aucs)]) test_scores.append(best_pca_test_scores[np.argmax(best_pca_train_aucs)]) pca_comp.append(n_components[np.argmax(best_pca_train_aucs)]) print("n_components:") print(n_components[np.argmax(best_pca_train_aucs)])

2023-07-14 上传

import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from mpl_toolkits.mplot3d import Axes3D from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler data=pd.read_csv('H:/analysis_results/mean_HN.csv') data.head() x=data.iloc[:,1:7] y=data.iloc[:,6] scaler=StandardScaler() scaler.fit(x) x_scaler=scaler.transform(x) print(x_scaler.shape) pca=PCA(n_components=3) x_pca=pca.fit_transform(x_scaler) print(x_pca.shape) #查看各个主成分对应的方差大小和占全部方差的比例 #可以看到前2个主成分已经解释了样本分布的90%的差异了 print('explained_variance_:',pca.explained_variance_) print('explained_variance_ratio_:',pca.explained_variance_ratio_) print('total explained variance ratio of first 6 principal components:',sum(pca.explained_variance_ratio_)) #将分析的结果保存成字典 result={ 'explained_variance_:',pca.explained_variance_, 'explained_variance_ratio_:',pca.explained_variance_ratio_, 'total explained variance ratio:',np.sum(pca.explained_variance_ratio_)} df=pd.DataFrame.from_dict(result,orient='index',columns=['value']) df.to_csv('H:/analysis_results/Cluster analysis/pca_explained_variance_HN.csv') #可视化各个主成分贡献的方差 #fig1=plt.figure(figsize=(10,10)) #plt.rcParams['figure.dpi'] = 300#设置像素参数值 plt.rcParams['path.simplify'] = False#禁用抗锯齿效果 plt.figure() plt.plot(np.arange(1,4),pca.explained_variance_,color='blue', linestyle='-',linewidth=2) plt.xticks(np.arange(1, 4, 1))#修改X轴间隔为1 plt.title('PCA_plot_HN') plt.xlabel('components_n',fontsize=16) plt.ylabel('explained_variance_',fontsize=16) #plt.savefig('H:/analysis_results/Cluster analysis/pca_explained_variance_HN.png') plt.show()报错'numpy.float64' object is not iterable,如何修改

2023-06-10 上传
2023-05-10 上传