我试图在python中复制一个函数,并且能够使用数据框中的多个列来编写以下代码,但是想知道是否存在可以更有效地执行此操作的python回归函数。这是函数描述的链接。对不起,高级不是真正的统计人员。 :)
http://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Statistical/Inertia.html
它表明它的线性回归曲线使用最小二乘法来近似每组柱的数据。
输入y =关闭; 输入n = 20;
def x = x [1] + 1; #上一个值+ 1
def a =(n * Sum(x * y,n) - Sum(x,n)* Sum(y,n))/(n * Sum(Sqr(x),n)-Sqr(Sum( x,n)));
def b =(Sum(Sqr(x),n)* Sum(y,n) - Sum(x,n)* Sum(x * y,n))/(n * Sum(Sqr(x)) ,n) - Sqr(Sum(x,n)));
plot InertiaTS = a * x + b;
由于
更新
这里是pandas列和函数。我首先定义了xValue和yValue列,然后是以下原始计算:
df['ind1']= ((10 * (df['xValue']*df['ysValue']).rolling(10, min_periods=10).sum() - df['xValue'].rolling(10, min_periods=10).sum()*df['ysValue'].rolling(10, min_periods=10).sum())/ (10 * (df['xValue'] ** 2).rolling(10, min_periods=10).sum() - (df['xValue'].rolling(10, min_periods=10).sum())**2)) * df['xValue'] + (((df['xValue'] ** 2).rolling(10, min_periods=10).sum()*df['ysValue'].rolling(10, min_periods=10).sum() - df['xValue'].rolling(10, min_periods=10).sum()*(df['xValue']*df['ysValue']).rolling(10, min_periods=10).sum())/(10 * (df['xValue'] ** 2).rolling(10, min_periods=10).sum() - (df['xValue'].rolling(10, min_periods=10).sum())**2))
答案 0 :(得分:2)
目前还不清楚你是在寻找在python中执行回归的方法,还是想自己编写算法代码。
如果您想要一个包进行回归,可以查看scikit-learn
使用,
from sklearn import linear_model
linear_model.LinearRegression()
如果您想编写自己的算法代码,可以查看gradient descent
。你可以看看Andrew Ng关于课程的视频 - https://www.coursera.org/learn/machine-learning/lecture/GFFPB/gradient-descent-intuition。对算法进行编码非常直观,步骤如下,
我。定义成本函数 - 这是基于OLS(普通最小二乘)看起来像,
J = 1/2 (h(x) - y ) ^2
II。取每个特征或j的成本函数的偏导数。这里X是由n个特征组成的输入向量,其中一个特征是j。
III。使用渐变下降更新特征向量 -
theta = theta - alpha * (partial derivative)
您可以在Andrew Ng的papaper http://cs229.stanford.edu/notes/cs229-notes1.pdf
抱歉,很难将乳胶放在SO
上