高光谱数据降维与SVM分类的PCA方法实现

版权申诉
0 下载量 135 浏览量 更新于2024-10-14 收藏 8.14MB RAR 举报
资源摘要信息:"PCA_SVM_HSI_hsi_historysai_HSI降维_pca高光谱读取_pca_源码.rar" ### 标题分析 标题中的知识点涵盖了几个关键的术语:PCA(主成分分析)、SVM(支持向量机)、HSI(高光谱影像)、降维、高光谱读取。从标题来看,这个资源很可能是一个技术代码包,专注于使用PCA方法进行HSI降维,并结合SVM进行分类或者回归分析,同时提供了高光谱数据读取的功能。 ### 描述分析 描述与标题一致,说明该资源的核心内容是围绕PCA和SVM技术在高光谱影像处理领域中的应用。描述强调了“HSI降维”和“高光谱读取”,意味着这个资源可能包含如何使用PCA技术对高光谱数据进行降维处理,以及如何读取和处理高光谱数据集的源代码。 ### 标签分析 由于给定信息中标签为空,我们无法从中获取更多关于资源的分类或相关关键字信息。因此,我们需要依赖标题和文件名来深入分析资源内容。 ### 压缩包文件名称列表分析 文件名称列表仅提供了一个名称 "PCA_SVM_HSI-master",这表明该压缩包内含的文件是围绕一个主项目或主程序展开的,项目名称为“PCA_SVM_HSI”,并且从“-master”后缀可以推断这是一个主分支或者版本的源代码。 ### 知识点详细说明 #### PCA(主成分分析) 主成分分析是一种统计方法,它利用正交变换将一组可能相关的变量转换为一组线性不相关的变量,这组新的变量称为主成分。PCA常用于降维,即减少数据集中的变量数量,同时尽量保留原始数据集的变异性。 在高光谱影像处理中,PCA可以用来减少数据集的维度,即从高光谱影像中提取主要的特征信息,同时去除冗余数据,使得处理过程更加高效。 #### SVM(支持向量机) 支持向量机是一种监督学习算法,用于分类和回归分析。在分类问题中,SVM的目标是在特征空间中寻找一个超平面,这个超平面可以最好地划分不同类别的数据点,使得两个类别之间的边界最大化。 在处理高光谱数据时,SVM可以用于分类,比如识别和区分不同的地物类型。通过将PCA降维后的数据作为输入,SVM可以更有效地进行训练和分类。 #### HSI(高光谱影像) 高光谱影像是一种包含了从可见光到近红外甚至中红外波段的连续光谱信息的遥感影像。与传统的多光谱影像相比,高光谱影像可以提供更详细的光谱信息,因此具有更高的光谱分辨率。 高光谱数据在遥感、地质勘探、农业、环境监测等领域有广泛应用,但由于其数据量巨大,通常需要进行降维处理以便于分析和处理。 #### 降维 在机器学习和数据挖掘中,降维是减少随机变量或特征数量的过程,同时尽量保留原始数据的重要信息。PCA是实现降维的一种常用方法。降维可以减少计算复杂度,提高模型的可解释性,并可能提高模型的性能。 #### 高光谱读取 读取高光谱数据意味着从各种存储介质中提取高光谱数据集,这些数据集通常是多维的,并且每个维度代表一个特定的光谱波段。正确读取高光谱数据是处理和分析这些数据的基础步骤。 ### 结论 综合以上分析,这个资源包很可能包含实现PCA降维和SVM分类器的源代码,专门针对处理高光谱数据集设计。开发者可以利用这个资源包来对高光谱数据进行有效的特征提取和分类分析,这在遥感图像分析和处理中具有重要的应用价值。

优化这段代码 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 上传

把这段代码的PCA换成LDA: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=1) 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) 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-22 上传

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(),想要将得出的结果value为3个标签PC1,PC2,PC3,如何修改

2023-06-10 上传