使用皮尔逊相关系数矩阵进行特征筛选

news2024/11/28 10:51:45

皮尔逊相关系数矩阵是一个用于量化多个变量之间线性关系的统计工具。它的每个元素表示两个变量之间的皮尔逊相关系数,取值范围从 -1 到 1:

  • 1 表示完全正相关:当一个变量增加时,另一个变量也会增加。
  • -1 表示完全负相关:当一个变量增加时,另一个变量会减少。
  • 0 表示没有线性相关关系。

皮尔逊相关系数的计算

皮尔逊相关系数 rrr 的计算公式为:

其中:

  • Xi​ 和 Yi​ 是变量的观测值。
  • Xˉ 和 Yˉ 是变量的均值。

应用场景

皮尔逊相关系数矩阵常用于:

  • 数据分析与统计研究。
  • 发现变量之间的关系,尤其是在机器学习和数据挖掘中。
  • 经济学、心理学、生物学等领域的研究。

例子

假设有三个变量 A,B,CA, B, CA,B,C,计算得到的皮尔逊相关系数矩阵可能如下:

ABC
A10.8-0.3
B0.810.2
C-0.30.21

这个矩阵表示:

  • A 和 B 的相关性较强。
  • A 和 C 之间存在负相关。
  • B 和 C 的相关性较弱。

测试一个简单demo

import pandas as pd
import numpy as np

# 创建一个示例数据集
data = {
    'feature1': np.random.rand(100),
    'feature2': np.random.rand(100),
    'feature3': np.random.rand(100),
    'feature4': np.random.rand(100),
    'target': np.random.rand(100)
}

df = pd.DataFrame(data)

# 计算皮尔逊相关系数矩阵
correlation_matrix = df.corr(method='pearson')

# 显示相关系数矩阵
print("相关系数矩阵:\n", correlation_matrix)

# 设置相关性阈值
threshold = 0.5

# 筛选相关性大于阈值的特征
relevant_features = correlation_matrix['target'][abs(correlation_matrix['target']) > threshold].index.tolist()

# 移除目标变量
relevant_features.remove('target')

print("与目标变量相关性大于阈值的特征:", relevant_features)

返回结果

相关系数矩阵:
           feature1  feature2  feature3  feature4    target
feature1  1.000000 -0.112876 -0.148784  0.011113  0.059841
feature2 -0.112876  1.000000 -0.093312  0.140427  0.177329
feature3 -0.148784 -0.093312  1.000000  0.086698 -0.032103
feature4  0.011113  0.140427  0.086698  1.000000  0.196255
target    0.059841  0.177329 -0.032103  0.196255  1.000000

 

生产上使用下面方法和调用去返回数据分析

def build_correlations_matrix(data_id, is_pps=False, encode_strings=False, image=False):
    data = run_query(
        handle_predefined(data_id),
        build_query(data_id, global_state.get_query(data_id)),
        global_state.get_context_variables(data_id),
    )
    valid_corr_cols, valid_str_corr_cols, valid_date_cols = correlations.get_col_groups(
        data_id, data
    )

    str_encodings_code = ""
    dummy_col_mappings = {}
    if encode_strings and valid_str_corr_cols:
        data = data[valid_corr_cols + valid_str_corr_cols]
        dummy_kwargs = {}
        if pandas_util.is_pandas2():
            dummy_kwargs["dtype"] = "int"
        for str_col in valid_str_corr_cols:
            dummies = pd.get_dummies(data[[str_col]], columns=[str_col], **dummy_kwargs)
            dummy_cols = list(dummies.columns)
            dummy_col_mappings[str_col] = dummy_cols
            data[dummy_cols] = dummies
            valid_corr_cols += dummy_cols
        str_encodings_code = (
            "str_corr_cols = [\n\t'{valid_str_corr_cols}'\n]\n"
            "dummies = pd.get_dummies(corr_data, str_corr_cols)\n"
            "corr_data.loc[:, dummies.columns] = dummies\n"
        ).format(valid_str_corr_cols="', '".join(valid_str_corr_cols))
    else:
        data = data[valid_corr_cols]

    corr_cols_str = "'\n\t'".join(
        ["', '".join(chunk) for chunk in divide_chunks(valid_corr_cols, 8)]
    )

    pps_data = None
    if is_pps:
        code = build_code_export(data_id, imports="import ppscore\n")
        code.append(
            (
                "corr_cols = [\n"
                "\t'{corr_cols}'\n"
                "]\n"
                "corr_data = df[corr_cols]\n"
                "{str_encodings}"
                "corr_data = ppscore.matrix(corr_data)\n"
            ).format(corr_cols=corr_cols_str, str_encodings=str_encodings_code)
        )

        data, pps_data = get_ppscore_matrix(data[valid_corr_cols])
    else:
        data, matrix_code = correlations.build_matrix(
            data_id,
            data,
            valid_corr_cols,
            {"corr_cols": corr_cols_str, "str_encodings": str_encodings_code},
        )
        code = [matrix_code]

    code.append(
        "corr_data.index.name = str('column')\ncorr_data = corr_data.reset_index()"
    )
    code = "\n".join(code)
    data.index.name = str("column")
    if image:
        return build_correlations_matrix_image(
            data,
            is_pps,
            valid_corr_cols,
            valid_str_corr_cols,
            valid_date_cols,
            dummy_col_mappings,
            pps_data,
            code,
        )
    return (
        valid_corr_cols,
        valid_str_corr_cols,
        valid_date_cols,
        dummy_col_mappings,
        pps_data,
        code,
        data,
    )

