首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Sklearn模拟多重共线性?

如何用Sklearn模拟多重共线性?
EN

Stack Overflow用户
提问于 2021-12-20 18:01:18
回答 1查看 229关注 0票数 1

我想看看多重共线性对线性回归模型有什么影响,但我需要能够生成多个共线数据,在这里我可以改变特征的数量和这些特征之间的共线性。

我看过Sklearn的make_regression函数,它允许生成多个特性,但据我所知,这些特性都是不相关的,对吗?

如果是这样的话,有没有人知道我如何能够改变这些特征之间的相关性,或者使用不同的方法来生成一个线性多共线数据集来训练Sklearn的线性回归模型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-20 20:06:50

您可以模拟多元正态分布的特性,如下所示:

代码语言:javascript
复制
import numpy as np
from sklearn.linear_model import LinearRegression

def make_regression(n_samples, n_uncorrelated, n_correlated, correlation, weights, bias, noise=1, seed=42):

    np.random.seed(seed)

    X_correlated = np.random.multivariate_normal(
        mean=np.zeros(n_correlated),
        cov=correlation * np.ones((n_correlated, n_correlated)) + (1 - correlation) * np.eye(n_correlated),
        size=n_samples
    )

    X_uncorrelated = np.random.multivariate_normal(
        mean=np.zeros(n_uncorrelated),
        cov=np.eye(n_uncorrelated),
        size=n_samples
    )

    X = np.hstack([X_correlated, X_uncorrelated])
    e = np.random.normal(loc=0, scale=noise, size=n_samples)
    y = bias + np.dot(X, weights) + e

    return X, y

X, y = make_regression(
    n_samples=1000,
    n_uncorrelated=1,
    n_correlated=3,
    correlation=0.999,
    weights=[0.5, 0.5, 0.5, 0.5],
    bias=0,
)

print(np.round(np.corrcoef(X, rowvar=False), 1))
# [[ 1.  1.  1. -0.]
#  [ 1.  1.  1. -0.]
#  [ 1.  1.  1. -0.]
#  [-0. -0. -0.  1.]]

reg = LinearRegression()
reg.fit(X, y)

print(reg.intercept_)
# -0.0503434375710194

print(reg.coef_)
# [0.62245063 -0.43110213  1.31516103  0.52019845]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70426129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档