原文:
towardsdatascience.com/predictive-power-score-calculation-pros-cons-and-javascript-code-165ec4c593ca
预测能力得分(在此之后我将简称为
PPS)是一个用于衡量两个变量之间预测关系强度的统计指标。
但与传统的相关度量,如皮尔逊相关系数r不同,后者仅适用于两个连续变量之间的线性关系,PPS
被设计来处理更广泛的关系,包括非线性关系和分类数据。
PPS
及其关键点,以及一个第一个例子
PPS
1,其中
表示几乎没有预测能力(变量无法预测目标),1
表示完美的预测能力(变量完美地预测目标)。
注意,PPS
始终等于或高于零,它不会提供关于关系方向的信息,正如你可以从皮尔逊相关系数
r(从-1
最重要的优势可能是它能够捕捉变量之间的非线性关系。
但这也带来了一种在许多关于这个分数的演示和文章中并不非常明确公开的调整:PPS
通过应用某种模型(通常是某种机器学习模型)来检查一个变量如何预测另一个变量。
我在撰写这篇文章时明确考虑了这一点,以使其与其他你可以在网上找到的文章有所不同。
注意,PPS(预测能力得分)并不像,例如,皮尔逊相关系数那样是对称的。
例如,如果你有一个变量
的相关系数相同,并且如果数据跨越中心围绕最小值,它将大约为
0:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/78173553c332b8c6f7ca2d2c35a6321a.png
此图以及以下所有图片均为作者从自己的程序和图表中截取的屏幕截图。
但一个简单的单层神经网络发现,确实,可以建模出一种关系,就像这样(使用
brain.js
在这篇文章中你可以尝试和编辑的一个应用中完成的):
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8c73ac75c31662ad923e6b6f96be220c.png
在这种情况下,返回PPS
0.9447。
在这一点上,我觉得我应该强调并反思以下内容:
PPS
的结果将取决于所使用的模型。
如果模型非常简单,它可能无法捕捉到关系,并返回一个低的
PPS。
在极端情况下,使用线性回归作为模型,PPS
将表现得像常规的皮尔逊相关系数。
相反,如果模型过度拟合数据,PPS
将不切实际地高——因此这一点必须仔细考虑。
进入
PPS
在这里,我通过两个在浏览器中运行的
PPS
的实际应用和一些示例应用,因此——你猜对了,特别是如果你跟随我和我的帖子——我将所有代码都写成
Glitch.com
上准备了这些示例,它允许你轻松地“混搭”代码,并通过单次点击进行所有测试和编辑!
PPS
的计算方法
在我们看到一些代码之前,让我们看看如何计算
PPS:
首先,我们需要一个预测模型,该模型可以从预测变量预测目标变量。
在这种情况下,我们将使用人工神经网络,我们必须对它们进行训练,并在预测变量上运行它们,并存储结果。
然后,使用诸如准确度或决定系数
R²等指标评估模型的性能,这些指标用于回归问题,如我在示例中展示的问题。
PPS
分数是通过将模型的性能与基线模型(如某些随机猜测或恒定预测)进行比较来计算的:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e1fbef8c97bdac10d7f62371387f33b1.png
重要的一点是,正如你将在下面的代码示例中看到的,在输入到神经网络之前,预测值和目标值被归一化。
这可能不是强制性的,但我这样做是因为神经网络通常在归一化输入数据上表现更好。
关于以下示例的另一个注意事项是,我使用均方误差来计算
PPS。
也就是说,我们比较网络的预测与一个基线模型,该模型返回目标值的平均值,并使用输入
1,使用
作为预测模型
我们将首先使用一个基本的神经网络,通过brain.js来模拟我们想要获得的
PPS
之间的关系。
编码步骤很简单:我们加载
brain.js
CDN,因此甚至不需要先下载它);然后使用
训练一个神经网络,它们被编码为从字符串中分割出来的数组;最后,通过将神经网络的性能与一个基线模型进行比较来计算
PPS,在这里我选择了一个恒定响应模型,该模型返回所有测试案例的训练目标平均值。
你可以在
Glitch
1(在此处),你可以“remix”来随意编辑。
该示例还包括一些非常基本的输入
brain.js
的预测。
以下是一个使用硬编码的数据作为示例(但你可以立即更改)的运行示例,其中包含一个具有单个隐藏层和
行更改):
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7a9bb7a3bbdb0e45ae6a14c18de9de46.png
在
Glitch
上查看以下提供的示例视图(你可以通过“remixing”来编辑),用于使用单个隐藏层和
个神经元对
计算。
正如你在示例中看到的,我还添加了在应用程序中绘制网络数据和预测的能力。
示例
作为预测模型
不幸的是,与机器学习的其他包相比,brain.js
相当有限,包括一些具有与
Tensorflow:Tensorflow.js)的库。
由于这个库功能更强大,也稍微复杂一些,我认为这是一个很好的机会开始尝试使用它,思考更深层次的未来测试——也许也会在这里报告。
这是第二个基于
Tensorflow.js
的示例(在此处)的代码,我没有展示运行,因为应用程序在视觉上与
brain.js
示例相同。
通过查看代码,你会识别出一些重要的差异,我在
Glitch
行)时,你可以非常容易地添加神经元层,构建它们时具有相当大的灵活性,例如设置单元数量、激活函数类型等。
第三,注意模型必须“编译”,这是你输入优化器、损失和其他参数的时候。
训练过程没有惊喜,除了我尝试了许多方法来获取详细的行为,以便跟踪训练过程,但始终未能做到这一点(我也尝试了在
StackOverflow
上建议的插入回调,但这也没有起作用……所以,需要进一步研究!)
PPS
的用途
在结束这篇帖子之前,我提出了一些关于
PPS
可能有什么用处的想法:
特征选择:PPS
可以用来识别在数据集中哪些特征对目标变量有强大的预测力。
为此,你可以对每一对可能的特征运行
PPS,并显示结果
不是对称的,所以你实际上必须测试所有可能的变量组合,而不仅仅是其中的一半。
探索性数据分析:与特征选择类似,PPS
应该有助于理解在构建预测模型时,哪些变量值得关注,通过排除那些相关性过强的变量。
类别关系:原则上,PPS
足够灵活,不仅可以分析我们在这几个例子中使用的数值数据,还可以分析类别数据。
参考文献
我是通过
Florian
的:
告别相关性。
介绍预测力得分
我还咨询了以下其他资源:
预测力得分
宏观协同
预测力得分与相关性的比较
最后,如果你对
Python
PPS:
ppscore
/>
www.lucianoabriata.com
我会在这里写关于我广泛兴趣范围内的一切:自然、科学、技术、编程等。
通过电子邮件订阅以获取我的新故事。
关于小型工作,请查看我的服务页面。
你可以在这里联系我。
你可以在这里给我小费。


