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ó:Điều này suy ra rằng (lambda) là một trị riêng rẽ của (mathbfA^TmathbfA) cùng (mathbfx) là một vector riêng ứng với trị riêng đó. Liên tiếp nhân nhị vế của ((6)) với (mathbfx^T) vào bên trái, ta có:Nhận thấy rằng vế trái chính là (||mathbfAx||_2^2) chính là hàm phương châm trong ((3)). Vậy hàm phương châm đạt giá trị lớn nhất khi (lambda) đạt giá bán trị bự nhất. Nói giải pháp khác, (lambda) đó là trị riêng lớn nhất của (mathbfA^TmathbfA) hay chính là singular value lớn số 1 của ma trận (mathbfA).

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 = in mathbbR^D), màn trình diễn của nó trong hệ đơn vị là:

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:với chăm chú rằng (mathbfU) là ma trận khả nghịch vì những cột của nó độc lập tuyến tính.

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:

Khi đó, (mathbfy) vào ((7)) có thể được tính một phương pháp nhanh chóng:

từ đó suy ra: (y_i = mathbfx^T mathbfu_i = mathbfu_i^Tmathbfx, i= 1, 2, dots, D).

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ở:

Introduction

Vớ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 = print( > 0>)variable = < >for i in range(df.columns.shape<0>): if a40: #setting the threshold as 40% variable.append(variables)new_data = dfLow-variance filter: Feature gồm variance (phương sai) thấp sẽ không còn đóng góp các trong mô hình. Vậy tương tự cách trên, nếu bên dưới threshold nhất thiết thì sẽ vứt bỏ feature đó.from sklearn.preprocessing import normalizevariance = df.var()variable = < >for i in range(0,len(variance)): if variance>=0.006: #setting the threshold as 1% variable.append(columns) new_data = dfHigh-correlation filter các feature nếu bao gồm sự tương quan có thể được coi tương đồng trong mô hình. Điều này khiến việc tồn tại các feature như là nhau không nên thiết. Nếu giữ lại lại nhiều feature tương quan sẽ bớt hiệu năng mô hình đáng đề cập (đặc biệt các mô hình linear xuất xắc logistic regression).import numpy as npfrom sklearn.preprocessing import normalizeimport pandas as pdnorm = normalize(df)df_norm = pd.Data
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 = >= i)> reduce_high_corr_df = df.drop(to_drop, axis=1) reduce_high_corr_df = reduce_high_corr_df.drop("Component", axis=1) mean = rfc_mean(reduce_high_corr_df, df<"Component">) results = round(mean,4) high_acc = max(results, key=results.get)print(results)print("Correlation coefficient with the highest predictive accuracy ", high_acc)to_drop = >= 0.88)>print("Number of feature"s dropped ",len(to_drop))Random Forest: cách thức này cũng tương đối phổ cập và gồm ích. Việc áp dụng decision tree có thể tận dụng ưu thế thống kê học nhằm tìm ra feature đựng được nhiều thông tin để giữ gìn nhất. Thuật toán random forest (sklearn) chỉ nhận giá trị số, nên cần phải hot encoding.from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import Random
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 = mean = np.array(result).mean() return mean print("Predictive accuracy of base random forrest classifier ",round(rfc_mean(df.drop("Component", axis=1),df<"Component">),3))Backwards-feature elimination: Tiếp cận hướng đứng đầu down, bước đầu với toàn bộ feature, và loại trừ từng feature cho tới hết.from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import Random
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

Forward Feature Selection: Ngược lại phương thức trước, xuất phát điểm từ 1 feature và tăng dần các feature cho tới khi quy mô đạt giá chỉ trị buổi tối ưu.

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

Factor Analysis: những biến được gộp thành nhóm bình thường theo correlation. Mỗi team này được xem như là một factor, với số lượng factor nhỏ tuổi hơn số chiều nơi bắt đầu của tập dữ liệu. Tuy vậy điểm trừ là hơi nặng nề quan gần cạnh sự tách bóc biệt giữa những factor lúc visualize

import pandas as pdimport numpy as npfrom glob import globimport cv2# Load dataimages = images = np.array(images)image = <>for i in range(0,60000): img = images.flatten() image.append(img)image = np.array(image)train = pd.read_csv("train.csv") # Give the complete path of your train.csv filefeat_cols = < "pixel"+str(i) for i in range(image.shape<1>) >df = pd.Data
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.values)# Visualize%matplotlib inlineimport matplotlib.pyplot as pltplt.figure(figsize=(12,8))plt.title("Factor Analysis Components")plt.scatter(FA<:,0>, FA<:,1>)plt.scatter(FA<:,1>, FA<:,2>)plt.scatter(FA<:,2>,FA<:,0>)

*

Principal component analysis: aka PCA. Đây là một trong những thuật toán unsupervised giúp giảm chiều dữ liệu và vẫn giữ được không ít thông tin nhất bao gồm thể. Thường xuyên được áp dụng với mẫu mã dữ liên tục: PCA xoay và chiếu điểm dữ liệu theo chiều tăng của phương sai
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ến
Cá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.values)plt.plot(range(4), pca.explained_variance_ratio_)plt.plot(range(4), np.cumsum(pca.explained_variance_ratio_))plt.title("Component-wise và Cumulative Explained Variance")

*

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")

*