接口调用该方法

@dtale.route("/correlations/<data_id>")
@exception_decorator
def get_correlations(data_id):
    """
    :class:`flask:flask.Flask` route which gathers Pearson correlations against all combinations of columns with
    numeric data using :meth:`pandas:pandas.DataFrame.corr`

    On large datasets with no :attr:`numpy:numpy.nan` data this code will use :meth:`numpy:numpy.corrcoef`
    for speed purposes

    :param data_id: integer string identifier for a D-Tale process's data
    :type data_id: str
    :param query: string from flask.request.args['query'] which is applied to DATA using the query() function
    :returns: JSON {
        data: [{column: col1, col1: 1.0, col2: 0.99, colN: 0.45},...,{column: colN, col1: 0.34, col2: 0.88, colN: 1.0}],
    } or {error: 'Exception message', traceback: 'Exception stacktrace'}
    """
    is_pps = get_bool_arg(request, "pps")
    image = get_bool_arg(request, "image")
    matrix_data = build_correlations_matrix(
        data_id,
        is_pps=is_pps,
        encode_strings=get_bool_arg(request, "encodeStrings"),
        image=image,
    )
    (
        valid_corr_cols,
        valid_str_corr_cols,
        valid_date_cols,
        dummy_col_mappings,
        pps_data,
        code,
        df_or_image,
    ) = matrix_data
    if image:
        fname = "{}.png".format("predictive_power_score" if is_pps else "correlations")
        return send_file(df_or_image, fname, "image/png")

    data = df_or_image.reset_index()
    col_types = grid_columns(data)
    f = grid_formatter(col_types, nan_display=None)
    return jsonify(
        data=f.format_dicts(data.itertuples()),
        dates=valid_date_cols,
        strings=valid_str_corr_cols,
        dummyColMappings=dummy_col_mappings,
        code=code,
        pps=pps_data,
    )

前端渲染页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

#每日一题#自动化 2024年10月

#每日一题#自动化 2024年10月 1、深拷贝和浅拷贝的区别是什么&#xff1f; 参考答案&#xff1a; 深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。在 Python 中&#xff0c;我们使用 deepcopy&#xff08;&#xff09;函数进行深拷贝…

Debezium和SeaTunnel实现MySQL到Hadoop的实时数据流和全量同步(基于尚硅谷的集群环境)

1、hadoop集群连接本地MySQL 1.1 首先测试集群是否可以ping通本地 虚拟机可以ping通网关&#xff08;192.168.10.2&#xff09;&#xff0c;但不能ping通192.168.10.1&#xff0c;这表明问题可能出在Windows主机的防火墙设置或VMware的网络配置上。 1.1.1 检查Windows防火墙…

个人信息窗口(三)

个人信息窗口&#xff08;三&#xff09; 前言 在上一集我们就可以显示我们就可以全部显示所有的未隐藏的组件了&#xff0c;但是隐藏的组件我们还没有蛆完成&#xff0c;所以我们这一集就需要去做隐藏组件的显示&#xff0c;以及如何切换到隐藏的组件的功能。 需求分析并实…

centos7 nginx优化

优化nginx进程个数的策略 在高并发、高访问量的web服务场景&#xff0c;需要事先启动好更多的nginx进程&#xff0c;以保证快速响应并处理大量并发用户的请求。worker_processes 1;一般调整到与CPU的颗数相同查看LInux可查看CPU个数及总核数grep processor /proc/cpuinfo|wc …

开放式耳机排行榜前十名,开放式耳机全价位段盘点

关于开放式蓝牙耳机的品牌选择&#xff0c;这是一个常见的问题。因为市面上的蓝牙耳机种类繁多&#xff0c;各种样式和类型层出不穷&#xff0c;让许多消费者感到困惑&#xff0c;不知道如何选择一款适合自己的蓝牙耳机。一款好的蓝牙耳机不仅需要音质好、配置高&#xff0c;还…

计算机毕业设计hadoop+spark知识图谱中药推荐系统 中药材推荐系统 中药可视化 中药数据分析 中药爬虫 机器学习 深度学习 人工智能 大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 摘 要 本文所探讨的领域是…

