【数据挖掘】特征相关性挖掘神器-线性非线性关系一键挖掘!
机器学习初学者
共 3616字,需浏览 8分钟
· 2021-05-10
Kaggle竞赛知识点--PredictivePowerScore(PPS)
很多时候,我们在计算特征之间相关性或者绘制相关性矩阵的时候习惯性地会使用Pearson相关性,这在诸多问题中确实可以为模型预测等方面带来很多帮助,但它却存在着下面三个比较大的问题:
考虑的是特征之间的线性关系,如果绝对值越大,那么两个变量之间的线性相关性就越强,反之线性关系就越低;如果两个变量之间存在极强的非线性关系,也会因为线性关系较低,而被误以为没什么关系;
没法同时适用于类别变量和数值变量的关系计算,或者计算得到的分数价值也不大; 相关性系数矩阵是对称的,而在许多问题中我们特征变量之间的关系并不一定是对称的;
那么有没有一种方法可以同时缓解上面的几个问题呢?有的!就是本文介绍的PPS(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
往期精彩回顾
本站qq群851320808,加入微信群请扫码:
评论
CVPR 2024|大视觉模型的开山之作!无需任何语言数据即可打造大视觉模型
↑ 点击蓝字 关注极市平台作者丨科技猛兽编辑丨极市平台极市导读 本文提出一种序列建模 (sequential modeling) 的方法,不使用任何语言数据,训练大视觉模型。>>加入极市CV技术交流群,走在计算机视觉的最前沿本文目录1 序列建模打造大视觉模型(来自 U
极市平台
1
21.3K star!推荐一款可视化自动化测试/爬虫/数据采集神器!功能免费且强大!
【温馨提示】由于公众号更改了推送规则,不再按照时间顺序排列,如果不想错过测试开发技术精心准备的的干货文章,请将测试开发技术设为“星标☆”,看完文章在文尾处点亮“在看”!大家好,我是狂师!在大数据时代,信息的获取与分析变得尤为重要。对于开发者、数据分析师乃至非技术人员来说,能够高效地采集网络数据并进行
测试开发技术
4
奇域AI,最懂新中式美学的AI绘画神器
「奇域AI」是一款非常适合驾驭新中式审美的AI绘画工具。作为国内首个主打新中式插画的AI绘画产品,它提供了上百种新中式美学风格模型,包括新中式插画、笔墨水彩、新铅油画等,为用户提供了丰富的选择。这款工具在「网页版」和「小程序」上都可以使用,只需输入你想要的画面,就能生成出符合新中式审美的作品。奇域A
IQ前端
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
小美播报|3月IPTV数据排行榜发布!
小美播报3月IPTV数据排行榜:《与凤行》登顶连续剧榜榜首拥有4.05亿家庭用户的中国IPTV平台已经成为国内主流视听平台,IPTV平台数据对视听产业各环节都具有重要意义。截至2024年4月,全国已有29个省级IPTV加入“看中国”,覆盖全国超2.25亿户家庭、辐射近7亿人。点击查看详情湖南广电与马
流媒体网
0
python读取一个文件里面几百个csv数据集然后按照列名合并一个数据集
点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤但使龙城飞将在,不教胡马度阴山。大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【FiNε_】问了一个Python自动化办公,问题如下:python 读取一个文
Python爬虫与数据挖掘
3
AKShare-股票数据-恐惧贪婪指数
作者寄语本次更新股票数据-恐惧贪婪指数接口。主要修复该接口,目前该接口可以获取 A 股 恐惧贪婪指数 数据。欢迎加入专注于财经数据和量化投资的【数据科学实战】社区,加入方式参见文末!更新接口"index_fear_greed_funddb" # 恐惧贪婪指数恐惧贪婪指数接口: index
数据科学实战
10
实战必备-数据清洗、数据存储、数据可视化-《AKShare-初阶-实战应用》
✔️课程介绍本课程主要给大家介绍 AKShare 的实战应用部分,主要包括对 AKShare 获取到的数据进行数据清洗,数据存储和数据可视化。课中会提供我们在进行数据处理中的最佳实践!课程目录✔️获取方式如下: 直接购买订阅: ¥39.8/年🔗扫码进入课程店铺:🔅懒得
数据科学实战
31