如何在scikit-learn中修复奇怪的预测结果

时间:2019-01-13 06:14:54

标签: python machine-learning scikit-learn linear-regression

我在scikit-learn中有一个简单的预测示例。这是我的数据文件(data.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

功能包括:第一,第二和第三

目标包括:target1和target2

现在,我想为功能提供新值并预测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)相距甚远

有人知道这里出了什么问题以及如何解决此问题吗?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

Edit2:我的错误,就是1 / x

也..(下面的原始帖子) 我不是专家,但是看来您的输入要素不仅高度相关,而且实际上是完全相关的(线性相关),这通常会使回归中断。 直观的原因是,由于它们相互关联,因此存在无限数量的可能系数,它们相互抵消,并且预测仍将完全相同(在您的情况下,第一秒与第二秒至第三秒完全相同)或0first-1second等)。 我还认为这会导致线性回归的法线方程生成无法反转的矩阵。