1. Giới thiệu
Dimensionality Reduction (giảm chiều dữ liệu), như đã có được đề cập một vài ba lần trong blog, là trong những kỹ thuật đặc biệt quan trọng trong Machine Learning. Các feature vectors trong những bài toán thực tế rất có thể có số chiều siêu lớn, tới vài nghìn. Không tính ra, con số các điểm tài liệu cũng thường hết sức lớn. Nếu thực hiện lưu trữ và giám sát và đo lường trực tiếp trên tài liệu có số độ cao này thì sẽ chạm mặt khó khăn lẫn cả về việc lưu trữ và vận tốc tính toán. Bởi vậy, giảm số chiều dữ liệu là 1 trong bước đặc biệt trong nhiều bài bác toán. Đây cũng được coi là một cách thức nén dữ liệu.
Bạn đang xem: Sử dụng thuật toán Principal Component Regression để dự đoán giá
Dimensionality Reduction, nói một cách đối kháng giản, là việc đi kiếm một hàm số, hàm số này đem đầu vào là một trong những điểm dữ liệu ban sơ (mathbfx in mathbbR^D) với (D) siêu lớn, và tạo ra một điểm tài liệu mới (mathbfz in mathbbR^K) có số chiều (K
Nếu bạn phải ôn tập lại những kiến thức về hệ chủ quyền tuyến tính, kỳ vọng, phương sai, ma trận hiệp phương sai, chúng ta cũng có thể đọc Mục 2.
Nếu bạn có nhu cầu hiểu mối cung cấp gốc, ý tưởng phát minh đứng sau PCA, nguyên nhân PCA lại được triển khai như vậy, bạn có thể tìm được nghỉ ngơi Mục 3.
Nếu bạn không thích đi sâu vào toán mà chỉ cần hiểu các bước thực hiện nay PCA, bạn có thể tới ngay Mục 4.
Nếu bạn không thích hiểu quá trình thực hiện mà lại chỉ muốn biết hàm số thực hiện PCA, một vài áp dụng của PCA, và rất có thể thêm những phần mở rộng của PCA, bạn cũng có thể thấy PCA phần 2 gồm ích, dự tính được ra mắt tiếp sau đây một tuần.
Nếu tôi là các bạn, tôi đã đọc không còn cả bài.
Trước lúc đi vào cụ thể của PCA, chúng ta cùng điểm lại một chút về Đại số tuyến tính cùng Thống kê.
2. Một chút ít toán
2.1. Norm 2 của ma trận
Chúng ta vẫn thường xuyên nhắc không ít tới norm cho vector nhưng không thực sự làm việc nhiều với norm của ma trận (ngoài Frobenius norm). Trong mục này, chúng ta sẽ có tác dụng quen với cùng 1 lớp các norm cho ma trận được định nghĩa dựa vào norm của vector. Lớp những norms này có cách gọi khác là Induced Norms.
Giả sử hàm số (||mathbfx||_alpha) là một norm ngẫu nhiên của vector (mathbfx). Ứng với norm này, khái niệm norm khớp ứng cho ma trận (mathbfA):<||mathbfA||_alpha = max_mathbfx frac_alpha_alpha>
chú ý rằng ma trận (mathbfA) có thể không vuông cùng số cột của nó bằng với số chiều của (mathbfx). Như vậy, bạn dạng thân việc giám sát và đo lường norm của ma trận là việc giải một vấn đề tối ưu. Chăm chú rằng hàm buổi tối ưu gồm cả tử số và chủng loại số là những norm bên trên vectors.
Chúng ta đang quan tâm nhiều hơn tới norm 2. Norm 2 của ma trận được định nghĩa là:<||mathbfA||_2 = max_mathbfx frac_2mathbfx ~~~ (1)>
Nhận thấy rằng nếu (mathbfx) là nghiệm của việc tối ưu ((1)) thì (kmathbfx) cũng là nghiệm với (k) là một trong những thực khác không bất kỳ. Ko mất tính tổng quát, ta hoàn toàn có thể giả sử chủng loại số bởi 1. Khi đó, việc tối ưu ((1)) rất có thể được viết dưới dạng:<||mathbfA||_2 = max_ ||mathbfAx||_2 ~~~ (2)>Nói giải pháp khác, ta cần đi tìm (mathbfx) sao cho:<egineqnarraymathbfx &=& extargmax_mathbfx ||mathbfAx||_2^2 và ewline exts.t.: && ||mathbfx||_2^2 = 1 & (3)endeqnarray>Ở đây, những norm 2 đã được bình phương lên để tránh dấu căn bậc hai. Câu hỏi ((3)) hoàn toàn có thể được giải bằng phương thức nhân tử Lagrange bởi ràng buộc là một trong phương trình.
Lagrangian của việc ((3)) là:
Nghiệm của câu hỏi ((3)) đang thoả mãn hệ phương trình:<egineqnarrayfracpartial mathcalLpartial mathbfx &=& 2mathbfA^TmathbfAx - 2lambda mathbfx = mathbf0 và (4) ewlinefracpartial mathcalLpartial lambda &=& 1 - ||mathbfx||_2^2 = 0 và (5)endeqnarray>
Từ ((4)) ta có:
Như vậy, norm 2 của một ma trận chính là singular value lớn nhất của ma trận đó. Và nghiệm của việc ((3)) thiết yếu một là right-singular vector ứng với singular value đó.
Với trình bày tương tự, bạn có thể suy ra rằng bài xích toán:
có nghiệm là vector riêng ứng với trị riêng nhỏ dại nhất của (mathbfA^TmathbfA). Lúc đó, hàm số đạt giá chỉ trị bé dại nhất bởi chính trị riêng bé dại nhất này.
2.2. Biễu diễn vector trong các hệ cơ sở khác nhau
Trong không gian (D) chiều , toạ độ của từng điểm được xác định dựa bên trên một hệ toạ độ làm sao đó. Ở các hệ toạ độ khác nhau, phân biệt là toạ độ của từng điểm cũng khác nhau.
Tập hợp các vector (mathbfe_1, dots, mathbfe_D) mà mỗi vector (mathbfe_d) bao gồm đúng một trong những phần tử không giống 0 ngơi nghỉ thành phần thiết bị (d) và bộ phận đó bởi 1, được gọi là hệ cơ sở đơn vị (hoặc hệ đối chọi vị) trong không khí (D) chiều. Nếu như xếp những vector (mathbfe_d, d = 1, 2, dots, D) theo như đúng thứ trường đoản cú đó, ta sẽ được ma trận đơn vị chức năng (D) chiều.
Mỗi vector cột (mathbfx =
Giả sử có một hệ cửa hàng khác (mathbfu_1, mathbfu_2, dots, mathbfu_D) (các vector này chủ quyền tuyến tính), vậy thì màn biểu diễn của vector (mathbfx) vào hệ cửa hàng mới này có dạng:
(mathbfU) là ma trận nhưng mà cột vật dụng (d) của nó chính là vector (mathbfu_d). Dịp này, vector (mathbfy) chính là biểu diễn của (mathbfx) trong hệ cơ sở mới. Bộ những số (y_d, d = 1, 2, dots, D) là duy nhất vì chưng (mathbfy) rất có thể tính được bằng:
Trong các ma trận nhập vai trò như hệ đại lý (mathbfU), những ma trận trực giao, tức (mathbfU^TmathbfU = mathbfI), được quan tâm nhiều hơn nữa vì nghịch đảo của chúng chính là chuyển vị của chúng:
Có thể phân biệt rằng vector (mathbf0) được biểu diễn giống hệt trong hồ hết hệ cơ sở.Hình 1 dưới đấy là 1 lấy ví dụ như về bài toán chuyển hệ cơ sở:
IntroductionVới kỷ nguyên dữ liệu như hiện nay, một tập tài liệu high-dimension (đa chiều) với hàng ngàn feature hay cột đang trở thành điều không thật xa lạ. High-dimension data mở phía cho nhiều cách thức xử lý các bài toán phức hợp trong thực tế, rất có thể kể đến dự đoán cấu trúc protein tương quan COVID-19, so với hình hình ảnh MEG scan não, v.v. Mặc dù nhiên, một tập tài liệu high-dimension lại hay chứa những feature nhát (không góp sức nhiều vào kết quả) dẫn đến việc giảm tính năng của tế bào hình. Và việc lựa lựa chọn trong không ít feature để lựa chọn ra feature có ảnh hưởng lớn đến hiệu quả cũng trở nên khó khăn hơn.
Một phương pháp thường được vận dụng là kỹ thuật dimensional reduction (hay giảm chiều dữ liệu


Trong đó giải pháp thứ nhì thường phân chia thành phương thức linear và non-linear (hay manifold learning)
1. Feature Selection + Elimination
Phương pháp dễ dàng nắm bắt và tiến hành nhất. Một vài phương pháp phổ trở thành thường được dùng rất có thể kể đến như
Missing values ratio: những cột giỏi feature thiếu những giá trị sẽ đa số không góp sức vào quy mô machine learning. Bởi vậy, việc chọn feature bỏ có thể dựa trên threshold tỉ lệ cực hiếm missing của feature đó. Cực hiếm threshold càng cao thì độ reduction càng lớn.import pandas as pddf = pd.read_csv("ANSUR.csv")missing_values=df.isnum().sum()/len(def)*100ratios =
Frame.from_records(norm, columns=df.columns)corr_matrix = df_norm.corr().abs() mask = np.triu(np.ones_like(corr_matrix, dtype=bool))tri_df = corr_matrix.mask(mask)results = for i in np.linspace(0.85,0.99,15): i = round(i,2) to_drop =
Forest
Classifierfrom sklearn.metrics import accuracy_scoredef rfc_test_accuracy(X, y): """ Function which takes the predictor and target variables & returns the kiểm tra accuracy of the model. """ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) RFC = Random
Forest
Classifier(random_state=123) RFC.fit(X_train,y_train) test_accuracy = accuracy_score(y_test, RFC.predict(X_test)) return test_accuracy def rfc_mean(X,y,trails=20): """ Print the mean value of Random forest classifier for n trails. """ result =
Forest
Classifierfrom sklearn.metrics import accuracy_scoreimport matplotlib.pyplot as pltdef MAN_RFE(X,df,trails=20): accuracy = <> for i in range(df.shape<1>,1,-1): X_train, X_test, y_train, y_test = train_test_split(X, df<"Component">, test_size=0.2, random_state=123) for j in range(trails): rfe = Random
Forest
Classifier() rfe.fit(X_train, y_train) acc = accuracy_score(y_test, rfe.predict(X_test)) accuracy.append(acc) feat_import = dict(zip(X.columns, rfe.feature_importances_)) X = X.drop(min(feat_import, key=feat_import.get), axis=1) return list(np.array(accuracy).reshape(100,20)) df_no_com = df.drop("Component",axis=1)accuracy = MAN_RFE(df_no_com, df)plt.figure(figsize=(20, 6))plt.boxplot(accuracy, sym="")plt.ylim(0.5,0.7)plt.xticks(rotation = 90)plt.xlabel("Number of features removed")plt.ylabel("Accuracy")plt.show()Có thể tham khảo ví dụ hơn trên đây
from sklearn.feature_selection import f_regressionf_val, p_val = f_regression(X_train, y_train)hoặc mlxtend
from mlxtend.feature_selection import Sequential
Feature
Selector as sfsfrom sklearn.linear_model import Linear
Regressionlreg = Linear
Regression()sfs1 = sfs(lreg, k_features=3, forward=True, verbose=2, scoring="neg_mean_squared_error")sfs1 = sfs1.fit(X, y)Lưu ý là cả Backward Feature Elimination với Forward Feature Selection thường rất tốn thời gian và tài nguyên tính toán. Nên cách thức chỉ hay chỉ áp dụng với những tập dữ liệu nhỏ, hiếm hoi feature.
Ngoài ra tủ sách scikit-learn cũng support một vài ba method tự động hóa cho để chọn các feature tốt như Univariate Selection, recursive feature elimination...
Với Feature Extraction, hãy thực hiện tập dữ liệu lớn hơn chút Fashion MNIST để thử nghiệm. Tập dữ liệu này bao hàm 70,000 hình ảnh với 60,000 hình ảnh train với 10,000 hình ảnh test.
2. Cách thức Linear
Với Feature extraction, bộ tài liệu Fashion
MNIST được áp dụng để visualize giỏi hơn. Có thể data này không thể lạ lẫm với hoàn toàn rất có thể tìm thấy trên google. Tuy vậy mình cũng để 1 file links drive nhằm tiện cho việc sử dụng với colab rộng nếu chúng ta cần. Here
import pandas as pdimport numpy as npfrom glob import globimport cv2# Load dataimages =
Frame(image,columns=feat_cols)df<"label"> = train<"label"># Factor Analysisfrom sklearn.decomposition import Factor
Analysis
FA = Factor
Analysis(n_components = 3).fit_transform(df
PCA rất có thể hiểu là 1 quy trình thống kê trong số đó phép biến đổi trực giao tập dữ liệu nnn chiều thành nnn chiều principal component.PCA là thuật toán sút chiều đường tính bằng cách biến đổi các biến đối sánh (p) trở thành các biến k không ràng buộc (với k
Tham khảo thêm bài này để hiểu kỹ hơn về PCA. Nhưng nhìn bao quát tóm tắt lại ý bao gồm PCA:
Một principal component là tổng hợp tuyến tính của những biếnCác pricipal component được sinh sản thành với mục tiêu như sau
Principal component (đầu) cố gắng biểu diễn phương sai lớn nhất của dữ liệu. Vào đó xác định hướng biến hóa lớn tuyệt nhất của dữ liệu (aka dữ liệu tác động nhất). đổi khác càng lớn thì lượng thông tin component màn biểu diễn được càng nhiều.Principal component tiếp theo sau sẽ cho thấy phương sai còn lại của tập dữ liệu mà không tương quan với PC1 (hay correlation bằng 0) và do thế, vị trí hướng của 2 PC đã trực giao (hình ảnh).Principal component thứ ba và tiếp nối tương tự

from sklearn.decomposition import PCApca = PCA(n_components=4)pca_result = pca.fit_transform(df
import seaborn as snsplt.style.use("fivethirtyeight")fig, axarr = plt.subplots(2, 2, figsize=(12, 8))sns.heatmap(pca.components_<0, :>.reshape(28, 84), ax=axarr<0><0>, cmap="gray_r")sns.heatmap(pca.components_<1, :>.reshape(28, 84), ax=axarr<0><1>, cmap="gray_r")sns.heatmap(pca.components_<2, :>.reshape(28, 84), ax=axarr<1><0>, cmap="gray_r")sns.heatmap(pca.components_<3, :>.reshape(28, 84), ax=axarr<1><1>, cmap="gray_r")axarr<0><0>.set_title("0:.2f% Explained Variance".format(pca.explained_variance_ratio_<0>*100),fontsize=12)axarr<0><1>.set_title("0:.2f% Explained Variance".format(pca.explained_variance_ratio_<1>*100),fontsize=12)axarr<1><0>.set_title("0:.2f% Explained Variance".format(pca.explained_variance_ratio_<2>*100),fontsize=12)axarr<1><1>.set_title("0:.2f% Explained Variance".format(pca.explained_variance_ratio_<3>*100),fontsize=12)axarr<0><0>.set_aspect("equal")axarr<0><1>.set_aspect("equal")axarr<1><0>.set_aspect("equal")axarr<1><1>.set_aspect("equal")plt.suptitle("4-Component PCA")


from sklearn.decomposition import Truncated
SVD svd = Truncated
SVD(n_components=3, random_state=226).fit_transform(df
Independent Component Analysis: ICA cách thức này dựa trên lý thuyết truyền ti cùng cũng là 1 trong những một phương thức rất phổ biến. PCA đang tìm những yếu tố ít tương quan trong khi ICA chú trọng vào những biến độc lập
from sklearn.decomposition import Fast
ICA ICA = Fast
ICA(n_components=3, random_state=12) X=ICA.fit_transform(df
3. Manifold learning tốt non-linear method
Một phía tiếp cận khác theo phi con đường tính (hay dùng projection-phương pháp chiếu) là manifold learning. Có thể hiểu đơn giản là tận dụng công năng hình học nhằm chiếu những điểm xuống chiều không gian thấp hơn mà vẫn duy trì được đặc thù của dữ liệu.

from sklearn import manifold trans_data = manifold.Isomap(n_neighbors=5, n_components=3, n_jobs=-1).fit_transform(df
from sklearn.manifold import TSNE tsne = TSNE(n_components=3, n_iter=300).fit_transform(df
NN. Tiếp đến tạo ra các vector không nhiều chiều hơn để "copy" lại các trọng số làm việc trên. Chú ý chung cách thức này có thể phát hiện được nhiều feature hơn phương pháp tuyến tính thông thường, và tác dụng hơn các phương pháp khác.
from sklearn.manifold import Locally
Linear
Embeddingembedding = Locally
Linear
Embedding(n_components=3).fit_transform(df
Dùng Hessian matrix thì cũng thực hiện Locally
Linear
Embeg dding của sklearn, với nhớ truyền tham số method="hessian" và tham số n_neighbors phải to hơn
from sklearn.manifold import Locally
Linear
Embedding
Heissian
Eigenmapping = Locally
Linear
Embedding(eigen_solver="dense", n_components=3, n_neighbors=10,method="hessian", random_state=226).fit_transform(df
Eigenmapping<:,0>, Heissian
Eigenmapping<:,1>)plt.scatter(Heissian
Eigenmapping<:,1>, Heissian
Eigenmapping<:,2>)plt.scatter(Heissian
Eigenmapping<:,2>, Heissian
Eigenmapping<:,0>)
from sklearn.manifold import Spectral
Embeddingspectral
Embedding = Spectral
Embedding(n_components=3, random_state=226).fit_transform(df
Embedding<:,0>, spectral
Embedding<:,1>)plt.scatter(spectral
Embedding<:,1>, spectral
Embedding<:,2>)plt.scatter(spectral
Embedding<:,2>, spectral
Embedding<:,0>)
from sklearn.manifold import MDSmds = MDS(n_components=3, random_state=226).fit_transform(df
Không có phương pháp nào là "bá đạo" cả, việc chọn method tương xứng phụ thuộc rất nhiều yếu tố, đặc thù tập dữ liệu và phối hợp giữa các kỹ thuật khác nhau, từ đó tìm ra phương thức tốt nhất.
Và ngoài những điều trên, các kỹ thuật Dimensionality Reduction còn một vài giảm bớt chung có thể kể cho như: mất mát tài liệu khi bớt số chiều, trong nghệ thuật PCA, đôi lúc không principal components quan trọng lại không được rõ ràng...
Xem thêm:
Code Colab tham khảo.
Trên đây là những phần mình tò mò và xem tư vấn được.Xin cám ơn các bạn đã quan tâm và theo dõi bài viết ^.^
References<1> https://towardsdatascience.com/11-dimensionality-reduction-techniques-you-should-know-in-2021-dcb9500d388b
<2> https://towardsdatascience.com/dimensionality-reduction-for-machine-learning-80a46c2ebb7e
<3> https://machinelearningmastery.com/dimensionality-reduction-for-machine-learning/
<4> https://towardsdatascience.com/techniques-for-dimensionality-reduction-927a10135356
<5> https://www.analyticsvidhya.com/blog/2018/08/dimensionality-reduction-techniques-python/
<6> https://gist.github.com/Amitdb123/1e191a36d1f36b7bdfcf13375e63694b#file-dimensionality_reduction-py
<7> https://scikit-learn.org/stable/auto_examples/manifold/plot_compare_methods.html#sphx-glr-auto-examples-manifold-plot-compare-methods-py
<8> https://www.kaggle.com/mtax687/explorations-of-fashion-mnist-dataset
<9> https://www.analyticsvidhya.com/blog/2017/05/comprehensive-guide-to-linear-algebra/