m33*_*lky 1 python scikit-learn
有一些标准方法可以预测比例,例如逻辑回归(没有阈值处理)和β回归.关于这个已经有过讨论:
http://scikit-learn-general.narkive.com/lLVQGzyl/beta-regression
我不知道sklearn框架内是否存在解决方法.
存在一个解决办法,但它本质上不是内的sklearn框架.
如果您有一个比例目标变量(值范围0-1),则scikit-learn会遇到两个基本困难:
有多种方法可以在数学上形成逻辑回归.其中之一是广义线性模型,它基本上将逻辑回归定义为对数转换概率的正态线性回归.通常,这种方法需要复杂的数学优化,因为概率是未知的,需要与回归系数一起估算.
但是,在您的情况下,概率是已知的.这意味着你可以简单地转换它们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]]
Run Code Online (Sandbox Code Playgroud)
tanh我猜)也可以很好地处理概率,但是如果你想使用它们,那么有更多专业的库而不是sklearn.[*]你实际上可以插入任何 可以使该方法更强大的线性回归模型,但它不再完全等同于逻辑回归.