深度学习-2:数据向量化

向量化 在逻辑回归中&#xff0c;x,w,b都是列向量&#xff0c;若要计算w.T*xb&#xff0c;不向量化的话就需要for循环计算起来很麻烦 向量化后&#xff0c;使用numpy.dot(w,x)函数即可快速计算 逻辑回归向量化

接口测试(六)jmeter——参数化(配置元件 --> 用户定义的变量)

一、jmeter——参数化&#xff08;配置元件 --> 用户定义的变量&#xff09; 注&#xff1a;示例仅供参考 1. 参数化格式&#xff1a;${变量名} 2. 配置元件&#xff1a;用户定义的变量 3. 添加【用户定义的变量】&#xff0c;【线程组】–>【添加】–>【配置元件】–…

手持无人机飞手执照,会组装调试入伍当兵有多香!

手持无人机飞手执照&#xff0c;并具备组装调试技能&#xff0c;在入伍当兵时确实会具有显著的优势和吸引力。以下是对这一情况的详细分析&#xff1a; 一、无人机飞手执照的优势 1. 法规遵从与安全保障&#xff1a; 根据《民用无人驾驶航空器系统驾驶员管理暂行规定》等相关…

深入浅出 Vue3 nextTick

程序员节日快乐~ #1024程序员节 | 征文# nextTick 概念 当你在 Vue 的响应式数据模型中对数据进行修改时&#xff0c;这些变化并不会立即同步到 DOM 上_&#xff0c;而是会在当前的微任务队列&#xff08;microtask queue&#xff09;执行完毕后进行批量更新。这种机制被称为…

【宝塔面板】轻松使用docker搭建lobe-chat项目(AI对话)

我们的目的&#xff1a;就是下面的这个玩意&#xff1a; 主要也就三步 1、创建容器编排模版 2、创建容器 3、配置 第一步&#xff1a;创建编排模版 代码我放下面了&#xff1a;&#xff08;你要记住这里开放的是3210端口&#xff09; # https://github.com/lobehub/lobe-ch…

Spring Boot驱动的植物健康监测革命

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

Linux Redis查询key与移除日常操作

维护老项目Express node 编写的后端程序、有这么一个方法、没有设置redis过期时间&#xff08;建议设置过期时间&#xff0c;毕竟登录生产服务器并不是每个人都有权限登录的&#xff01;&#xff01;&#xff01;&#xff09;。如果变动只能通过登录生产服务器、手动修改… 于…

自动化抖音点赞取消脚本批量处理

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

CSS综合案例——新闻详情

一、知识点 1、文字颜色 属性名&#xff1a;color 属性值&#xff1a; 颜色表示方式属性值说明使用场景颜色关键字颜色英文单词red,green,blue学习测试rgb表示法rg(r,g,b)r,g,b表示红绿蓝三原色&#xff0c;取值0-255了解rgba表示法rgba(r,g,b,a)a表示透明度&#xff0c;取…

CVE-2024-36401 Geoserver远程代码执行漏洞复现

目录 CVE-2024-36401 Geoserver远程代码执行漏洞 影响版本 环境搭建 漏洞复现 poc GeoServer是一个用Java编写的开源软件服务器&#xff0c;允许用户共享和编辑地理空间数据。它为提供交互操作性而设计&#xff0c;使用开放标准发布来自任何主要空间数据源的数据。 CVE-20…

大模型日常:支持中英混合及多语言文生语音的MeloTTS本地部署

简要介绍 MeloTTS 是一个强大的多语言文本转语音库&#xff0c;特别设计以支持CPU环境下的实时语音合成&#xff0c;无需依赖GPU。该库能够输出自然流畅的语音&#xff0c;提供了一种高效便捷的方式&#xff0c;将文本信息转换为听觉内容。MeloTTS不仅支持多种语言&#xff0c…

Ubuntu20.04安装opencv3.1.0(包含详细解决报错方法)

我的环境是cuda10.1 cmake是3.16.5 第一步骤&#xff1a;下载安装包 第二步骤&#xff1a;编译环境安装 第三步骤&#xff1a;解压opencv安装包&#xff0c;并且在opencv文件夹内新建build文件夹 第四步骤&#xff1a;打开cmake-gui&#xff0c; 第五步骤&#xff1a;进行…

驱动-----内核启动

目录 一、最小系统 二.操作系统 三.操作系统的启动 四.linux启动准备工作 五.安装nfs和tftp环境 六.总结 设备驱动:驱使设备行动的程序。 裸机程序:没有和操作系统结合的驱动程序pwm.c,uart.c,adc.c 有操作系统的时候,应用层不能直接操作硬件,由底层写驱动的人写…

凹凸性和拐点的概念

二阶导不存在也可能是拐点 判断拐点的充分条件