是否有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) 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模型由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
有没有人知道Java中的科学/数学库可以直接实现加权线性回归?一个函数行的东西,它接受3个参数并返回相应的系数:
linearRegression(x,y,weights)
Run Code Online (Sandbox Code Playgroud)
这似乎相当简单,所以我想它存在于某个地方.
PS)我已经尝试过Flannigan的图书馆:http://www.ee.ucl.ac.uk/~mflanaga/java/Regression.html ,它有正确的想法,但似乎偶尔崩溃并抱怨我的自由度?
我正在尝试完善一种比较回归和PCA的方法,其灵感来自博客脑瘫痪,这也是从SO的不同角度进行讨论的.在我忘记之前,非常感谢JD Long和Josh Ulrich的大部分核心.我将在下学期的课程中使用它.对不起,这很长!
更新:我找到了一种几乎可以使用的不同方法(如果可以,请修复它!).我把它贴在了底部.比我能想出的更智能,更简洁的方法!
我基本上遵循了之前的方案,直到某一点:生成随机数据,找出最佳拟合线,绘制残差.这显示在下面的第二个代码块中.但我也在挖掘并编写了一些函数来通过随机点(在这种情况下为数据点)绘制垂直于直线的直线.我认为这些工作正常,它们在First Code Chunk中显示,并且证明它们有效.
现在,第二个代码块使用与@JDLong相同的流程显示整个操作,我正在添加一个结果图的图像.黑色,红色的数据是回归,残差是粉红色,蓝色是第一个PC,浅蓝色应该是法线,但显然它们不是.第一代码块中绘制这些法线的函数似乎很好,但是演示中的某些东西是不正确的:我认为我必须误解某些东西或传递错误的值.我的法线是水平的,这似乎是一个有用的线索(但到目前为止,不是我).有谁能看到这里有什么问题?
谢谢,这让我烦恼了一会儿......

第一个代码块(绘制法线和证明它们起作用的函数):
##### The functions below are based very loosely on the citation at the end
pointOnLineNearPoint <- function(Px, Py, slope, intercept) {
# Px, Py is the point to test, can be a vector.
# slope, intercept is the line to check distance.
Ax <- Px-10*diff(range(Px))
Bx <- Px+10*diff(range(Px))
Ay <- Ax * slope + intercept
By <- Bx * slope + intercept
pointOnLine(Px, Py, Ax, Ay, …Run Code Online (Sandbox Code Playgroud) 我尝试使用abline函数在散点图上创建一个线性回归线.
x= c (1.0325477, 0.6746901, 1.0845737, 1.1123872, 1.1060822, 0.8595918, 0.8512941, 1.0148842, 1.0722369, 0.9019220 , 0.8809147, 1.0358256, 0.9903858, 1.0715174 , 1.1034405, 1.0143966,0.9802365, 0.7177169 , 0.9190783, 0.8408701 )
y= c (0.8550177, 0.8352162 ,1.0236998, 1.1071665, 0.6768144, 0.8449983 ,0.7616483, 0.8259199, 1.1539598, 1.4125006, 1.0511816, 0.9366184, 1.4101268, 1.2937913, 1.4147219 ,1.2943105 ,0.7859749, 0.6689330, 0.6940164, 0.8093392)
plot(x,y)
abline(lm(y ~ x))
Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) :
plot.new has not been called yet
Run Code Online (Sandbox Code Playgroud)
请给我任何建议
我想使用pandas OLS函数来为我的数据系列拟合趋势线.有谁知道如何使用熊猫系列中的日期时间索引作为OLS中的预测器?
例如,假设我有一个简单的时间序列:
>>> ts
2001-12-31 19.828763
2002-12-31 20.112191
2003-12-31 19.509116
2004-12-31 19.913656
2005-12-31 19.701649
2006-12-31 20.022819
2007-12-31 20.103024
2008-12-31 20.132712
2009-12-31 19.850609
2010-12-31 19.290640
2011-12-31 19.936210
2012-12-31 19.664813
Freq: A-DEC
Run Code Online (Sandbox Code Playgroud)
我想使用索引作为预测器对其进行OLS:
model = pd.ols(y=ts,x=ts.index,intercept=True)
Run Code Online (Sandbox Code Playgroud)
但由于x是日期时间索引的列表,因此该函数返回错误.有人有想法吗?
我可以使用scipy.stats的linregress,但我想知道它是否可能与Pandas.
谢谢,格雷格
一般来说,SciKit和线性代数/机器学习相当新,所以我似乎无法解决以下问题:
我有一套训练集和一组测试数据,包含连续和离散/分类值.CSV文件加载到Pandas DataFrames中并匹配形状,即(1460,81)和(1459,81).但是,在使用Pandas的get_dummies后,DataFrame的形状变为(1460,306)和(1459,294).因此,当我使用SciKit线性回归模块进行线性回归时,它会为306个变量构建一个模型,并尝试使用它来预测一个只有294个变量的模型.这自然会导致以下错误:
ValueError: shapes (1459,294) and (306,1) not aligned: 294 (dim 1) != 306 (dim 0)
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个问题?我可以以某种方式重塑(1459年,294年)以匹配另一个吗?
谢谢,我希望我已经明确了:)
python machine-learning linear-regression pandas scikit-learn
我知道根均方误差$sigma的概念之间存在细微差别.所以,我想知道在R中获取RMSE 功能的最简单方法是什么?lm
res<-lm(randomData$price ~randomData$carat+
randomData$cut+randomData$color+
randomData$clarity+randomData$depth+
randomData$table+randomData$x+
randomData$y+randomData$z)
length(coefficients(res))
Run Code Online (Sandbox Code Playgroud)
包含24个系数,我不能再手动制作我的模型了.那么,我如何根据系数驱动来评估RMSE lm?
python ×4
r ×4
regression ×3
pandas ×2
scikit-learn ×2
statsmodels ×2
datetime ×1
java ×1
lm ×1
pca ×1
python-3.x ×1
ruby ×1
series ×1
statistics ×1