当前位置: 首页 > news >正文

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

皮尔逊相关系数矩阵是一个用于量化多个变量之间线性关系的统计工具。它的每个元素表示两个变量之间的皮尔逊相关系数,取值范围从 -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_colsdata[dummy_cols] = dummiesvalid_corr_cols += dummy_colsstr_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 = Noneif 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 withnumeric 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_dataif 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.mrgr.cn/news/56758.html

相关文章:

  • element 按钮变形 el-button样式异常
  • 川菜出海平台国际市场系统功能开发分析
  • (自用复习题)常微分方程06
  • Nodejs访问.env配置文件
  • 可转债连载
  • 解决 @Scope 注解失效问题:深入理解与排查方法
  • 基于SSM的教务信息平台【附源码】
  • 关于SEO的自检、优化
  • JMeter压测
  • 【中华文化】懂得中国式饭局礼仪,让你更加出彩
  • 09 实战:PSNR值及其与原始图像对比系统
  • 禁止VMware Service进程开机自动启动
  • 实战二:网络爬虫
  • 二叉树的最小深度
  • 如何预防数据打架?数据仓库如何保持指标数据一致性开发指南(持续更新)
  • 高光束质量半导体激光器质量可靠性如何辨别?
  • 清理数据库中的某个部门树
  • 《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法
  • 《Python游戏编程入门》注-第3章1
  • Python N次函数拟合