【问题标题】:Find out which features are collinear in a dataset找出数据集中哪些特征是共线的
【发布时间】:2019-06-29 17:54:07
【问题描述】:

我已经构建了一个模型来根据多个特征预测房价。

import statsmodels.api as statsmdl
from sklearn import datasets

X = data[['NumberofRooms', 'YearBuilt','Type','NewConstruction']
y = data["Price"]

model = statsmdl.OLS(y, X).fit()
predictions = model.predict(X)
model.summary()

如何确定这些特征中的哪些是共线的?

【问题讨论】:

    标签: python python-3.x machine-learning statistics statsmodels


    【解决方案1】:

    您可以使用DataFrame.corr() 方法。

    演示:

    In [27]: df = pd.DataFrame(np.random.randint(10, size=(5,3)), columns=list('abc'))
    
    In [28]: df['d'] = df['a'] * 10 - df['b'] / np.pi
    
    In [29]: df['e'] = np.log(df['c'] **2)
    
    In [30]: c = df.corr()
    
    In [31]: c
    Out[31]:
              a         b         c         d         e
    a  1.000000  0.734858  0.113787  0.999837  0.067358
    b  0.734858  1.000000 -0.523635  0.722485 -0.598739
    c  0.113787 -0.523635  1.000000  0.129945  0.984257
    d  0.999837  0.722485  0.129945  1.000000  0.084615
    e  0.067358 -0.598739  0.984257  0.084615  1.000000
    
    In [32]: c[c >= 0.7]
    Out[32]:
              a         b         c         d         e
    a  1.000000  0.734858       NaN  0.999837       NaN
    b  0.734858  1.000000       NaN  0.722485       NaN
    c       NaN       NaN  1.000000       NaN  0.984257
    d  0.999837  0.722485       NaN  1.000000       NaN
    e       NaN       NaN  0.984257       NaN  1.000000
    
    In [33]: c[c >= 0.7].stack().reset_index(name='cor').query("abs(cor) < 1.0")
    Out[33]:
       level_0 level_1       cor
    1        a       b  0.734858
    2        a       d  0.999837
    3        b       a  0.734858
    5        b       d  0.722485
    7        c       e  0.984257
    8        d       a  0.999837
    9        d       b  0.722485
    11       e       c  0.984257
    

    【讨论】:

    • 这只会给你相关性,而不是涉及两个以上变量的共线性。
    • @Josef,好点子,谢谢!我没有想到多重共线性......在这种情况下你会用什么? statsmodels.org/dev/generated/… ?
    • vif 或 QR 用于顺序识别。在奇异矩阵情况下使用 QR 有一个 stackoverflow 答案,我现在找不到。如果涉及两个以上的变量,则很难定义哪些变量集是相关的,因为我们只有一个子空间,例如。特征值接近于零的两个特征向量。 (对于多重共线性测量的 statsmodels 有几个打开的、当前处于休眠状态的拉取请求,例如 github.com/statsmodels/statsmodels/pull/2380.
    猜你喜欢
    • 2017-12-02
    • 2023-01-27
    • 2014-03-25
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多