使用回归-区分两个数据框列是线性函数还是多项式函数?

时间:2019-07-06 07:38:45

标签: scikit-learn linear-regression statsmodels

在具有E或F列的6列(A B C D E F)的数据帧中,一个是前4列具有不同系数的线性组合,而另一列是相同输入的多项式函数。 找出哪一列是线性函数,哪一列是多项式函数。

从数据框中提供30个样本(总共512行)

       A     B       C      D       E        F
0   28400   28482   28025   28060   738.0   117.570740
1   28136   28382   28135   28184   -146.0  295.430176
2   28145   28255   28097   28119   30.0    132.123714
3   28125   28192   27947   27981   357.0   101.298064
4   28060   28146   27981   28007   124.0   112.153318
5   27995   28100   27945   28022   149.0   182.427089
6   28088   28195   27985   28019   167.0   141.255137
7   28049   28157   27996   28008   22.0    120.069010
8   28025   28159   28025   28109   34.0    218.401641
9   28170   28638   28170   28614   420.0   919.376358
10  28666   28980   28551   28710   234.0   475.389093
11  28660   28779   28531   28634   345.0   222.895307
12  28590   28799   28568   28783   265.0   425.738484
13  28804   28930   28740   28808   138.0   194.449548
14  28770   28770   28650   28719   378.0   69.289005
15  28769   28770   28600   28638   413.0   39.225874
16  28694   28866   28674   28847   214.0   346.158401
17  28843   28928   28807   28874   121.0   152.281425
18  28921   28960   28680   28704   491.0   63.234310
19  28683   28950   28628   28905   397.0   547.115621
20  28877   28877   28712   28749   404.0   37.212629
21  28685   29011   28680   28949   222.0   598.104568
22  29045   29180   29045   29111   -3.0    201.306765
23  29220   29499   29216   29481   259.0   546.566915
24  29439   29485   29310   29376   344.0   112.394063
25  29319   29345   28951   29049   906.0   125.333702
26  29001   29009   28836   28938   526.0   110.611943
27  28905   28971   28851   28917   174.0   132.274514
28  28907   28916   28711   28862   685.0   161.078158
29  28890   29025   28802   28946   329.0   280.114923

对(总共512行)进行线性回归
A B C D列作为输入,E列作为目标值。
输出-
拦截[-2.67164069e-12]
系数[[2. 3. -1。 -4。]]

A B C D列为输入,F列为目标值。
输出-
拦截[0.32815962]
系数[[1.01293825 -1.0003835 1.00503772 -1.01765453]]

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

For column E
x = df.iloc[:, :4].values
y = df.iloc[:, [4]].values

regressor = LinearRegression()
regressor.fit(x, y)
print(regressor.intercept_)
print(regressor.coef_)

output
[-2.67164069e-12]
[[ 2.  3. -1. -4.]]

For column F
x_new = df.iloc[:, :4].values
y_new = df.iloc[:, [5]].values

regressor_new = LinearRegression()
regressor_new.fit(x_new, y_new)
print(regressor_new.intercept_)
print(regressor_new.coef_)

output
[0.32815962]
[[ 1.01293825 -1.0003835   1.00503772 -1.01765453]]

2列中的一列是前4列具有不同系数的线性组合,而另一列是相同输入的多项式函数。

提到哪一列是线性函数,哪一列是多项式。

2 个答案:

答案 0 :(得分:0)

我认为可以通过检查列之间的多重共线性来找到具有线性组合的列。因此,作为剩余列线性组合的列将具有较高的VIF。

答案 1 :(得分:0)

尝试绘制两列的图形(直方图),并查看是否可以根据该图形将函数标识为线性还是多项式。