标签: linear-regression

最优两变量线性回归计算

问题

我希望将y = mx + b等式(其中m是SLOPE,b是INTERCEPT)应用于数据集,该数据集如SQL代码中所示进行检索.(MySQL)查询的值是:

SLOPE = 0.0276653965651912
INTERCEPT = -57.2338357550468
Run Code Online (Sandbox Code Playgroud)

SQL代码

SELECT
  ((sum(t.YEAR) * sum(t.AMOUNT)) - (count(1) * sum(t.YEAR * t.AMOUNT))) /
  (power(sum(t.YEAR), 2) - count(1) * sum(power(t.YEAR, 2))) as SLOPE,

  ((sum( t.YEAR ) * sum( t.YEAR * t.AMOUNT )) -
  (sum( t.AMOUNT ) * sum(power(t.YEAR, 2)))) /
  (power(sum(t.YEAR), 2) - count(1) * sum(power(t.YEAR, 2))) as INTERCEPT,
FROM
(SELECT
  D.AMOUNT,
  Y.YEAR
FROM
  CITY C, STATION S, YEAR_REF Y, MONTH_REF M, DAILY D …
Run Code Online (Sandbox Code Playgroud)

mysql sql statistics linear-regression

12
推荐指数
1
解决办法
4493
查看次数

矢量自回归模型拟合与scikit学习

我正在尝试使用scikit-learn中包含的广义线性模型拟合方法拟合向量自回归(VAR)模型.线性模型的形式为y = X w,但系统矩阵X具有非常独特的结构:它是块对角线,并且所有块都是相同的.为了优化性能和内存消耗,模型可以表示为Y = BW,其中B是来自X的块,YW现在是矩阵而不是向量.LinearRegression,Ridge,RidgeCV,Lasso和ElasticNet类很容易接受后一种模型结构.但是,由于Y是二维的,因此适合LassoCV或ElasticNetCV失败.

我发现https://github.com/scikit-learn/scikit-learn/issues/2402 从这个讨论中,我假定LassoCV/ElasticNetCV的行为意图.除了手动实现交叉验证之外,有没有办法优化alpha/rho参数?

此外,scikit-learn中的贝叶斯回归技术也期望y是一维的.有没有办法解决?

注意:我使用scikit-learn 0.14(稳定)

python machine-learning linear-regression model-fitting scikit-learn

12
推荐指数
1
解决办法
4928
查看次数

当矩阵乘法对系数工作正常时,为什么lm会耗尽内存?

我试图用R做固定效应线性回归.我的数据看起来像

dte   yr   id   v1   v2
  .    .    .    .    .
  .    .    .    .    .
  .    .    .    .    .
Run Code Online (Sandbox Code Playgroud)

然后我决定通过制作yr一个因子并使用它来做到这一点lm:

lm(v1 ~ factor(yr) + v2 - 1, data = df)
Run Code Online (Sandbox Code Playgroud)

但是,这似乎耗尽了内存.我的因素有20个级别,df有1400万行,大约需要2GB才能存储,我在22 GB专用于这个过程的机器上运行它.

于是我决定尝试的东西的老式方法:为每一个我多年的虚拟变量t1t20这样做:

df$t1 <- 1*(df$yr==1)
df$t2 <- 1*(df$yr==2)
df$t3 <- 1*(df$yr==3)
...
Run Code Online (Sandbox Code Playgroud)

并简单地计算:

solve(crossprod(x), crossprod(x,y))
Run Code Online (Sandbox Code Playgroud)

这没有问题,几乎立即产生答案.

我特别好奇当我能够很好地计算系数时,lm会使内存耗尽吗?谢谢.

memory regression r linear-regression lm

11
推荐指数
5
解决办法
1782
查看次数

为什么LASSO在sklearn(python)和matlab统计包中有所不同?

我使用LaasoCVfrom sklearn来选择最佳模型是通过交叉验证选择的.我发现如果我使用sklearn或matlab统计工具箱,交叉验证会得到不同的结果.

我使用matlab并复制了http://www.mathworks.se/help/stats/lasso-and-elastic-net.html中给出的示例 来获取这样的数字

在此输入图像描述

然后我保存了matlab数据,并尝试用laaso_pathfrom 复制数字sklearn,我得到了

在此输入图像描述

虽然这两个数字之间有一些相似之处,但也存在一定的差异.据我所知,参数lambdain matlabalphain sklearn是相同的,但是在这个图中似乎存在一些差异.有人可以指出哪一个是正确的,还是我错过了什么?此外,获得的系数也不同(这是我主要关心的问题).

Matlab代码:

rng(3,'twister') % for reproducibility
X = zeros(200,5);
for ii = 1:5
      X(:,ii) = exprnd(ii,200,1);
end
r = [0;2;0;-3;0];
Y = X*r + randn(200,1)*.1;

save randomData.mat % To be used in python code

[b fitinfo] = lasso(X,Y,'cv',10);
lassoPlot(b,fitinfo,'plottype','lambda','xscale','log');

disp('Lambda with min MSE')
fitinfo.LambdaMinMSE
disp('Lambda with 1SE')
fitinfo.Lambda1SE
disp('Quality of Fit')
lambdaindex = …
Run Code Online (Sandbox Code Playgroud)

python statistics matlab linear-regression scikit-learn

11
推荐指数
1
解决办法
4461
查看次数

使用带有statsmodel的OLS模型预测值

我使用OLS(多元线性回归)计算了一个模型.我将数据分为训练和测试(每半个),然后我想预测标签的下半部分的值.

model = OLS(labels[:half], data[:half])
predictions = model.predict(data[half:])
Run Code Online (Sandbox Code Playgroud)

问题是我得到并且错误:文件"/usr/local/lib/python2.7/dist-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/regression/linear_model.py" ,第281行,预测返回np.dot(exog,params)ValueError:矩阵未对齐

我有以下数组形状:data.shape:(426,215)labels.shape:(426,)

如果我将输入转置为model.predict,我会得到一个结果,但形状为(426,213),所以我认为它也是错误的(我希望一个213个数字的向量作为标签预测):

model.predict(data[half:].T)
Run Code Online (Sandbox Code Playgroud)

知道如何让它工作吗?

python linear-regression pandas statsmodels

11
推荐指数
2
解决办法
3万
查看次数

predict.lm()如何计算置信区间和预测区间?

我跑回了一个回归:

CopierDataRegression <- lm(V1~V2, data=CopierData1)
Run Code Online (Sandbox Code Playgroud)

我的任务是获得一个

  • 给出和 的平均响应的90%置信区间V2=6
  • 预测间隔为 90%时V2=6.

我使用了以下代码:

X6 <- data.frame(V2=6)
predict(CopierDataRegression, X6, se.fit=TRUE, interval="confidence", level=0.90)
predict(CopierDataRegression, X6, se.fit=TRUE, interval="prediction", level=0.90)
Run Code Online (Sandbox Code Playgroud)

我得到了(87.3, 91.9),(74.5, 104.8)这似乎是正确的,因为PI应该更宽.

两者的输出也包括在内se.fit = 1.39.我不明白这个标准错误是什么.PI与CI之间的标准错误不应该更大吗?如何在R中找到这两个不同的标准错误? 在此输入图像描述


数据:

CopierData1 <- structure(list(V1 = c(20L, 60L, 46L, 41L, 12L, 137L, 68L, 89L, 
          4L, 32L, 144L, 156L, 93L, 36L, 72L, 100L, 105L, 131L, 127L, 57L, 
          66L, 101L, 109L, 74L, 134L, 112L, 18L, 73L, 111L, 96L, 123L, 
          90L, 20L, …
Run Code Online (Sandbox Code Playgroud)

regression r prediction linear-regression lm

11
推荐指数
2
解决办法
3万
查看次数

多元回归神经网络损失函数

我在Tensorflow中使用完全连接的多层神经网络进行多元回归.(y1,y2)给定输入向量的网络预测2个连续浮点变量(x1,x2,...xN),即网络有2个输出节点.有2个输出,网络似乎没有收敛.我的损失函数本质上是预测和真值向量之间的L2距离(每个包含2个标量):

loss = tf.nn.l2_loss(tf.sub(prediction, truthValues_placeholder)) + L2regularizationLoss 
Run Code Online (Sandbox Code Playgroud)

我正在使用L2正则化,丢失正则化,我的激活函数是tanh.

我的问题:L2距离是计算多变量网络输出损耗的正确方法吗?是否需要一些技巧才能使多元回归网络收敛(与单变量网络和分类器相对)?

linear-regression neural-network tensorflow

11
推荐指数
1
解决办法
1075
查看次数

AttributeError:LinearRegression对象没有属性'coef_'

我一直在尝试通过线性回归来拟合这些数据,遵循bigdataexaminer的教程.到目前为止,一切都很好.我从sklearn导入了LinearRegression,并且很好地打印了系数.这是我尝试从控制台获取系数之前的代码.

import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
import sklearn
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression

boston = load_boston()
bos = pd.DataFrame(boston.data)
bos.columns = boston.feature_names
bos['PRICE'] = boston.target

X = bos.drop('PRICE', axis = 1)

lm = LinearRegression()
Run Code Online (Sandbox Code Playgroud)

完成所有这些设置后,我运行以下命令,并返回正确的输出:

In [68]: print('Number of coefficients:', len(lm.coef_)

Number of coefficients: 13
Run Code Online (Sandbox Code Playgroud)

但是,现在如果我再次尝试打印同一行,或者使用'lm.coef_',它告诉我coef_不是LinearRegression的属性,就在我刚刚成功使用它之后,我没有触及任何在我再次尝试之前的代码.

In [70]: print('Number of coefficients:', len(lm.coef_))

Traceback (most recent call last):

 File "<ipython-input-70-5ad192630df3>", line 1, in <module>
print('Number of coefficients:', …
Run Code Online (Sandbox Code Playgroud)

python linear-regression attributeerror python-3.x scikit-learn

11
推荐指数
1
解决办法
2万
查看次数

AnalysisException:u"无法解析'name'给定输入列:[list]在spark中的sqlContext中

我尝试了一个简单的例子:

data = sqlContext.read.format("csv").option("header", "true").option("inferSchema", "true").load("/databricks-datasets/samples/population-vs-price/data_geo.csv")

data.cache() # Cache data for faster reuse
data = data.dropna() # drop rows with missing values
data = data.select("2014 Population estimate", "2015 median sales price").map(lambda r: LabeledPoint(r[1], [r[0]])).toDF()
Run Code Online (Sandbox Code Playgroud)

它运作良好,但当我尝试非常相似的东西时:

data = sqlContext.read.format("csv").option("header", "true").option("inferSchema", "true").load('/mnt/%s/OnlineNewsTrainingAndValidation.csv' % MOUNT_NAME)

data.cache() # Cache data for faster reuse
data = data.dropna() # drop rows with missing values
data = data.select("timedelta", "shares").map(lambda r: LabeledPoint(r[1], [r[0]])).toDF()
display(data)
Run Code Online (Sandbox Code Playgroud)

它引发错误:AnalysisException:u"无法解析'timedelta'给定的输入列:[data_channel_is_tech,...

我当然导入了LabeledPoint和LinearRegression

可能有什么不对?

即使是更简单的情况

df_cleaned = df_cleaned.select("shares")
Run Code Online (Sandbox Code Playgroud)

引发相同的AnalysisException(错误).

*请注意:df_cleaned.printSchema()效果很好.

python linear-regression apache-spark

11
推荐指数
1
解决办法
3万
查看次数

数据框中变量之间的快速成对简单线性回归

我已经在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)

performance regression r linear-regression lm

11
推荐指数
1
解决办法
2680
查看次数