具有大量特征和目标的线性回归,但少量样本会耗尽内存

问题描述 投票:0回答:1

我有大量的特征和目标,但样本数量很少。事实证明,在这种情况下,使用

numpy.linalg.pinv
的简单线性回归比
sklearn.linear_model.LinearRegression
效果要好得多。

例如,

n_features=n_targets=30000
n_samples=2

X = np.random.random((2, 30000))
Y = np.random.random((2, 30000))
x = np.random.random((1, 30000)) 

y = Y.T  @  (np.linalg.pinv(X.T)  @ x.T) # works fast and use a little memory

reg = LinearRegression(fit_intercept=False).fit(X,Y) # slow and uses a lot of memory
y2 = reg.predict(x)

np.linalg.norm(y2 - y) < 1e-12

问题是

reg.coef_.shape
(30000, 30000)
。所以
LinearRegression
不要利用低阶回归。

有没有办法通过 sklearn 框架获得简单的

pinv
解决方案的模拟?

我尝试搜索,但没有找到任何有用的东西。

scikit-learn linear-regression
1个回答
0
投票

我使用带有

sklearn.kernel_ridge.KernelRidge
参数的
alpha=1e-15, kernel='rbf'
类解决了这个问题。对于我的任务,它显示了与基于
pinv
的解决方案相同的速度、内存要求和准确性。代码也很紧凑:

reg = KernelRidge(alpha=1e-15, kernel='rbf')
reg.fit(X, Y)
y3 = reg.predict(x)

我知道,它不是线性模型,但它也有效。也许有一些内核的工作方式与线性回归相同。我认为带有

polynomial
degree=1
内核应该可以这样工作,但我还没有尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.