头歌教学平台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在后续的代码中作出相应修改,请读者看清题目。

    作者:学习只是用户态

    物联沃分享整理
    物联沃-IOTWORD物联网 » 头歌教学平台python与机器学习-PCA

    发表回复