0

我如何用回归来描述这些点?在示例中, LinearRegression不适合点的逻辑分布。LogisticRegression()fromsklearn只接受二进制数据。 我的 y 值从 0 到 1 是连续的。我是否必须转换数据或如何获得合适的模型?

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression

a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14])
b = [0,0,0.01,0.08,0.16,00.28,0.5,0.66,0.8,0.9,0.95,0.99,1,1]
data = pd.DataFrame({'x': a, 'y':b})

LM = LinearRegression()
LM.fit(data[["x"]],data[["y"]])

plt.scatter(a,b)
plt.plot([1,14], LM.predict([[1],[14]]), color = "red")
plt.show() 

LogM = LogisticRegression()
LogM.fit(data[["x"]],data[["y"]])  # doesn't work

带线性模型的散点图
在此处输入图像描述

4

1 回答 1

2

逻辑回归通常用于对标签进行分类,即使它输出介于 0 和 1 之间的实数。这就是 sklearn 需要二进制数据的原因y:以便它可以训练模型。

在您的情况下,您有一个 sigmoid 函数s(x)=1/(1+exp(alpha*x + beta)),并且您想找到alphaand beta。我认为最简单的方法是首先转换您的数据:

new_a = a[2:-2]
new_b = np.array(b[2:-2]) # Getting rid of 0 and 1 values
new_b = np.log((1 / new_b) - 1)

现在new_b是一个数组,其值在表单下alpha*new_a + beta,因此您可以在其上训练LinearRegression模型以查找alpha

model = LinearRegression()
model.fit(new_a.reshape(-1, 1), new_b.reshape(-1, 1))
alpha = model.coef_[0, 0]
beta = l.predict([[0]])[0, 0]

最后,您可以看到测试是否符合您的预期:

predicted = 1 / (1 + np.exp(alpha * a + beta))
plt.figure()
plt.plot(a, b)
plt.plot(a, predicted)
plt.show()

在此处输入图像描述

于 2020-06-27T15:19:03.960 回答