Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python?

Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python?

WBOY
Lepaskan: 2023-09-20 10:34:46
asal
958 orang telah melayarinya

Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python?

Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python?

PCA (Analisis Komponen Utama) ialah algoritma pembelajaran tanpa pengawasan yang biasa digunakan untuk mengurangkan dimensi data untuk lebih memahami dan menganalisis data. Dalam artikel ini, kita akan belajar cara menulis algoritma analisis komponen utama PCA menggunakan Python dan memberikan contoh kod khusus.

Langkah-langkah PCA adalah seperti berikut:

  1. Standardkan data: Sifarkan min setiap ciri data dan laraskan varians kepada julat yang sama untuk memastikan setiap ciri mempunyai kesan yang sama pada keputusan.
  2. Kira matriks kovarians: Matriks kovarians mengukur korelasi antara ciri. Kira matriks kovarians menggunakan data ternormal.
  3. Kira nilai eigen dan vektor eigen: Dengan melakukan penguraian nilai eigen pada matriks kovarians, nilai eigen dan vektor eigen yang sepadan boleh diperolehi.
  4. Pilih komponen utama: Pilih komponen utama mengikut saiz nilai eigen Komponen utama ialah vektor eigen bagi matriks kovarians.
  5. Ubah data: Ubah data menjadi ruang berdimensi rendah baharu menggunakan komponen utama yang dipilih.

Contoh kod:

import numpy as np

def pca(X, k):
    # 1. 标准化数据
    X_normalized = (X - np.mean(X, axis=0)) / np.std(X, axis=0)

    # 2. 计算协方差矩阵
    covariance_matrix = np.cov(X_normalized.T)

    # 3. 计算特征值和特征向量
    eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)

    # 4. 选择主成分
    eig_indices = np.argsort(eigenvalues)[::-1]  # 根据特征值的大小对特征向量进行排序
    top_k_eig_indices = eig_indices[:k]  # 选择前k个特征值对应的特征向量

    top_k_eigenvectors = eigenvectors[:, top_k_eig_indices]

    # 5. 转换数据
    transformed_data = np.dot(X_normalized, top_k_eigenvectors)

    return transformed_data

# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])

# 使用PCA降低维度到1
k = 1
transformed_data = pca(X, k)

print(transformed_data)
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menormalkan data melalui np.mean dan np.std. Kemudian, gunakan np.cov untuk mengira matriks kovarians. Seterusnya, gunakan np.linalg.eig untuk melakukan penguraian nilai eigen pada matriks kovarians untuk mendapatkan nilai eigen dan vektor eigen. Kami menyusun mengikut saiz nilai eigen dan memilih vektor eigen yang sepadan dengan nilai k eigen pertama. Akhir sekali, kami mendarabkan data ternormal dengan vektor ciri yang dipilih untuk mendapatkan data yang diubah. np.meannp.std将数据标准化。然后,使用np.cov计算协方差矩阵。接下来,使用np.linalg.eig对协方差矩阵进行特征值分解,得到特征值和特征向量。我们根据特征值的大小进行排序,选择前k个特征值对应的特征向量。最后,我们将标准化后的数据与选择的特征向量相乘,得到转换后的数据。

在示例数据中,我们使用一个简单的2维数据作为示例。最后,我们将维度降低到1维,打印输出转换后的数据。

运行上述代码,输出结果如下:

[[-1.41421356]
 [-0.70710678]
 [ 0.70710678]
 [ 1.41421356]]
Salin selepas log masuk

这个结果显示数据已经被成功地转换到了1维空间。

通过这个示例,你可以学习到如何使用Python编写PCA主成分分析算法,并使用np.meannp.stdnp.covnp.linalg.eig

Dalam data contoh, kami menggunakan data 2 dimensi yang mudah sebagai contoh. Akhir sekali, kami mengurangkan dimensi kepada 1 dimensi dan mencetak data yang ditukar. 🎜🎜Jalankan kod di atas, hasil output adalah seperti berikut: 🎜rrreee🎜Hasil ini menunjukkan bahawa data telah berjaya ditukar kepada ruang 1 dimensi. 🎜🎜Melalui contoh ini, anda boleh belajar cara menggunakan Python untuk menulis algoritma analisis komponen utama PCA dan menggunakan np.mean, np.std, np .cov dan np.linalg.eig dan fungsi NumPy lain digunakan untuk melakukan pengiraan. Saya harap artikel ini dapat membantu anda memahami dengan lebih baik prinsip dan pelaksanaan algoritma PCA, serta dapat menerapkannya dalam analisis data dan tugasan pembelajaran mesin anda. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menulis algoritma analisis komponen utama PCA dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan