بای پلات PCA نوع خاصی از بای پلات است که با استفاده از تجزیه و تحلیل اجزای اصلی (PCA) ایجاد می شود.
در این آموزش، نحوه ترسیم یک بای پلات دو بعدی و سه بعدی را در پایتون با استفاده از Scikit-learn و PCA خواهیم آموخت.

یک بای پلات PCA در پایتون، نمودار پراکندگی امتیازات PCA و نمودارهای بارگذاری را ترکیب می کند تا نشان دهد که نقاط داده چگونه با یکدیگر ارتباط دارند.
این تجسم به تجزیه و تحلیل داده ها و یادگیری ماشین برای درک ساختار داده ها، شناسایی الگوها و مشاهده روابط بین متغیرها کمک می کند.
چگونه یک PCA 2D Biplot در پایتون بسازیم؟
برای تجسم یک Biplot دو بعدی، ابتدا باید یک نمودار بارگذاری و یک نمودار پراکنده از داده های PCA ایجاد کنید و سپس آنها را با یکدیگر ترکیب کنید.
Biplot نموداری است که نشان می دهد:
- نمودارهای پراکنده PCA مقیاس شده
- کرت های بارگیری علاوه بر این
- بردارهایی که نشان میدهند هر ویژگی چقدر بر مؤلفه اصلی تأثیر میگذارد.
لودینگ پلات چیست؟
نمودار بارگذاری PCA در پایتون به تجسم نحوه مشارکت ویژگی های اصلی به اجزای اصلی کمک می کند تا بفهمیم کدام متغیرها بیشترین تأثیر را بر داده های تبدیل شده دارند.
نمودار بارگذاری بردارهایی را نشان می دهد که از مبدا تا بارگذاری هر ویژگی شروع می شوند.
بارگذاری ها (یا وزن ها) ضرایب همبستگی بین ویژگی های اصلی و اجزای اصلی هستند.
آنها عناصر بردار ویژه را نشان می دهند.
بارهای مربعی اجزای اصلی همیشه برابر با 1 است.
با استفاده از بارگیری ها قابل دسترسی است pca.components_
.
با الهام از Renesh Bedre، من یک طرح بارگذاری ایجاد خواهم کرد تا به درک آنها کمک کنم.
چگونه یک PCA Loading Plot در پایتون بسازیم
ابتدا ضرایب همبستگی هر ویژگی / جزء اصلی را رسم می کنیم.
ایجاد چارچوب داده ضرایب همبستگی در پایتون
برای درک اینکه چگونه هر ویژگی بر هر مؤلفه اصلی (PC) تأثیر می گذارد، ارتباط بین ویژگی ها و مؤلفه های اصلی ایجاد شده با PCA را نشان خواهیم داد.
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import pandas as pd
# load features and targets separately
iris = datasets.load_iris()
X = iris.data
y = iris.target
# Scale Data
x_scaled = StandardScaler().fit_transform(X)
# Perform PCA on Scaled Data
pca = PCA(n_components=2)
pca_features = pca.fit_transform(x_scaled)
# Principal components correlation coefficients
loadings = pca.components_
# Number of features before PCA
n_features = pca.n_features_in_
# Feature names before PCA
feature_names = iris.feature_names
# PC names
pc_list = [f'PC{i}' for i in list(range(1, n_features + 1))]
# Match PC names to loadings
pc_loadings = dict(zip(pc_list, loadings))
# Matrix of corr coefs between feature names and PCs
loadings_df = pd.DataFrame.from_dict(pc_loadings)
loadings_df['feature_names'] = feature_names
loadings_df = loadings_df.set_index('feature_names')
loadings_df
نتیجه یک چارچوب داده با بارگذاری ها (ضرایب همبستگی) است.
نحوه ایجاد نمودار بارگذاری دو بعدی در پایتون
نمودار بارگذاری کمک می کند تا بفهمیم کدام ویژگی بر کدام مؤلفه اصلی و چقدر تأثیر می گذارد.
ابتدا ضرایب همبستگی (بارگذاری) هر ویژگی را رسم می کنیم.
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
sns.set()
# Get the loadings of x and y axes
xs = loadings[0]
ys = loadings[1]
# Plot the loadings on a scatterplot
for i, varnames in enumerate(feature_names):
plt.scatter(xs[i], ys[i], s=200)
plt.text(xs[i], ys[i], varnames)
# Define the axes
xticks = np.linspace(-0.8, 0.8, num=5)
yticks = np.linspace(-0.8, 0.8, num=5)
plt.xticks(xticks)
plt.yticks(yticks)
plt.xlabel('PC1')
plt.ylabel('PC2')
# Show plot
plt.title('2D Loading plot')
plt.show()
سپس جهت همبستگی را با افزودن فلش هایی از مبدا (0، 0) به هر یک از ضرایب رسم می کنیم.
import matplotlib.pyplot as plt
import numpy as np
# Get the loadings of x and y axes
xs = loadings[0]
ys = loadings[1]
# Plot the loadings on a scatterplot
for i, varnames in enumerate(feature_names):
plt.scatter(xs[i], ys[i], s=200)
plt.arrow(
0, 0, # coordinates of arrow base
xs[i], # length of the arrow along x
ys[i], # length of the arrow along y
color='r',
head_width=0.01
)
plt.text(xs[i], ys[i], varnames)
# Define the axes
xticks = np.linspace(-0.8, 0.8, num=5)
yticks = np.linspace(-0.8, 0.8, num=5)
plt.xticks(xticks)
plt.yticks(yticks)
plt.xlabel('PC1')
plt.ylabel('PC2')
# Show plot
plt.title('2D Loading plot with vectors')
plt.show()
داده های PCA را با پایتون مقیاس کنید
ما نمودار PCA را دوباره مقیاس می کنیم تا آن را در برابر نمودارهای بارگذاری رسم کنیم.
من برخی از کدهای زیر را از آموزش فوق العاده Prasad Ostwal در مورد PCA قرض گرفته ام.
# Create DataFrame from PCA
pca_df = pd.DataFrame(
data=pca_features,
columns=['PC1', 'PC2'])
# Map Targets to names
target_names = {
0:'setosa',
1:'versicolor',
2:'virginica'
}
pca_df['target'] = y
pca_df['target'] = pca_df['target'].map(target_names)
# Scale PCS into a DataFrame
pca_df_scaled = pca_df.copy()
scaler_df = pca_df[['PC1', 'PC2']]
scaler = 1 / (scaler_df.max() - scaler_df.min())
for index in scaler.index:
pca_df_scaled[index] *= scaler[index]
pca_df_scaled
طرح Scatterplot و Loading را در یک Biplot ترکیب کنید
با استفاده از نمودارهای بارگذاری و نمودارهای مقیاس شده، اکنون می توانیم ضرایب همبستگی را در برابر نمودار پراکندگی PCA در همان نمودار نشان دهیم.
# 2D
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
xs = loadings[0]
ys = loadings[1]
sns.lmplot(
x='PC1',
y='PC2',
data=pca_df_scaled,
fit_reg=False,
)
for i, varnames in enumerate(feature_names):
plt.scatter(xs[i], ys[i], s=200)
plt.arrow(
0, 0, # coordinates of arrow base
xs[i], # length of the arrow along x
ys[i], # length of the arrow along y
color='r',
head_width=0.01
)
plt.text(xs[i], ys[i], varnames)
xticks = np.linspace(-0.8, 0.8, num=5)
yticks = np.linspace(-0.8, 0.8, num=5)
plt.xticks(xticks)
plt.yticks(yticks)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('2D PCA Biplot (Python)')
plt.show()
چگونه یک PCA 3D Biplot در پایتون بسازیم؟
PCA 3D biplot تمام مراحل بالا را با استفاده از 3 جزء به جای 2 ترکیب می کند.
این کد پایتون در مورد استفاده از تجزیه و تحلیل اجزای اصلی (PCA) برای کاهش ابعاد داده ها و سپس تجسم آن در یک بای پلات سه بعدی است.
دادههای ورودی را از مجموعه دادههای عنبیه میگیرد، StandardScaler و PCA را روی آن اعمال میکند و یک پراکندگی سهبعدی با نقاط داده تبدیلشده ایجاد میکند.
- نقاط داده بر اساس موقعیت آنها در جزء سوم رنگ می شوند.
- مشارکت ویژگی های اصلی به صورت فلش نمایش داده می شود.
PCA 3D biplot به درک روابط بین نقاط داده و ویژگی ها در یک فضای سه بعدی کمک می کند.
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
plt.style.use('default')
# load features and targets separately
iris = datasets.load_iris()
X = iris.data
y = iris.target
# Scale Data
x_scaled = StandardScaler().fit_transform(X)
pca = PCA(n_components=3)
# Fit and transform data
pca_features = pca.fit_transform(x_scaled)
# Create dataframe
pca_df = pd.DataFrame(
data=pca_features,
columns=['PC1', 'PC2', 'PC3'])
# map target names to PCA features
target_names = {
0:'setosa',
1:'versicolor',
2:'virginica'
}
# Apply the target names
pca_df['target'] = iris.target
pca_df['target'] = pca_df['target'].map(target_names)
# Create the scaled PCA dataframe
pca_df_scaled = pca_df.copy()
scaler_df = pca_df[['PC1', 'PC2', 'PC3']]
scaler = 1 / (scaler_df.max() - scaler_df.min())
for index in scaler.index:
pca_df_scaled[index] *= scaler[index]
# Initialize the 3D graph
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Define scaled features as arrays
xdata = pca_df_scaled['PC1']
ydata = pca_df_scaled['PC2']
zdata = pca_df_scaled['PC3']
# Plot 3D scatterplot of PCA
ax.scatter3D(
xdata,
ydata,
zdata,
c=zdata,
cmap='Greens',
alpha=0.5)
# Define the x, y, z variables
loadings = pca.components_
xs = loadings[0]
ys = loadings[1]
zs = loadings[2]
# Plot the loadings
for i, varnames in enumerate(feature_names):
ax.scatter(xs[i], ys[i], zs[i], s=200)
ax.text(
xs[i] + 0.1,
ys[i] + 0.1,
zs[i] + 0.1,
varnames)
# Plot the arrows
x_arr = np.zeros(len(loadings[0]))
y_arr = z_arr = x_arr
ax.quiver(x_arr, y_arr, z_arr, xs, ys, zs)
# Plot title of graph
plt.title(f'3D Biplot of Iris')
# Plot x, y, z labels
ax.set_xlabel('Principal component 1', rotation=150)
ax.set_ylabel('Principal component 2')
ax.set_zlabel('Principal component 3', rotation=60)
plt.show()
نتیجه
ما اکنون یاد گرفتهایم که چگونه بایپلاتهای دوبعدی و سهبعدی تجزیه و تحلیل اجزای اصلی را در پایتون بسازیم تا ساختار دادهها را درک کنیم، به زودی شما را خواهیم دید!
استراتژیست سئو در Tripadvisor، Seek سابق (ملبورن، استرالیا). متخصص در سئو فنی. در تلاش برای سئوی برنامهریزی شده برای سازمانهای بزرگ از طریق استفاده از پایتون، R و یادگیری ماشین.