在不使用Scikit-Learn对归一化数据执行回归后如何检索原始系数?

Rrz*_*rz0 3 python machine-learning linear-regression

我正在从文件中读取数据,该文件pandas如下所示:

data.head()

   ldr1  ldr2  servo
0   971   956     -2
1   691   825   -105
2   841   963    -26
3   970   731     44
4   755   939    -69
Run Code Online (Sandbox Code Playgroud)

我继续将这些数据标准化以执行梯度下降:

my_data = (my_data - my_data.mean())/my_data.std()
my_data.head()

       ldr1      ldr2     servo
0  1.419949  1.289668  0.366482
1 -0.242834  0.591311 -1.580420
2  0.647943  1.326984 -0.087165
3  1.414011  0.090200  1.235972
4  0.137231  1.199041 -0.899949
Run Code Online (Sandbox Code Playgroud)

我执行多元回归并以归一化数据上的拟合参数结束:

Thetas:  [[ 0.31973117  0.45401309 -0.12941108]]
Run Code Online (Sandbox Code Playgroud)

我想将最适合的平面绘制在原始数据上,而不是使用归一化theta 的归一化数据

我曾经scipy.optimize.curve_fit执行多元线性回归,并提出了最佳拟合参数。我知道原始thetas应该接近以下值:

[   0.26654135   -0.15218007 -107.79915373]
Run Code Online (Sandbox Code Playgroud)

如何在使用Scikit-Learn的情况下获得原始数据集的“原始” theta 以便进行绘制?

任何建议将不胜感激。


按照下面的答案:

m
ldr1     731.891429
ldr2     714.080000
servo    -21.388571
dtype: float64
s
ldr1     168.392347
ldr2     187.583221
servo     52.904576
dtype: float64
Run Code Online (Sandbox Code Playgroud)

然后,我继续:

original_thetas = np.dot(theta, s) + m
Run Code Online (Sandbox Code Playgroud)

产生:

original_thetas
ldr1     862.420572
ldr2     844.609144
servo    109.140572
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我不确定是否执行错误的计算,或者所提供的方法对系数本身不起作用。

Ken*_*yme 5

我相信您只需要存储平均值和标准偏差

m = data.mean()
s = data.std()
Run Code Online (Sandbox Code Playgroud)

然后逆变换

theta * s + m
Run Code Online (Sandbox Code Playgroud)

  • @desertnaut我经常想一想,将其自身应用于系数时是否正确! (2认同)
  • 感谢您的见解。是的,这适用于数据,将尝试系数并回复您。 (2认同)