我已经在Stack Overflow上多次看到成对或一般配对的简单线性回归.这是一个针对此类问题的玩具数据集.
set.seed(0)
X <- matrix(runif(100), 100, 5, dimnames = list(1:100, LETTERS[1:5]))
b <- c(1, 0.7, 1.3, 2.9, -2)
dat <- X * b[col(X)] + matrix(rnorm(100 * 5, 0, 0.1), 100, 5)
dat <- as.data.frame(dat)
pairs(dat)
Run Code Online (Sandbox Code Playgroud)
所以基本上我们想要计算5*4 = 20个回归线:
----- A ~ B A ~ C A ~ D A ~ E
B ~ A ----- B ~ C B ~ D B ~ E
C ~ A C ~ B ----- C ~ D C ~ E
D ~ …Run Code Online (Sandbox Code Playgroud) 我正在执行如下所示的最小二乘回归(单变量).我想用R ^ 2来表达结果的重要性.Numpy返回一个未缩放残差的值,这将是一种正常化的合理方法.
field_clean,back_clean = rid_zeros(backscatter,field_data)
num_vals = len(field_clean)
x = field_clean[:,row:row+1]
y = 10*log10(back_clean)
A = hstack([x, ones((num_vals,1))])
soln = lstsq(A, y )
m, c = soln [0]
residues = soln [1]
print residues
Run Code Online (Sandbox Code Playgroud) 是否有Ruby库允许我对一组数据进行线性或非线性最小二乘近似.
我想做的是以下内容:
我不想尝试移植一些C/C++/Java库来获得这个功能,所以我希望有一些我可以使用的现有Ruby库.
我们将树的直径作为预测因子,树高作为因变量.对于这种数据存在许多不同的方程式,我们尝试对其中的一些进行建模并比较结果.
但是,我们无法弄清楚如何正确地将一个方程式放入相应的R formula格式中.
该trees数据组中R,可以使用,例如,
data(trees)
df <- trees
df$h <- df$Height * 0.3048 #transform to metric system
df$dbh <- (trees$Girth * 0.3048) / pi #transform tree girth to diameter
Run Code Online (Sandbox Code Playgroud)
首先,似乎运作良好的等式的例子:

form1 <- h ~ I(dbh ^ -1) + I( dbh ^ 2)
m1 <- lm(form1, data = df)
m1
Call:
lm(formula = form1, data = df)
Coefficients:
(Intercept) I(dbh^-1) I(dbh^2)
27.1147 -5.0553 0.1124
Run Code Online (Sandbox Code Playgroud)
系数a,b并c估计,这是我们感兴趣的.
现在有问题的等式:

