解题思路

  1. 数据读取:获取样本数量 和特征数量
  2. 构建数据集:分离特征矩阵和目标值向量
  3. 相关系数计算:对每个特征计算与目标值的皮尔逊相关系数
  4. 结果排序:按相关系数绝对值降序排序(绝对值相同按索引升序)
  5. 格式化输出:输出所有特征索引和相关系数(保留4位小数)

代码解析

import sys
import numpy as np

def read_data(N, M):
    """读取数据集并分离特征和目标值"""
    data = []      # 特征矩阵
    targets = []   # 目标值向量
    for _ in range(N):
        line = sys.stdin.readline().strip()
        elements = list(map(float, line.split()))
        data.append(elements[:-1])    # 前M个为特征
        targets.append(elements[-1])  # 最后一个为目标值
    return np.array(data), np.array(targets)

def compute_pearson_correlation(features, target):
    """计算每个特征与目标值的皮尔逊相关系数"""
    M = features.shape[1]
    correlations = []
    for i in range(M):
        X = features[:, i]  # 当前特征列
        Y = target          # 目标值列
        
        # 计算均值
        X_mean = np.mean(X)
        Y_mean = np.mean(Y)
        
        # 计算分子:协方差部分
        numerator = np.sum((X - X_mean) * (Y - Y_mean))
        
        # 计算分母:标准差乘积
        X_std = np.sqrt(np.sum((X - X_mean) ** 2))
        Y_std = np.sqrt(np.sum((Y - Y_mean) ** 2))
        denominator = X_std * Y_std
        
        # 处理分母为0的情况
        r = numerator / denominator if denominator != 0 else 0
        correlations.append((i, r))
    return correlations

def sort_features(correlations):
    """按相关系数绝对值降序排序(绝对值相同按索引升序)"""
    return sorted(correlations, 
                  key=lambda x: (-abs(x[1]), x[0]))

if __name__ == "__main__":
    # 读取样本数和特征数
    N, M = map(int, sys.stdin.readline().split())
    
    # 读取数据集
    data, targets = read_data(N, M)
    
    # 读取K值(本题中实际未使用)
    K = int(sys.stdin.readline())
    
    # 计算相关系数
    correlations = compute_pearson_correlation(data, targets)
    
    # 排序特征
    sorted_features = sort_features(correlations)
    
    # 输出结果
    for idx, corr in sorted_features:
        print(f"{idx} {corr:.4f}")

关键函数说明

  1. read_data(N, M)

    • 输入:样本数 ,特征数
    • 输出:特征矩阵()和目标值向量(维)
    • 过程:逐行读取数据,分离特征和目标值
  2. compute_pearson_correlation(features, target)

    • 输入:特征矩阵,目标值向量
    • 输出:包含(特征索引,相关系数)的列表
    • 过程:
      • 遍历每个特征列
      • 计算特征和目标值的均值
      • 计算协方差(分子)
      • 计算标准差乘积(分母)
      • 处理除零情况
  3. sort_features(correlations)

    • 输入:相关系数列表
    • 输出:排序后的相关系数列表
    • 排序规则:
      • 主序:相关系数绝对值降序
      • 次序:特征索引升序

总结

本题实现了基于皮尔逊相关系数的特征重要性分析:

  1. 皮尔逊相关系数有效量化特征与目标值的线性相关性
  2. 通过绝对值排序识别最具影响力的特征
  3. 适用于销售预测、用户行为分析等场景
  4. 输出结果可直接用于指导产品优化策略

该方法能快速识别与销售强相关的特征,帮助团队聚焦关键产品特性的优化,提升商业决策效率。