机器学习 --- PCA

第1关:维数灾难与降维

机器学习 --- PCA_第1张图片

第2关:PCA算法流程

import numpy as np

def pca(data, k):
    '''
    对data进行PCA,并将结果返回
    :param data:数据集,类型为ndarray
    :param k:想要降成几维,类型为int
    :return: 降维后的数据,类型为ndarray
    '''

    #********* Begin *********#
     # 计算均值
    mean = np.mean(data, axis=0)

    # 数据中心化
    centered_data = data - mean

    # 计算协方差矩阵
    covariance_matrix = np.cov(centered_data, rowvar=False)

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

    # 对特征值进行排序并选择前k个最大的特征向量
    indices = np.argsort(eigenvalues)[::-1][:k]
    selected_eigenvectors = eigenvectors[:, indices]

    # 降维
    reduced_data = np.dot(centered_data, selected_eigenvectors)

    return reduced_data
    #********* End *********#

第3关:sklearn中的PCA

from sklearn.decomposition import PCA
from sklearn.neighbors import KNeighborsClassifier
def cancer_predict(train_sample, train_label, test_sample):
    '''
    使用PCA降维,并进行分类,最后将分类结果返回
    :param train_sample:训练样本, 类型为ndarray
    :param train_label:训练标签, 类型为ndarray
    :param test_sample:测试样本, 类型为ndarray
    :return: 分类结果
    '''

    #********* Begin *********#
    # 使用PCA进行降维
    pca = PCA(n_components=2)
    train_sample_reduced = pca.fit_transform(train_sample)
    test_sample_reduced = pca.transform(test_sample)

    # 使用KNN分类器进行分类
    knn = KNeighborsClassifier()
    knn.fit(train_sample_reduced, train_label)
    predictions = knn.predict(test_sample_reduced)

    return predictions
    #********* End *********#

你可能感兴趣的:(机器学习,人工智能,算法)