Linear Discriminatory Analysis: nghệ thuật supervised, mục tiêu nhắm đến việc giữ các nhất đặc thù quyết định phân loại của những biến phụ thuộc. Thuật toán LDA giám sát và đo lường khả năng phân biệt các lớp, tiếp nối tính khoảng cách giữa các mẫu của từng lớp cùng với trung bình. ở đầu cuối đưa tập tài liệu về chiều nhỏ tuổi hơn.

*

Singular Value Composition:. SVD trích xuất feature đặc biệt nhất ngoài tập dữ liệu. Phương thức này khá thông dụng vì dựa trên quy mô toán học con đường tính. Nhìn chung SVD đang tận dụng trị riêng và vector riêng để xác minh và tách các biến thành 3 ma trận cùng với mục đích loại bỏ các feature ít quan trọng đặc biệt trong tập dữ liệu.

from sklearn.decomposition import Truncated
SVD svd = Truncated
SVD(n_components=3, random_state=226).fit_transform(df.values)plt.figure(figsize=(12,8))plt.title("SVD Components")plt.scatter(svd<:,0>, svd<:,1>)plt.scatter(svd<:,1>, svd<:,2>)plt.scatter(svd<:,2>,svd<:,0>)

*

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.values)plt.figure(figsize=(12,8))plt.title("ICA Components")plt.scatter(X<:,0>, X<:,1>)plt.scatter(X<:,1>, X<:,2>)plt.scatter(X<:,2>, X<:,0>)

*

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.

*

Isometric Feature Mapping (Isomap): cách thức này bảo toàn được mối tương tác của tập dữ liệu bằng cách tạo ra tập tài liệu embedded. Đầu tiên, thuật toán tạo thành mạng lạm cận, cầu lượng khoảng cách trắc địa, khoảng cách ngắn độc nhất vô nhị giữa hai điểm trên mặt phẳng cong, giữa tất cả các điểm. Cùng cuối cùng, bởi việc áp dụng phân chảy trị riêng biệt của ma trận khoảng cách Geodesic, tập tài liệu với số chiều nhỏ hơn được tạo ra ra

from sklearn import manifold trans_data = manifold.Isomap(n_neighbors=5, n_components=3, n_jobs=-1).fit_transform(df<:6000>.values)plt.figure(figsize=(12,8))plt.title("Decomposition using ISOMAP")plt.scatter(trans_data<:,0>, trans_data<:,1>)plt.scatter(trans_data<:,1>, trans_data<:,2>)plt.scatter(trans_data<:,2>, trans_data<:,0>)

*

t-Distributed Stochastic Neighbour (t-SNE): cực kỳ nhạy với các cấu trúc local. T-SNE thường xuyên được áp dụng với mục đích visualize dữ liệu nhằm mục đích giúp gọi được thuộc tính kim chỉ nan của tập dữ liệu. Mặc dù đây cũng là phương pháp đòi hỏi hiệu năng đo lường và tính toán cao cùng cũng rất cần phải áp dụng những kỹ thuật khác ví như missing values ratio hoặc scale feature.

from sklearn.manifold import TSNE tsne = TSNE(n_components=3, n_iter=300).fit_transform(df<:6000>.values)plt.figure(figsize=(12,8))plt.title("t-SNE components")plt.scatter(tsne<:,0>, tsne<:,1>)plt.scatter(tsne<:,1>, tsne<:,2>)plt.scatter(tsne<:,2>, tsne<:,0>)

*

Locally linear embedding (LLE). Cũng với ý tưởng giống như Isomap, mà lại LLE search k-NN của các điểm; cầu lượng mỗi điểm vector dữ liệu như là tổng hợp của k
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<:6000>.values)plt.figure(figsize=(12,8))plt.title("Local Linear Embeđing")plt.scatter(embedding<:,0>, embedding<:,1>)plt.scatter(embedding<:,1>, embedding<:,2>)plt.scatter(embedding<:,2>, embedding<:,0>)

*

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 là ok.

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<:6000>.values)plt.figure(figsize=(12,8))plt.title("Heissian Eigenmapping")plt.scatter(Heissian
Eigenmapping<:,0>, Heissian
Eigenmapping<:,1>)plt.scatter(Heissian
Eigenmapping<:,1>, Heissian
Eigenmapping<:,2>)plt.scatter(Heissian
Eigenmapping<:,2>, Heissian
Eigenmapping<:,0>)

*

Spectral Embedding: thực hiện kỹ thụât spectral (phổ) để mapping tài liệu xuống chiều tốt hơn, ưu tiên những điểm gần nhau hơn là tuyến tính cận nhau.

from sklearn.manifold import Spectral
Embeddingspectral
Embedding = Spectral
Embedding(n_components=3, random_state=226).fit_transform(df<:6000>.values)plt.figure(figsize=(12,8))plt.title("Spectral Embedding")plt.scatter(spectral
Embedding<:,0>, spectral
Embedding<:,1>)plt.scatter(spectral
Embedding<:,1>, spectral
Embedding<:,2>)plt.scatter(spectral
Embedding<:,2>, spectral
Embedding<:,0>)

*

Multidimensional scaling (MDS):

from sklearn.manifold import MDSmds = MDS(n_components=3, random_state=226).fit_transform(df<:6000>.values)plt.figure(figsize=(12,8))plt.title("MDS")plt.scatter(mds<:,0>, mds<:,1>)plt.scatter(mds<:,1>, mds<:,2>)plt.scatter(mds<:,2>, mds<:,0>)

*

Summary

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/