【问题标题】:Best model for variable selection with big data?大数据变量选择的最佳模型?
【发布时间】:2019-11-20 12:12:43
【问题描述】:

我之前发布了一个关于一些代码的问题,但现在我意识到我应该更广泛地了解一般概念。基本上,我正在尝试建立一个包含大约 1000 个观察值和 2000 个变量的统计模型。我想确定哪些变量在影响我的因变量时最有影响力。我不打算将模型用于预测,仅用于变量选择。我的自变量是二元的,因变量是连续的。我已经使用 statsmodels 和 scikit-learn 等工具尝试了多元线性回归和固定模型。但是,我遇到了诸如变量多于观察值等问题。我更喜欢用python解决问题,因为我有基本的知识。但是,统计数据对我来说很新,所以我不知道最好的方向。任何帮助表示赞赏。

树方法

import pandas as pd
from sklearn import tree
from sklearn import preprocessing

data=pd.read_excel('data_file.xlsx')

y=data.iloc[:, -1]
X=data.iloc[:, :-1]

le=preprocessing.LabelEncoder()
y=le.fit_transform(y)

clf=tree.DecisionTreeClassifier()
clf=clf.fit(X,y)

tree.export_graphviz(clf, out_file='tree.dot')

或者如果我输出到文本文件,前几行是:

