Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将范围添加到sklearn';s线性回归预测_Python_Machine Learning_Scikit Learn_Linear Regression - Fatal编程技术网

Python 如何将范围添加到sklearn';s线性回归预测

Python 如何将范围添加到sklearn';s线性回归预测,python,machine-learning,scikit-learn,linear-regression,Python,Machine Learning,Scikit Learn,Linear Regression,我想知道在拟合模型之前,是否有办法为预测增加一个范围 我的列车数据中的变量在技术上是一个百分比分数,但当我预测我的测试集时,我得到负值或值>100 目前,我正在手动规范化预测列表。我也曾切断负片和>100,然后分配0和100 然而,只有当fit函数能够意识到这个约束时,它才有意义,对吗 以下是数据的示例行: test_df = pd.DataFrame([[0, 40, 28, 30, 40, 22, 60, 40, 21, 0, 85, 29, 180, 85, 36, 741, 25.0]]

我想知道在拟合模型之前,是否有办法为预测增加一个范围

我的列车数据中的变量在技术上是一个百分比分数,但当我预测我的测试集时,我得到负值或值>100

目前,我正在手动规范化预测列表。我也曾切断负片和>100,然后分配0和100

然而,只有当fit函数能够意识到这个约束时,它才有意义,对吗

以下是数据的示例行:

test_df = pd.DataFrame([[0, 40, 28, 30, 40, 22, 60, 40, 21, 0, 85, 29, 180, 85, 36, 741, 25.0]], columns=['theta_1', 'phi_1', 'value_1', 'theta_2', 'phi_2', 'value_2', 'theta_3', 'phi_3', 'value_3', 'theta_4', 'phi_4', 'value_4', 'theta_5', 'phi_5', 'value_5', 'sum_readings', 'estimated_volume'])
我一直在阅读,很多人认为这不是一个线性回归问题,但他们的逻辑不健全。此外,有人说可以应用对数标度,但这仅适用于与阈值进行比较的情况,即手动分类,即使用线性回归解决逻辑回归问题!在我的例子中,我需要百分比,因为它们是必需的输出


非常感谢您的反馈/想法。

有些算法不会提出超出范围的预测值,如sklearn.neighborsressegator或sklearn.employee.randomforestressegator

线性回归器可以给出超出目标范围的值,例如:

from sklearn.ensemble import RandomForestRegressor
import numpy as np
from sklearn.linear_model import LinearRegression

y = np.linspace(0,1,100)
X = 2* y
X = X.reshape(-1,1)

>>>> rf.predict(np.array([[4.]])), lr.predict(np.array([[4.]]))
# (array([0.9979798]), array([2.]))
但是您可以使用一个技巧:您可以将[0,1]空间映射到[-inf,inf]空间,并在预测后返回初始空间

下面是使用sigmoid的示例:

def sigmoid(x):
    return 1/(1+np.exp(-x))

def sigmoid_m1(x):
    return -np.log((1/x)-1)

rf = RandomForestRegressor()
lr = LinearRegression()
rf.fit(X,sigmoid_m1(y*0.9+0.05))
lr.fit(X,sigmoid_m1(y*0.9+0.05))
>>>> sigmoid(rf.predict(np.array([[4.]]))), sigmoid(lr.predict(np.array([[4.]])))
# (array([0.9457559]), array([0.99904361]))

使用这种解决方案时要小心,因为你完全改变了数据的分布,这会产生很多问题。

请提供你的列车数据样本。这是我的df的第一个元素:0 0 40 28 30 40 22 60 40 21 90…70 37 0 85 29 180 85 36 741 25.0第一个0是索引,第二个是数据。请阅读并编辑问题,添加一个可复制的小例子。谢谢,马库斯。会给它一个阅读,并在这方面肯定会有所改进。谢谢你,吉萨特。测试其他模型已经在待办事项中了,但是感谢您确保我走上了正确的道路。关于输出映射,您提到的原因正是我不愿意向上映射输出的原因,因此我决定简单地对其进行规范化。但是,我相信它们对分布的影响是相同的。