Как получить исходные коэффициенты после выполнения регрессии на нормализованных данных без использования Scikit-Learn? - PullRequest
3 голосов
/ 22 апреля 2019

Я читаю данные из файла, используя 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

Я приступаю к нормализации этих данных для выполнения градиентного спуска:

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

Я выполняю многовариантную регрессию и в итоге получаю согласованные параметры для нормализованных данных:

Thetas:  [[ 0.31973117  0.45401309 -0.12941108]]

Я бы хотел построить плоскость наилучшего соответствия исходным данным, а не нормализованным данным , используя нормализованные тэты.

Я использовал scipy.optimize.curve_fit для выполнения многомерной линейной регрессии и придумал оптимально подобранные параметры. Я знаю, что оригинальные тэты должны быть близки к следующему:

[   0.26654135   -0.15218007 -107.79915373]

Как я могу получить «оригинальные» тэты для исходного набора данных для построения графика, без , используя Scikit-Learn?

Будут оценены любые предложения.


Согласно ответу ниже:

m
ldr1     731.891429
ldr2     714.080000
servo    -21.388571
dtype: float64
s
ldr1     168.392347
ldr2     187.583221
servo     52.904576
dtype: float64

Затем я продолжаю:

original_thetas = np.dot(theta, s) + m

, что дает:

original_thetas
ldr1     862.420572
ldr2     844.609144
servo    109.140572
dtype: float64

Я не уверен, правильно ли я выполняю вычисления или представленный метод не работает для самих коэффициентов.

1 Ответ

5 голосов
/ 22 апреля 2019

Я полагаю, вам просто нужно хранить среднее значение и стандартные отклонения

m = data.mean()
s = data.std()

А затем обратное преобразование

theta * s + m
...