如何在scikitlearn中修复奇怪的预测结果

2024-04-23 07:16:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的例子,在scikit学习预测。这是我的数据文件(数据.csv)地址:

first second third target1 target2
 800   400    240    400     25
 400   200    120    200     50
 200   100    60     100     100
 100   50     30     50      200
 50    25     15     25      400

特征包括:第一、第二和第三

目标包括:目标1和目标2

现在我想为这些特性提供新的值,并预测target1和target2。如您所见,特征值与target1和target2的值之间存在一种趋势:

通过将功能值加倍,target1的值也会加倍,而target2的值会减半

例如,如果我为第一个、第二个和第三个特性提供值:1600、800和480,那么我希望target1和target2分别得到800和12.5。代码如下:

import pandas as pd
from sklearn.model_selection import train_test_split
from collections import *
from sklearn.linear_model import LinearRegression

features = pd.read_csv('data.csv')

features.head()
features_name = ['first' , 'second' , 'third']
target_name = ['target1','target2']

X = features[features_name]
y = features[target_name]

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.155, random_state = 42)

linear_regression_model = LinearRegression()
linear_regression_model.fit(X_train,y_train)

new_data  = OrderedDict([('first',1600) ,('second',800),('third',480) ])
new_data = pd.Series(new_data).values.reshape(1,-1)
ss = linear_regression_model.predict(new_data)

print (ss)

以下是输出:

[[ 800.         -284.58549223]]

如您所见,target1的预测值正是预期值而target2的预测值(-284.58)与预期值(12.5)相差甚远

有人知道这里出了什么问题吗?我怎样才能解决这个问题?事先谢谢你的帮助。你知道吗


Tags: csvnametestimportnewdatamodeltrain
1条回答
网友
1楼 · 发布于 2024-04-23 07:16:39

编辑:在你的输入(其中任何一个,基本上都是相同的)和你的target2之间没有线性关系。似乎是指数衰减。尝试将您的特征转换为另一个特征(1/exp(x)),然后您可以对该特征进行线性回归

我错了,只是1/x

还有。。(原文如下) 我不是专家,但你的输入特征似乎不仅高度相关,它们实际上是完全相关的(即线性相关)-这通常会导致回归中断。 直观的原因是,因为它们是相关的,存在着无限多的可能系数,它们相互反作用,预测结果仍然是完全相同的(想象一下,在你的例子中,第一秒与2first-3second或0first-1second等完全相同)。 我还认为这会导致线性回归的正态方程产生一个不能反转的矩阵。。你知道吗

相关问题 更多 >