PCA降维算法使用说明与源代码文件

版权申诉
5星 · 超过95%的资源 1 下载量 7 浏览量 更新于2024-10-04 收藏 2.22MB ZIP 举报
资源摘要信息: "PCA降维算法概述与应用" 主标题: PCA降维算法原理及应用 副标题: 理解PCA降维算法的关键概念和步骤 知识点1: 主成分分析(PCA)的定义 主成分分析是一种常用的数据降维技术,它通过正交变换将一组可能相关的变量转换为一组线性不相关的变量,这些新的变量称为主成分。PCA的目标是使得前几个主成分尽可能多地保留原始数据的变异性。 知识点2: PCA降维算法的数学基础 PCA降维算法涉及到线性代数中的概念,如协方差矩阵、特征值与特征向量、数据标准化等。它首先计算数据的协方差矩阵,然后求解协方差矩阵的特征值和特征向量,特征向量按照对应特征值大小排序,通常选择前n个最大特征值对应的特征向量作为新的坐标轴。 知识点3: 一维PCA降维过程 一维PCA降维是将数据投影到一个主成分上,这样可以将多维数据简化为一维数据,大大减少了数据的复杂性。这个过程涉及到的数据操作包括数据预处理(如中心化、标准化)、计算协方差矩阵、求解特征值和特征向量、选择最大的特征值对应的特征向量作为投影方向以及进行数据投影。 知识点4: PCA降维的优势与应用 PCA降维能够有效减少数据的维度,从而简化计算复杂度、加快算法运行速度,同时还能减少存储空间的占用。它在图像处理、模式识别、信号处理等领域被广泛应用,比如用于数据可视化、减少过拟合风险、提取有用信息等。 知识点5: 如何修改和使用PCA降维算法 用户可以根据自己的数据特征和需求来修改PCA算法的参数或步骤。例如,可以改变保留主成分的数量、调整数据预处理的方式,甚至是自定义新的投影方向和数据转换方法。此外,还有多种软件和编程语言(如Python的scikit-learn库、MATLAB等)都提供了PCA降维的实现,用户可以根据自己的使用习惯选择合适的工具。 知识点6: 常见的PCA降维使用场景 在机器学习中,PCA经常被用来作为预处理步骤,尤其是在特征数量很大时。它也有助于可视化高维数据,例如使用PCA将数据降维到二维或三维空间,从而在图表中直观展示数据结构。此外,PCA在生物信息学、金融分析等领域也有广泛应用。 知识点7: PCA降维算法的局限性 PCA降维依赖于数据的线性结构,如果数据的真实结构是非线性的,PCA可能无法有效地降维。此外,PCA降维可能会导致数据的某些重要信息丢失,尤其是当降维比例较大时。在使用PCA降维前,需要评估是否适合于当前数据和项目需求。 知识点8: PCA算法的变种及优化 为了解决PCA的一些局限性,研究人员提出了多种PCA的变体算法,如核主成分分析(KPCA)用于处理非线性数据,稀疏主成分分析(SPCA)用于处理高维稀疏数据,以及独立成分分析(ICA)等。此外,也出现了许多优化PCA算法的方法,比如基于进化算法的特征选择和降维,以及深度学习中的自编码器等。 通过以上知识点的梳理,可以看出PCA降维算法是一个功能强大且应用广泛的工具,它在解决高维数据问题时提供了一种有效的解决方案。然而,实际应用中也需要注意到它的局限性,并且在必要时考虑其它降维方法或者算法优化策略。

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

index0 = numerical_corr.sort_values(ascending=False).index 36 print(train_data_scaler[index0].corr('spearman')) 37 38 new_numerical=['V0', 'V2', 'V3', 'V4', 'V5', 'V6', 'V10','V11', 39 'V13', 'V15', 'V16', 'V18', 'V19', 'V20', 'V22','V24','V30', 'V31', 'V37'] 40 X=np.matrix(train_data_scaler[new_numerical]) 41 VIF_list=[variance_inflation_factor(X, i) for i in range(X.shape[1])] 42 VIF_list 43 44 45 pca = PCA(n_components=0.9) 46 new_train_pca_90 = pca.fit_transform(train_data_scaler.iloc[:,0:-1]) 47 new_test_pca_90 = pca.transform(test_data_scaler) 48 new_train_pca_90 = pd.DataFrame(new_train_pca_90) 49 new_test_pca_90 = pd.DataFrame(new_test_pca_90) 50 new_train_pca_90['target'] = train_data_scaler['target'] 51 new_train_pca_90.describe() 52 53 pca = PCA(n_components=0.95) 54 new_train_pca_16 = pca.fit_transform(train_data_scaler.iloc[:,0:-1]) 55 new_test_pca_16 = pca.transform(test_data_scaler) 56 new_train_pca_16 = pd.DataFrame(new_train_pca_16) 57 new_test_pca_16 = pd.DataFrame(new_test_pca_16) 58 new_train_pca_16['target'] = train_data_scaler['target'] 59 new_train_pca_16.describe() 60 61 from sklearn.ensemble import GradientBoostingRegressor 62 63 from sklearn.model_selection import learning_curve 64 from sklearn.model_selection import ShuffleSplit 65 66 new_train_pca_16 = new_train_pca_16.fillna(0) 67 train = new_train_pca_16[new_test_pca_16.columns] 68 target = new_train_pca_16['target'] 69 70 train_data,test_data,train_target,test_target=train_test_split(train,target,test_size=0.2,random_state=0) 71 72 clf = LinearRegression() 73 clf.fit(train_data, train_target) 74 score = mean_squared_error(test_target, clf.predict(test_data)) 75 print("LinearRegression: ", score) 76 77 train_score = [] 78 test_score = []解释每一句代码的意思

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