我有一组数据,我想比较哪条线最好地描述它(不同顺序的多项式,指数或对数).
我使用Python和Numpy,对于多项式拟合,有一个函数polyfit().但我没有发现指数和对数拟合的这些函数.
有吗?或者如何解决呢?
我似乎找不到任何进行多重回归的python库.我发现的唯一的东西只做简单的回归.我需要对几个自变量(x1,x2,x3等)回归我的因变量(y).
例如,使用此数据:
print 'y x1 x2 x3 x4 x5 x6 x7'
for t in texts:
print "{:>7.1f}{:>10.2f}{:>9.2f}{:>9.2f}{:>10.2f}{:>7.2f}{:>7.2f}{:>9.2f}" /
.format(t.y,t.x1,t.x2,t.x3,t.x4,t.x5,t.x6,t.x7)
Run Code Online (Sandbox Code Playgroud)
(以上输出:)
y x1 x2 x3 x4 x5 x6 x7
-6.0 -4.95 -5.87 -0.76 14.73 4.02 0.20 0.45
-5.0 -4.55 -4.52 -0.71 13.74 4.47 0.16 0.50
-10.0 -10.96 -11.64 -0.98 15.49 4.18 0.19 0.53
-5.0 -1.08 -3.36 0.75 24.72 4.96 0.16 0.60
-8.0 -6.52 -7.45 -0.86 16.59 4.29 0.10 0.48
-3.0 -0.81 -2.36 -0.50 22.44 4.81 0.15 0.53
-6.0 -7.01 -7.33 -0.33 …Run Code Online (Sandbox Code Playgroud) 我正努力在ggplot上添加回归线.我首先尝试使用abline,但我没有设法让它工作.然后我尝试了这个......
data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50))
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) +
geom_smooth(method='lm',formula=data$y.plot~data$x.plot)
Run Code Online (Sandbox Code Playgroud)
但它也没有用.
如果我在回归中使用二进制解释变量,如何告诉R使用某个级别作为参考?
它只是默认使用某个级别.
lm(x ~ y + as.factor(b))
Run Code Online (Sandbox Code Playgroud)
与b {0, 1, 2, 3, 4}.假设我想使用3而不是R使用的零.
regression r linear-regression categorical-data dummy-variable
我想使用lm()函数在R中进行线性回归.我的数据是一年一度的时间序列,一年(22年),另一个州(50个州).我想为每个状态拟合一个回归,以便最后我有一个lm响应的向量.我可以想象为每个状态做循环然后在循环内进行回归并将每个回归的结果添加到向量.但是,这似乎不像R一样.在SAS中我会做一个'by'语句,在SQL中我会做'group by'.R的做法是什么?
我试图产生对我已经产生了散点图的线性回归,但是我的数据是在列表格式,所有的例子我能找到使用的polyfit要求使用arange.arange虽然不接受名单.我已经搜索了如何将列表转换为数组的高低,似乎没有什么是清楚的.我错过了什么吗?
接下来,我如何才能最好地使用整数列表作为输入polyfit?
这是我遵循的polyfit示例:
from pylab import *
x = arange(data)
y = arange(data)
m,b = polyfit(x, y, 1)
plot(x, y, 'yo', x, m*x+b, '--k')
show()
Run Code Online (Sandbox Code Playgroud) 在线性回归空间中使用Gradient Descent有什么好处?看起来我们可以通过分析方法解决问题(找到最小成本函数的θ0-n),那么为什么我们仍然希望使用梯度下降来做同样的事情呢?谢谢
def gradient(X_norm,y,theta,alpha,m,n,num_it):
temp=np.array(np.zeros_like(theta,float))
for i in range(0,num_it):
h=np.dot(X_norm,theta)
#temp[j]=theta[j]-(alpha/m)*( np.sum( (h-y)*X_norm[:,j][np.newaxis,:] ) )
temp[0]=theta[0]-(alpha/m)*(np.sum(h-y))
temp[1]=theta[1]-(alpha/m)*(np.sum((h-y)*X_norm[:,1]))
theta=temp
return theta
X_norm,mean,std=featureScale(X)
#length of X (number of rows)
m=len(X)
X_norm=np.array([np.ones(m),X_norm])
n,m=np.shape(X_norm)
num_it=1500
alpha=0.01
theta=np.zeros(n,float)[:,np.newaxis]
X_norm=X_norm.transpose()
theta=gradient(X_norm,y,theta,alpha,m,n,num_it)
print theta
Run Code Online (Sandbox Code Playgroud)
从上面的代码我的theta是100.2 100.2,但它应该100.2 61.09在matlab中是正确的.
python numpy machine-learning linear-regression gradient-descent
其他人的功能似乎都采用了公式对象,然后在内心深处对他们进行黑暗魔法,我很嫉妒.
我正在编写一个适合多个模型的函数.这些模型的公式部分保持不变,从一个模型到下一个模型的部分变化.笨拙的方法是让用户输入公式部分作为字符串,对它们进行一些字符操作,然后使用as.formula.
但在我走这条路之前,我只是想确保我不会忽略一些更干净的方式,它允许函数接受标准R格式的公式(例如从其他公式使用的对象中提取).
我想要像......
> LHS <- y~1; RHS <- ~a+b; c(LHS,RHS);
y ~ a + b
> RHS2 <- ~c;
> c(LHS, RHS, RHS2);
y ~ a + b + c
Run Code Online (Sandbox Code Playgroud)
要么...
> LHS + RHS;
y ~ a + b
> LHS + RHS + RHS2;
y ~ a + b + c
Run Code Online (Sandbox Code Playgroud)
...但不幸的是,两种语法都不起作用 有人知道是否有什么事情可以做到吗?谢谢.
numpy ×4
python ×4
r ×4
regression ×3
scipy ×2
data-mining ×1
ggplot2 ×1
lm ×1
matplotlib ×1
statistics ×1