头歌教学平台python与机器学习-PCA

第1关:维数灾难与降维

  • 下列说法正确的是

    B、

    降维能够缓解维数灾难的负面影响

    C、

    使用原始数据训练出的回归器已经过拟合,可试试降维来提升性能

  • 下列说法错误的是

    C、

    维数灾难不会引起过拟

第2关:PCA算法流程

在 begin-end 之间填写pca(data, k)函数,实现 PCA 算法,要求返回降维后的数据。其中:

data :原始样本数据,类型为 ndarray;
k :需要降维至 k 维,类型为 int。
注意:为了顺利评测,计算协方差矩阵时请使用 NumPy 提供的 cov 函数。import numpy as np
 

import numpy as np

def pca(data, k):
    '''
    对 data 进行 PCA,并将结果返回
    :param data:数据集,类型为 ndarray
    :param k:想要降成几维,类型为 int
    :return:降维后的数据,类型为 ndarray
    '''
    # 去中心化
    mean = np.mean(data, axis=0)
    centered_data = data - mean

    # 计算协方差矩阵
    cov_matrix = np.cov(centered_data.T)

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

    # 对特征值进行排序,获取前 k 个最大特征值对应的特征向量
    sorted_indices = np.argsort(eigenvalues)[::-1]
    top_k_eigenvectors = eigenvectors[:, sorted_indices[:k]]

    # 降维
    reduced_data = centered_data.dot(top_k_eigenvectors)

    return reduced_data

第3关:sklearn中的PCA

编程要求
在 begin-end 之间填写cancer_predict(train_sample, train_label, test_sample)函数实现降维并对癌细胞进行分类的功能,其中:

train_sample :训练样本,类型为 ndarray;
train_label :训练标签,类型为 ndarray;
test_sample :测试样本,类型为 ndarray。

from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score

def cancer_predict(train_sample, train_label, test_sample):
    '''
    使用 PCA 降维,并进行分类,最后将分类结果返回
    :param train_sample: 训练样本, 类型为 ndarray
    :param train_label: 训练标签, 类型为 ndarray
    :param test_sample: 测试样本, 类型为 ndarray
    :return: 分类结果
    '''
    # 使用 PCA 降维
    pca = PCA(n_components=10)
    train_sample_pca = pca.fit_transform(train_sample)
    test_sample_pca = pca.transform(test_sample)

    # 划分训练集和验证集
    train_subsample, val_subsample, train_sublabel, val_sublabel = train_test_split(train_sample_pca, train_label, test_size=0.2, random_state=42)

    # 训练逻辑回归模型
    lr = LogisticRegression()
    lr.fit(train_subsample, train_sublabel)

    # 在验证集上评估
    val_pred_proba = lr.predict_proba(val_subsample)[:, 1]
    auc = roc_auc_score(val_sublabel, val_pred_proba)
    if auc < 0.9:
        # 如果 AUC 不满足要求,尝试调整 PCA 的参数或逻辑回归的参数
        pca = PCA(n_components=8)
        train_sample_pca = pca.fit_transform(train_sample)
        test_sample_pca = pca.transform(test_sample)
        lr = LogisticRegression(C=0.1)
        lr.fit(train_sample_pca, train_label)
    # 进行预测
    prediction = lr.predict(test_sample_pca)
    return prediction

本题中要求预测输出预测auc值高于0.9在后续的代码中作出相应修改,请读者看清题目。

你可能感兴趣的:(机器学习)