试着像这样适合它:
form2 <- …Run Code Online (Sandbox Code Playgroud) 我正在为一些有限大小的物理系统进行计算机模拟,之后我正在对无穷大进行外推(热力学极限).一些理论认为数据应该随着系统规模线性扩展,所以我做的是线性回归.
我的数据有噪音,但对于每个数据点,我可以估算出错误.因此,例如数据点看起来像:
x_list = [0.3333333333333333, 0.2886751345948129, 0.25, 0.23570226039551587, 0.22360679774997896, 0.20412414523193154, 0.2, 0.16666666666666666]
y_list = [0.13250359351851854, 0.12098339583333334, 0.12398501145833334, 0.09152715, 0.11167239583333334, 0.10876248333333333, 0.09814170444444444, 0.08560799305555555]
y_err = [0.003306749165349316, 0.003818446389148108, 0.0056036878203831785, 0.0036635292592592595, 0.0037034897788415424, 0.007576672222222223, 0.002981084130692832, 0.0034913019065973983]
Run Code Online (Sandbox Code Playgroud)
假设我试图在Python中执行此操作.
我知道的第一种方式是:
m, c, r_value, p_value, std_err = scipy.stats.linregress(x_list, y_list)
Run Code Online (Sandbox Code Playgroud)
我理解这给了我结果的错误栏,但这没有考虑初始数据的错误栏.
我知道的第二种方式是:
m, c = numpy.polynomial.polynomial.polyfit(x_list, y_list, 1, w = [1.0 / ty for ty in y_err], full=False)
Run Code Online (Sandbox Code Playgroud)这里我们使用每个点的误差条的倒数作为在最小二乘近似中使用的权重.因此,如果一个点不是那么可靠,那么它不会对结果造成太大影响,这是合理的.
但我无法弄清楚如何获得结合这两种方法的东西.
我真正想要的是第二种方法的作用,意思是当每个点都影响不同权重的结果时使用回归.但与此同时,我想知道我的结果有多准确,这意味着,我想知道结果系数的误码是什么.
我怎样才能做到这一点?
我最近一直试图了解Apache Spark作为Scikit Learn的替代品,但在我看来,即使在简单的情况下,Scikit也会比Spark更快地收敛到精确模型.例如,我使用以下脚本为非常简单的线性函数(z = x + y)生成了1000个数据点:
from random import random
def func(in_vals):
'''result = x (+y+z+w....)'''
result = 0
for v in in_vals:
result += v
return result
if __name__ == "__main__":
entry_count = 1000
dim_count = 2
in_vals = [0]*dim_count
with open("data_yequalsx.csv", "w") as out_file:
for entry in range(entry_count):
for i in range(dim_count):
in_vals[i] = random()
out_val = func(in_vals)
out_file.write(','.join([str(x) for x in in_vals]))
out_file.write(",%s\n" % str(out_val))
Run Code Online (Sandbox Code Playgroud)
然后我运行了以下Scikit脚本:
import sklearn
from sklearn import linear_model
import numpy as np …Run Code Online (Sandbox Code Playgroud) machine-learning linear-regression scikit-learn apache-spark
val tvalues: Array[Double] = Array(1.866393526974307, 2.864048126935307, 4.032486069215076, 7.876169953355888, 4.875333799256043, 14.316322626848278)
val pvalues: Array[Double] = Array(0.064020056478447, 0.004808399479386827, 8.914865448939047E-5, 7.489564524121306E-13, 2.8363794106756046E-6, 0.0)
Run Code Online (Sandbox Code Playgroud)
我有两个如上所述的数组,我需要从这个数组构建一个DataFrame,如下所示,
Tvalues Pvalues
1.866393526974307 0.064020056478447
2.864048126935307 0.004808399479386827
...... .....
Run Code Online (Sandbox Code Playgroud)
截至目前我StringBuilder在Scala 尝试.没有按预期进行.请帮帮我.
OLSResults of
df2 = pd.read_csv("MultipleRegression.csv")
X = df2[['Distance', 'CarrierNum', 'Day', 'DayOfBooking']]
Y = df2['Price']
X = add_constant(X)
fit = sm.OLS(Y, X).fit()
print(fit.summary())
Run Code Online (Sandbox Code Playgroud)
将每个属性的P值显示为仅3个小数位.
我需要为每个属性提取p值等Distance,CarrierNum并以科学计数法打印出来.
余可使用提取的系数fit.params[0]或fit.params[1]等
需要获得所有P值.
所有P值为0的意思是什么?
我尝试为波士顿数据集安装OLS.我的图表如下所示.
如何在线上方或图中某处注释线性回归方程?如何在Python中打印方程式?
我是这个领域的新手.到目前为止探索python.如果有人可以帮助我,它会加快我的学习曲线.
非常感谢!
我也尝试过这个.
我的问题是 - 如何在方程式格式中对图中的上述进行注释?
我意外地注意到,当不适合拦截时,OLS模型由R ^ 2 实现sklearn并statsmodels产生不同的R ^ 2值.否则他们似乎工作正常.以下代码产生:
import numpy as np
import sklearn
import statsmodels
import sklearn.linear_model as sl
import statsmodels.api as sm
np.random.seed(42)
N=1000
X = np.random.normal(loc=1, size=(N, 1))
Y = 2 * X.flatten() + 4 + np.random.normal(size=N)
sklernIntercept=sl.LinearRegression(fit_intercept=True).fit(X, Y)
sklernNoIntercept=sl.LinearRegression(fit_intercept=False).fit(X, Y)
statsmodelsIntercept = sm.OLS(Y, sm.add_constant(X))
statsmodelsNoIntercept = sm.OLS(Y, X)
print(sklernIntercept.score(X, Y), statsmodelsIntercept.fit().rsquared)
print(sklernNoIntercept.score(X, Y), statsmodelsNoIntercept.fit().rsquared)
print(sklearn.__version__, statsmodels.__version__)
Run Code Online (Sandbox Code Playgroud)
打印:
0.78741906105 0.78741906105
-0.950825182861 0.783154483028
0.19.1 0.8.0
Run Code Online (Sandbox Code Playgroud)
差异来自哪里?
问题不同于不同的线性回归系数与statsmodels和sklearn,因为那里sklearn.linear_model.LinearModel(有截距)适合X准备的statsmodels.api.OLS.
问题不同于 Statsmodels:计算拟合值和R平方, 因为它解决了两个Python包( …
python linear-regression python-3.x scikit-learn statsmodels
python ×5
numpy ×2
python-3.x ×2
r ×2
regression ×2
scikit-learn ×2
statsmodels ×2
apache-spark ×1
arrays ×1
lm ×1
matplotlib ×1
performance ×1
ruby ×1
scala ×1
seaborn ×1
statistics ×1