Python线性回归组合问题

Posted

技术标签:

【中文标题】Python线性回归组合问题【英文标题】:Python Linear Regression Combination Problem 【发布时间】:2021-11-20 07:01:57 【问题描述】:

我需要在我的数据框的两个变量组中计算线性回归和 MSE。问题是我无法将 xtrain 与两个变量与 ytrain 与一个变量进行比较,但我的 ytrain 中只有一列。

代码:

from sklearn.datasets import make_regression
X, y = make_regression(n_samples=100, n_features=4, n_informative=3, n_targets=1, noise=0.01)

问题:

from itertools import combinations
for c in combinations(range(4), 2):
    lr=LinearRegression()
    lr.fit(Xtrain[:,c].reshape(-1,1),ytrain)
    yp=lr.predict(Xtest[:,c].reshape(-1,1))
    print('MSE', np.sum((ytest - yp)**2) / len(ytest))

错误:

【问题讨论】:

【参考方案1】:

没有必要对特征矩阵使用 reshape 方法,因为它们已经是二维的。如果您删除重塑,您的代码将起作用,请参见下文。

from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from itertools import combinations
import numpy as np

X, y = make_regression(n_samples=100, n_features=4, n_informative=3, n_targets=1, noise=0.01, random_state=42)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

for c in combinations(range(4), 2):

    lr = LinearRegression()
    lr.fit(X_train[:, c], y_train)
    yp = lr.predict(X_test[:, c])

    print('MSE', np.sum((y_test - yp) ** 2) / len(y_test))

# MSE 591.707619290734
# MSE 33.613143724590564
# MSE 634.3248475857874
# MSE 1646.9447686107499
# MSE 2293.2878076807942
# MSE 1700.2559702871085

【讨论】:

以上是关于Python线性回归组合问题的主要内容,如果未能解决你的问题,请参考以下文章

python实现线性回归之弹性网回归

Python构建简单线性回归模型教程

机器学习笔记#1 线性回归

Python 线性回归(Linear Regression) 基本理解

线性回归有解析解为啥还要用梯度下降

什么是线性回归模型