我正在使用pandas
从文件中读取数据,数据如下所示:
data.head() ldr1 ldr2 servo0 971 956 -21 691 825 -1052 841 963 -263 970 731 444 755 939 -69
接着,我对数据进行归一化处理以进行梯度下降:
my_data = (my_data - my_data.mean())/my_data.std()my_data.head() ldr1 ldr2 servo0 1.419949 1.289668 0.3664821 -0.242834 0.591311 -1.5804202 0.647943 1.326984 -0.0871653 1.414011 0.090200 1.2359724 0.137231 1.199041 -0.899949
我进行了多元回归,并在归一化数据上得到了拟合参数:
Thetas: [[ 0.31973117 0.45401309 -0.12941108]]
我想在原始数据而不是归一化数据上绘制最佳拟合平面,使用归一化的theta值。
我使用scipy.optimize.curve_fit
进行多元线性回归,并得出了最优拟合参数。我知道原始的theta值应该接近以下数值:
[ 0.26654135 -0.15218007 -107.79915373]
如何在不使用Scikit-Learn的情况下,获取用于绘图的原始数据集的’原始’theta值?
任何建议都将不胜感激。
根据下面的回答:
mldr1 731.891429ldr2 714.080000servo -21.388571dtype: float64sldr1 168.392347ldr2 187.583221servo 52.904576dtype: float64
然后我继续进行如下操作:
original_thetas = np.dot(theta, s) + m
这产生了以下结果:
original_thetasldr1 862.420572ldr2 844.609144servo 109.140572dtype: float64
我不确定我是否计算错误,或者所展示的方法是否不适用于系数本身。
回答:
我认为你只需要存储均值和标准差
m = data.mean()s = data.std()
然后反转变换
theta * s + m