问题
我希望将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) 我正在尝试使用scikit-learn中包含的广义线性模型拟合方法拟合向量自回归(VAR)模型.线性模型的形式为y = X w,但系统矩阵X具有非常独特的结构:它是块对角线,并且所有块都是相同的.为了优化性能和内存消耗,模型可以表示为Y = BW,其中B是来自X的块,Y和W现在是矩阵而不是向量.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
我试图用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专用于这个过程的机器上运行它.
于是我决定尝试的东西的老式方法:为每一个我多年的虚拟变量t1来t20这样做:
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会使内存耗尽吗?谢谢.
我使用LaasoCVfrom sklearn来选择最佳模型是通过交叉验证选择的.我发现如果我使用sklearn或matlab统计工具箱,交叉验证会得到不同的结果.
我使用matlab并复制了http://www.mathworks.se/help/stats/lasso-and-elastic-net.html中给出的示例
来获取这样的数字

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

虽然这两个数字之间有一些相似之处,但也存在一定的差异.据我所知,参数lambdain matlab和alphain 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) 我使用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)
知道如何让它工作吗?
我跑回了一个回归:
CopierDataRegression <- lm(V1~V2, data=CopierData1)
Run Code Online (Sandbox Code Playgroud)
我的任务是获得一个
V2=6V2=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) 我在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距离是计算多变量网络输出损耗的正确方法吗?是否需要一些技巧才能使多元回归网络收敛(与单变量网络和分类器相对)?
我一直在尝试通过线性回归来拟合这些数据,遵循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
我尝试了一个简单的例子:
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()效果很好.
我已经在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) python ×5
lm ×3
r ×3
regression ×3
scikit-learn ×3
statistics ×2
apache-spark ×1
matlab ×1
memory ×1
mysql ×1
pandas ×1
performance ×1
prediction ×1
python-3.x ×1
sql ×1
statsmodels ×1
tensorflow ×1