python – 当目标变量是一个比例时如何使用sklearn
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 当目标变量是一个比例时如何使用sklearn,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2084字,纯文字阅读大概需要3分钟。
内容图文
有一些标准方法可以预测比例,例如逻辑回归(没有阈值处理)和β回归.关于这个已经有过讨论:
http://scikit-learn-general.narkive.com/lLVQGzyl/beta-regression
我无法分辨sklearn框架中是否存在解决方法.
解决方法:
存在一种解决方法,但它本身并不属于sklearn框架.
如果您有一个比例目标变量(值范围0-1),则scikit-learn会遇到两个基本困难:
>分类器(例如逻辑回归)仅将类标签作为目标变量处理.作为一种解决方法,您可以简单地将概率阈值设置为0/1并将其解释为类标签,但是您会丢失大量信息.
>回归模型(如线性回归)不限制目标变量.您可以根据比例数据对它们进行训练,但不能保证看不见的数据的输出将被限制在0/1范围内.但是,在这种情况下,有一个强大的解决方法(下图).
有多种方法可以在数学上形成逻辑回归.其中之一是generalized linear model,它基本上将逻辑回归定义为对数转换概率的正态线性回归.通常,这种方法需要复杂的数学优化,因为概率是未知的,需要与回归系数一起估算.
但是,在您的情况下,概率是已知的.这意味着您可以使用y = log(p /(1-p))简单地转换它们.现在它们涵盖了从-oo到oo的全部范围,可以作为LinearRegression模型的目标变量[*].当然,然后需要再次转换模型输出以得到概率p = 1 /(exp(-y)1).
import numpy as np
from sklearn.linear_model import LinearRegression
class LogitRegression(LinearRegression):
def fit(self, x, p):
p = np.asarray(p)
y = np.log(p / (1 - p))
return super().fit(x, y)
def predict(self, x):
y = super().predict(x)
return 1 / (np.exp(-y) + 1)
if __name__ == '__main__':
# generate example data
np.random.seed(42)
n = 100
x = np.random.randn(n).reshape(-1, 1)
noise = 0.1 * np.random.randn(n).reshape(-1, 1)
p = np.tanh(x + noise) / 2 + 0.5
model = LogitRegression()
model.fit(x, p)
print(model.predict([[-10], [0.0], [1]]))
# [[ 2.06115362e-09]
# [ 5.00000000e-01]
# [ 8.80797078e-01]]
>还有许多其他选择.一些非线性回归模型可以在0-1范围内自然地工作.例如,Random Forest Regressors永远不会超过他们训练过的目标变量的范围.简单地说明概率,你就会得到概率.具有适当输出激活函数的神经网络(我猜),它也可以很好地处理概率,但是如果你想使用它们,那么有更多的专用库而不是sklearn.
[*]你可以插入任何可以使该方法更强大的任何linear回归模型,但它不再完全等同于逻辑回归.
内容总结
以上是互联网集市为您收集整理的python – 当目标变量是一个比例时如何使用sklearn全部内容,希望文章能够帮你解决python – 当目标变量是一个比例时如何使用sklearn所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。