digraph Tree {
node [shape=box] ;
0 [label="X[685] <= 0.5\ngini = 0.995\nsamples = 1097\nvalue = [2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1\n1, 1, 1, 8, 1, 1, 3, 1, 2, 1, 1, 1, 2, 1\n1, 1, 1, 2, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n1, 3, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2\n1, 1, 1, 1, 1, 1, 30, 3, 1, 3, 1, 1, 2, 1\n1, 5, 1, 2, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1\n1, 1, 2, 1, 1, 1, 3, 1, 1, 3, 1, 2, 1, 1\n1, 7, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1\n6, 2, 1, 2, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 3, 7, 6, 1, 1, 1\n1, 1, 3, 4, 1, 1, 1, 1, 1, 4, 1, 2, 1, 1\n1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1\n1, 4, 1, 1, 4, 2, 1, 1, 1, 2, 1, 1, 2, 2\n11, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 12, 1\n1, 1, 3, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1\n6, 1, 1, 1, 1, 1, 4, 2, 1, 2, 1, 1, 1, 1\n1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1\n1, 1, 1, 1, 1, 11, 1, 2, 1, 2, 1, 1, 1, 1\n4, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1\n1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2\n1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3\n1, 7, 1, 1, 2, 1, 2, 7, 1, 1, 1, 3, 1, 11\n1, 1, 2, 2, 2, 1, 1, 10, 1, 1, 5, 21, 1, 1\n11, 1, 2, 1, 1, 1, 1, 1, 5, 15, 3, 1, 1, 1\n1, 1, 1, 3, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1\n1, 1, 6, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1\n17, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 4\n1, 1, 1, 6, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1\n1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 14, 1\n3, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 3, 1\n1, 2, 1, 12, 1, 1, 1, 1, 8, 2, 1, 1, 1, 2\n1, 1, 3, 1, 1, 6, 1, 1, 1, 3, 1, 1, 2, 1\n1, 1, 1, 1, 4, 1, 1, 2, 1, 3, 2, 4, 1, 3\n1, 1, 1, 1, 1, 7, 1, 1, 2, 1, 1, 2, 13, 2\n1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1\n9, 1, 2, 5, 7, 1, 1, 1, 2, 9, 2, 2, 13, 1\n1, 1, 1, 2, 1, 3, 1, 1, 6, 1, 3, 1, 1, 3\n1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 4, 1, 5, 1\n4, 1, 2, 3, 3]"] ;
1 [label="X[990] <= 0.5\ngini = 0.995\nsamples = 1040\nvalue = [2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1\n1, 1, 1, 8, 1, 1, 3, 1, 2, 1, 1, 1, 2, 1\n1, 1, 1, 2, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n1, 3, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2\n1, 1, 1, 1, 1, 1, 30, 3, 1, 3, 1, 1, 2, 1\n1, 5, 1, 2, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1\n1, 1, 2, 1, 1, 1, 3, 1, 1, 3, 1, 2, 1, 1\n1, 7, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1\n6, 2, 1, 2, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1\n1, 1, 1, 1, 1, 1, 1, 1, 3, 7, 6, 1, 1, 1\n1, 1, 3, 4, 1, 1, 1, 1, 1, 4, 1, 2, 1, 1\n1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1\n1, 4, 1, 1, 4, 2, 1, 1, 1, 2, 1, 1, 2, 2\n11, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 1, 12, 1\n1, 1, 3, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1\n6, 1, 0, 1, 1, 1, 4, 2, 1, 2, 1, 1, 1, 1\n1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 1, 0, 1, 1\n1, 1, 1, 1, 1, 9, 1, 2, 1, 2, 1, 1, 1, 1\n4, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1\n1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2\n1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3\n1, 7, 1, 1, 2, 1, 2, 7, 1, 1, 1, 1, 1, 11\n1, 1, 2, 2, 2, 1, 1, 10, 1, 1, 5, 21, 1, 1\n1, 1, 2, 1, 1, 1, 1, 1, 5, 15, 3, 1, 1, 1\n1, 1, 1, 3, 1, 1, 2, 1, 3, 1, 1, 0, 1, 1\n1, 1, 6, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1\n16, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 4\n1, 1, 1, 6, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1\n1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 0, 1\n3, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 3, 1\n1, 2, 1, 12, 1, 1, 1, 1, 8, 2, 0, 1, 1, 2\n1, 1, 3, 1, 1, 6, 1, 1, 1, 3, 1, 1, 2, 0\n1, 1, 1, 1, 4, 1, 1, 2, 1, 3, 2, 4, 1, 3\n1, 1, 1, 1, 1, 7, 1, 1, 2, 1, 0, 1, 3, 2\n1, 1, 1, 0, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1\n9, 1, 2, 5, 6, 1, 1, 1, 2, 9, 2, 2, 13, 1\n1, 1, 1, 2, 1, 3, 1, 1, 6, 1, 3, 1, 0, 3\n1, 0, 1, 1, 2, 0, 1, 2, 1, 1, 0, 1, 5, 1\n4, 1, 0, 3, 3]"] ;

【问题讨论】:

  • 查看自变量组中因变量的平均值。或者您可以研究 ANOVA 方法
  • 您可以尝试训练决策树并查看您的树使用中使用了哪些变量。
  • @FatihAkici 你到底是什么意思你所说的因变量是一组自变量。您还知道为大数据实施 ANOVA 方法的好工具,它也会给出 p 值吗?
  • @vlemaistre 有没有一个很好的决策树工具?在这种情况下到底会做什么
  • 使用skikit learn 构建决策树。看看这些是如何创建的,但总结一下:在每一片叶子上,使用最适合您预测的变量的变量将种群分成两部分。因此,您可以假设树中使用的变量(首选在树中较高的变量)是最有影响力的

标签: python scikit-learn statsmodels


【解决方案1】:

1.变体A:特征选择Scikit

对于未来的选择scikit提供了很多不同的方法: https://scikit-learn.org/stable/modules/feature_selection.html

这里总结了上面的 cmets。

2.Variante B:线性回归的特征选择

如果您对其运行线性回归,您还可以读取您的特征重要性。 https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html .reg.coef_ 函数会给你未来的系数,绝对数字越高,你的特征越重要,所以例如 0.8 是一个非常重要的未来,而 0.00001 并不重要。

3.Variante C:PCA(不适用于二进制情况)

为什么要杀死变量?我建议您使用:PCA - Principal ocmponent analysis https://en.wikipedia.org/wiki/Principal_component_analysis

基本概念是将 2000 个特征转换为更小的空间(可能 1000 个或其他),同时在数学上仍然有用。

Scikik-learn有一个很好的包:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

【讨论】:

  • 是否将其缩小到 1000 个功能,并将 2000 个功能更改为 1000 个新功能?如果是新特性,这能以某种方式告诉我 2000 个特性中哪些是最重要的吗?(例如,在使用多元线性回归之后)
  • 我不会推荐 PCA 进行降维,因为它会转换原始变量。这会导致 EXPLODED 变量计数。 OP说有2000个变量。 PCA 会将这个计数扩展到超过 2000 个变量!此外,PCA 用于连续数据。而且二进制不是连续的..想想看。
【解决方案2】:

我建议您仔细研究变量的方差,而不是保留范围最大的变量 (pandas.DataFrame.var()),并消除那些最多与其他变量相关的变量 (pandas.DataFrame.corr()),作为我建议的进一步步骤获取前面提到的任何方法。

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2018-06-12
    • 2019-11-30
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2015-06-19
    • 2017-03-23
    相关资源
    最近更新 更多