尝试进行线性回归的系统有多大是合理的?
具体来说:我有一个约300K采样点和~1200个线性项的系统.这在计算上是否可行?
对于R的'stats'包的LOWESS回归线的置信区间(CI),我没有找到任何令人满意的答案:
plot(cars, main = "lowess(cars)")
lines(lowess(cars), col = 2)
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何在它周围画出95%的CI?但是,我知道我可以得到估计的方差
V = s^2*sum(w^2)
Run Code Online (Sandbox Code Playgroud)
其中,s2 =估计误差方差,w =应用于X的权重.因此,95%CI应该是
Y plus/minus 2*sqrt(V(Y))
Run Code Online (Sandbox Code Playgroud)
我知道有一种方法可以让CI不受黄土影响,但我更喜欢LOWESS,因为它非常强大.谢谢你的建议.
我的目标是解决:
Kc=y
Run Code Online (Sandbox Code Playgroud)
使用伪逆(即最小范数解):
c=K^{+}y
Run Code Online (Sandbox Code Playgroud)
这样的模型是(希望)高次多项式模型f(x) = sum_i c_i x^i.我特别感兴趣的是欠定的情况,我们有更多的多项式特征而不是数据(几个方程太多的变量/未知数)columns = deg+1 > N = rows.注意K是多项式特征的vandermode矩阵.
我最初使用的是python函数np.linalg.pinv,但后来我注意到有一些时髦的事情正如我在这里所说:为什么在python中解决Xc = y的不同方法会给出不同的解决方案呢?.在那个问题中,我使用方阵来学习[-1.+1]具有高次多项式的区间函数.那里的答案建议我降低多项式的次数和/或增加区间大小.主要问题是我不清楚如何在事物变得不可靠之前选择间隔或最大程度.我认为我的主要问题是选择这样一个数值稳定的范围取决于我可能使用的方法.最后我真正关心的是那个
理想情况下,我想尝试一个大程度的多项式,但这可能受到我的机器精度的限制.是否可以通过使用比浮子更精确的东西来提高机器的数值精度?
另外,我真的关心我使用的python中的任何函数,它提供了对伪逆的最接近的答案(并且希望它在数值上稳定,所以我实际上可以使用它).要检查伪逆的答案,我编写了以下脚本:
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
def l2_loss(y,y_):
N = y.shape[0]
return (1/N)*np.linalg.norm(y-y_)
## some parameters
lb,ub = -200,200
N=100
D0=1
degree_mdl = 120
## target function
freq_cos = 2
f_target = lambda x: …Run Code Online (Sandbox Code Playgroud) 因此,我试图理解SVM算法是如何工作的,但我无法弄清楚如何在n维平面的点上转换一些具有数学意义的数据集,以便通过超平面分离点并对它们进行分类.
这里有一个例子在这里,他们正试图clasify老虎和大象的照片,他们说:"我们的数字化他们到100×100像素的图片,所以我们在n维平面,其中n = 10,000×",但我的问题是怎么做的,他们转换实际上只代表一些颜色代码的矩阵IN具有数学意义的点,以便将它们分为两类?
可能有人可以在2D示例中向我解释这一点,因为任何图形表示我都认为它只是2D,而不是nD.
对于下面的简单示例,您可以看到在随后的图中确定了某些点.如何提取这些图中识别的行号,尤其是正常QQ图?
set.seed(2016)
maya <- data.frame(rnorm(100))
names(maya)[1] <- "a"
maya$b <- rnorm(100)
mara <- lm(b~a, data=maya)
plot(mara)
Run Code Online (Sandbox Code Playgroud)
我尝试使用str(mara)来查看我是否能在那里找到一个列表,但是我看不到那里的Normal QQ图中的任何数字.思考?
我一直认为lmR 中的函数非常快,但正如本例所示,使用solve函数计算的闭合解更快.
data<-data.frame(y=rnorm(1000),x1=rnorm(1000),x2=rnorm(1000))
X = cbind(1,data$x1,data$x2)
library(microbenchmark)
microbenchmark(
solve(t(X) %*% X, t(X) %*% data$y),
lm(y ~ .,data=data))
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,如果这个玩具示例是一个坏的例子,或者情况lm实际上是慢的吗?
编辑:正如Dirk Eddelbuettel所建议的,由于lm需要解决公式,比较是不公平的,所以更好地使用lm.fit,不需要解决公式
microbenchmark(
solve(t(X) %*% X, t(X) %*% data$y),
lm.fit(X,data$y))
Unit: microseconds
expr min lq mean median uq max neval cld
solve(t(X) %*% X, t(X) %*% data$y) 99.083 108.754 125.1398 118.0305 131.2545 236.060 100 a
lm.fit(X, y) 125.136 136.978 151.4656 143.4915 156.7155 262.114 100 b
Run Code Online (Sandbox Code Playgroud) 为了训练目的,我在python中实现了线性回归.问题是成本增加而不是减少.对于数据,我使用翼型自噪声数据集.数据可以在这里找到
我导入数据如下:
import pandas as pd
def features():
features = pd.read_csv("data/airfoil_self_noise/airfoil_self_noise.dat.txt", sep="\t", header=None)
X = features.iloc[:, 0:5]
Y = features.iloc[:, 5]
return X.values, Y.values.reshape(Y.shape[0], 1)
Run Code Online (Sandbox Code Playgroud)
我的线性回归代码如下:
import numpy as np
import random
class linearRegression():
def __init__(self, learning_rate=0.01, max_iter=20):
"""
Initialize the hyperparameters of the linear regression.
:param learning_rate: the learning rate
:param max_iter: the max numer of iteration to perform
"""
self.lr = learning_rate
self.max_iter = max_iter
self.m = None
self.weights = None
self.bias = None
def fit(self, …Run Code Online (Sandbox Code Playgroud) 问题
我希望将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
我正在使用sklearn,特别是linear_model模块.在拟合简单的线性之后
import pandas as pd
import numpy as np
from sklearn import linear_model
randn = np.random.randn
X = pd.DataFrame(randn(10,3), columns=['X1','X2','X3'])
y = pd.DataFrame(randn(10,1), columns=['Y'])
model = linear_model.LinearRegression()
model.fit(X=X, y=y)
Run Code Online (Sandbox Code Playgroud)
我看到我如何通过coef_和intercept_访问系数和截距,预测也很简单.我想访问这个简单模型的参数的方差 - 协方差矩阵,以及这些参数的标准误差.我熟悉R和vcov()函数,似乎scipy.optimize有一些功能(使用python中的optimize.leastsq方法获取拟合参数的标准错误) - sklearn是否具有访问这些统计信息的任何功能??
感谢任何帮助.
-Ryan