【数据挖掘】特征相关性挖掘神器-线性非线性关系一键挖掘!
作者:杰少
Kaggle竞赛知识点--PredictivePowerScore(PPS)
简 介
很多时候,我们在计算特征之间相关性或者绘制相关性矩阵的时候习惯性地会使用Pearson相关性,这在诸多问题中确实可以为模型预测等方面带来很多帮助,但它却存在着下面三个比较大的问题:
考虑的是特征之间的线性关系,如果绝对值越大,那么两个变量之间的线性相关性就越强,反之线性关系就越低;如果两个变量之间存在极强的非线性关系,也会因为线性关系较低,而被误以为没什么关系;
没法同时适用于类别变量和数值变量的关系计算,或者计算得到的分数价值也不大;
相关性系数矩阵是对称的,而在许多问题中我们特征变量之间的关系并不一定是对称的;
那么有没有一种方法可以同时缓解上面的几个问题呢?有的!就是本文介绍的PPS(Predictive Power Score)。
Predictive Power Score
假设我们有两个变量,想要计算变量预测的能力,我们通过下面的方式进行计算:
将变量作为目标变量,将作为特征;
使用决策树进行交叉验证,并依据评估指标计算得到分数cross_score;
当变量为数值型,我们使用Decision Tree Regressor并计算MAE);
当变量为类别型,我们使用Decision Tree Classifier并计算weighted F1);
计算的值作为我们最终的分数;
分类问题:final_score = (cross_score - naive_score)/(1-naive_score),这里naive_score是出现最多的类作为最终预测结果计算得到的分数;,使用中位数作为最终预测结果计算得到的分数;
回归问题:final_score = 1 - (cross_score / naive_mae),这里naive_score是使用中位数作为最终预测结果计算得到的分数;
代码
此处我们构建一个二次关系:特征从-2到2的均匀变量,目标是的平方加上一些误差,perfect是的平方。
import pandas as pd
import numpy as np
# !pip install -U ppscore
import ppscore as pps
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame()
df["x"] = np.random.uniform(-2, 2, 1_000_000)
df["error"] = np.random.uniform(-0.5, 0.5, 1_000_000)
df["y"] = df["x"] * df["x"] + df["error"]
df["y_perfect"] = df["x"] * df["x"]
plt.figure(figsize=[10,6])
sns.scatterplot(x = 'x', y ='y', data=df)
<AxesSubplot:xlabel='x', ylabel='y'>
1.对称性分析
变量的分数是不一样的,非对称的;
pps.score(df, "x", "y")
{'x': 'x','y': 'y','ppscore': 0.6698987690580689,'case': 'regression','is_valid_score': True,'metric': 'mean absolute error','baseline_score': 1.0177846519084408,'model_score': 0.3359719664287812,'model': DecisionTreeRegressor()}
pps.score(df, "y", "x")
{'x': 'y','y': 'x','ppscore': 0,'case': 'regression','is_valid_score': True,'metric': 'mean absolute error','baseline_score': 1.0030129309668745,'model_score': 1.0892163726367778,'model': DecisionTreeRegressor()}
2.可视化
基于PPS的相关性矩阵
plt.figure(figsize=[10,6])
matrix_df = pps.matrix(df)[['x', 'y', 'ppscore']].pivot(columns='y', index='x', values='ppscore')
sns.heatmap(matrix_df, vmin=0, vmax=1, cmap="Blues", linewidths=0.5, annot=True)
<AxesSubplot:xlabel='y', ylabel='x'>
基于Person相关系数的相关性矩阵
plt.figure(figsize=[10,6])
sns.heatmap(df.corr(), vmin=0, vmax=1, cmap="Reds", linewidths=0.5, annot=True)
<AxesSubplot:>
3.小结
从上面的分析我们可以发现:
基于Person相关系数的方法完全没有找到与的潜在关系;
给予PPS的方法则完美的找到了与以及perfect的关系。
适用问题
PPS的方法适用的问题非常多,应用的方面也很广,此处我们将其归纳为下面几点:
数据分析:PPS的方式可以表示两个数据之间的潜在关系(线性的非线性的),PPS的相关性图是非常好的一种可视化的解释方式;
特征筛选,其特征筛选的方式和Pearson相关性的方式类似,如果我们变量与标签之间的PPS分数很低的话,那么该特征可能和我们的目标变量并不存在任何关系,包括线性的和非线性的关系,可以考虑直接删除处理;
信息泄漏:使用PPS矩阵检测变量之间的信息泄漏-信息泄漏是通过其他变量导致的。
当然因为PPS是基于模型(目前主要是决策树相关的模型)计算得到的,所以它也带来了一些劣势:
计算时间更高;
PPS的分数无法像相关性那样容易解释(线性相关性的PPS可能为1,二次关系的PPS也可能为1),所以PPS更适合于发现模式;
无法用严格的数学方法比较不同目标变量的得分,它们是使用不同的评估指标计算得到的;
目前的PPS是基于决策树为主的模型进行计算的,所以决策树的劣势也会在PPS计算中存在;
参考文献
Predictive Power Score vs Correlation
Correlation Vs Predictive Power Score
RIP correlation. Introducing the Predictive Power Score
https://github.com/8080labs/ppscore
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:
【数据挖掘】特征相关性挖掘神器-线性非线性关系一键挖掘!相关推荐
- 数据挖掘如何计算相关性_一份数据挖掘入门指南!!!
Datawhale 作者:王瑞楠.吴忠强.徐韬.田杨军 摘要:入门数据挖掘,必须理论结合实践.本文梳理了数据挖掘知识体系,帮助大家了解和提升在实际场景中的数据分析.特征工程.建模调参和模型融合等技能. ...
- 【数据挖掘实战】——中医证型的关联规则挖掘(Apriori算法)
目录 一.背景和挖掘目标 1.问题背景 2.传统方法的缺陷 3.原始数据情况 4.挖掘目标 二.分析方法和过程 1.初步分析 2.总体过程 第1步:数据获取 第2步:数据预处理 第3步:构建模型 三. ...
- R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集、非线性:基函数展开和样条分析、你简单分析的不重要特征,可能只是线性不显著、而非线性是显著的
R语言splines包构建基于logistic回归的自然样条分析:南非心脏病数据集.非线性:基函数展开和样条分析.你简单分析的不重要特征,可能只是线性不显著.而非线性是显著的 目录
- 业务数据分析中可能用到的简单的数据挖掘方法——相关性分析、主成分分析、因子分析
业务数据分析中可能用到的简单的数据挖掘方法--相关性分析.主成分分析.因子分析 相关性分析 相关性分析通过相关系数来描述两个变量之间的相关性程度. 通过相关系数判断两者会不会相互影响,影响是正相关还是 ...
- 关联规则挖掘(南京大学复杂数据结构挖掘课程作业)
项目github地址:点我跳转 1 实验说明 1.1 任务 本次实验的主要任务是对给定数据集进行关联规则挖掘.通过改变support和confidence的值,比较Aprioir.FP-growth和 ...
- R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest)、置信度最高的五条规则(top five
R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest).置信度最高的五条规则(top five ...
- r语言kendall协和系数_数据挖掘|R相关性分析及检验
相关系数可以用来描述定量变量之间的关系.结果的正负号分别表明正相关或负相关,数值的大小则表示相关关系的强弱程度. R可以计算多种相关系数,今天主要介绍常见的三种:Pearson相关系数.Spearma ...
- 生成的头_Python爬虫偷懒神器!快速一键生成Python爬虫请求头
今天介绍个神奇的网站!堪称爬虫偷懒的神器! 我们在写爬虫,构建网络请求的时候,不可避免地要添加请求头( headers ),以 mdn 学习区为例,我们的请求头是这样的: 一般来说,我们只要添加 us ...
- python特征工程意义_python数据挖掘--特征工程篇(附代码)
记录数据挖掘路上遇到的常用特征工程方法和技巧(附代码),方便自己,方便他人,持续更新. 1.哑编码 对某一列数据进行pandas自带的(定性数据哑编码,定量数据二值化),并附上名字 pd.get_du ...
最新文章
- Github标星57k+,热榜第一,用Python实现所有算法
- CentOS 7最小安装之后应该尽快做好的几件事情
- linux c 客户端与 golang 服务端通信(网络字节序)
- 线段树求逆序数(单点更新)
- SAP Cloud SDK‘s Virtual Data Model
- mc有什么红石机器人_我的世界10月考试!来测测你的MC成绩吧~
- python类和对象介绍_Python开发基础-Day17面向对象编程介绍、类和对象
- 阿里开发规范_阿里开发强制要求的11条SQL编写规范
- 加拿大计算机硕士gpa不够,加拿大研究生留学申请者绩点低怎么办?这四类应对方法你都知道吗?...
- Linux集中日志服务器rsyslog(亲测)
- 计算机管理系统论文参考文献,关于计算机系统管理的论文参考文献 计算机系统管理论文参考文献哪里找...
- 揭开牙病之谜 与牙医说再见转
- Blender2.9基础二:UV篇
- redies 须知小结
- 转载:80端口、443端口、8080端口、8000端口的区别
- 从MySQL数据库中查询某个数据库某个表中字段
- composer设置镜像
- nginx安装、配置文件详解、测试
- 差序格局与关系取向社会
- Java毕设设计-高校运动会管理系统
热门文章
- 奇怪吸引子---NoseHoover
- 解决IE下textarea不识别maxlength属性的问题
- ObservableCollection 类 详解
- 不信任的 .exe 怎么办,用 Windows 沙盒啊!
- 抽取随即人员——SqlServer_Proc_Random
- stm32 invalid rom table(转载)
- graph 关系图 设置
- android自动化优化工具,Auto Optimizer手机性能自动优化App
- 可用子网数要不要减2_网络层 | 网际协议IP(2)
- python 读取 word 表格_python读取word表格