نحوه ساخت بای پلات PCA در پایتون (با مثال)

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

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

PCA Biplot در پایتون
PCA Biplot در پایتون

یک بای پلات PCA در پایتون، نمودار پراکندگی امتیازات PCA و نمودارهای بارگذاری را ترکیب می کند تا نشان دهد که نقاط داده چگونه با یکدیگر ارتباط دارند.

این تجسم به تجزیه و تحلیل داده ها و یادگیری ماشین برای درک ساختار داده ها، شناسایی الگوها و مشاهده روابط بین متغیرها کمک می کند.

چگونه یک PCA 2D Biplot در پایتون بسازیم؟

برای تجسم یک Biplot دو بعدی، ابتدا باید یک نمودار بارگذاری و یک نمودار پراکنده از داده های PCA ایجاد کنید و سپس آنها را با یکدیگر ترکیب کنید.

Biplot نموداری است که نشان می دهد:

  • نمودارهای پراکنده PCA مقیاس شده
  • کرت های بارگیری علاوه بر این
  • بردارهایی که نشان می‌دهند هر ویژگی چقدر بر مؤلفه اصلی تأثیر می‌گذارد.

لودینگ پلات چیست؟

نمودار بارگذاری PCA در پایتون به تجسم نحوه مشارکت ویژگی های اصلی به اجزای اصلی کمک می کند تا بفهمیم کدام متغیرها بیشترین تأثیر را بر داده های تبدیل شده دارند.

نمودار بارگذاری بردارهایی را نشان می دهد که از مبدا تا بارگذاری هر ویژگی شروع می شوند.

بارگذاری ها (یا وزن ها) ضرایب همبستگی بین ویژگی های اصلی و اجزای اصلی هستند.

آنها عناصر بردار ویژه را نشان می دهند.

بارهای مربعی اجزای اصلی همیشه برابر با 1 است.

با استفاده از بارگیری ها قابل دسترسی است pca.components_.

با الهام از Renesh Bedre، من یک طرح بارگذاری ایجاد خواهم کرد تا به درک آنها کمک کنم.

مطالب پیشنهادی  جاوا اسکریپت را به زیر سرصفحه های HTML منتقل کنید

چگونه یک 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()
Biplot تجزیه و تحلیل مولفه اصلی دو بعدی در Python Scikit-learn
دو بعدی PCA Biplot در پایتون

چگونه یک 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()
Biplot تجزیه و تحلیل اجزای اصلی سه بعدی در Python Scikit-learn
سه بعدی PCA Biplot در پایتون

نتیجه

ما اکنون یاد گرفته‌ایم که چگونه بای‌پلات‌های دوبعدی و سه‌بعدی تجزیه و تحلیل اجزای اصلی را در پایتون بسازیم تا ساختار داده‌ها را درک کنیم، به زودی شما را خواهیم دید!

مطالب پیشنهادی  فروشگاه Google Play لیست مجوزهای برنامه را بازیابی می کند

سئو PBN | خبر های جدید سئو و هک و سرور