【问题标题】:Scikit-Learn Linear Regression how to get coefficient's respective features?Scikit-Learn线性回归如何获得系数的各自特征?
【发布时间】:2015-01-13 03:16:36
【问题描述】:

我正在尝试通过评估我的回归系数输出来执行特征选择,并选择具有最高幅度系数的特征。问题是,我不知道如何获得各自的特征,因为只有系数从 coef._ 属性返回。文档说:

线性回归问题的估计系数。如果多个 在拟合期间传递目标(y 2D),这是一个 2D 数组 shape (n_targets, n_features),而如果只传递一个目标, 这是一个长度为 n_features 的一维数组。

我正在传入我的regression.fit(A,B),其中A 是一个二维数组,文档中的每个特征都有tfidf 值。示例格式:

         "feature1"   "feature2"
"Doc1"    .44          .22
"Doc2"    .11          .6
"Doc3"    .22          .2

B 是我的数据目标值,只是与每个文档相关的数字 1-100:

"Doc1"    50
"Doc2"    11
"Doc3"    99

使用regression.coef_,我得到了一个系数列表,但没有得到它们对应的特征!我怎样才能获得这些功能?我猜我需要修改我的 B 目标的结构,但我不知道如何。

【问题讨论】:

    标签: scikit-learn linear-regression feature-selection


    【解决方案1】:

    这是最简单、最直观的方法:

    pd.DataFrame(logisticRegr.coef_, columns=x_train.columns)
    

    或相同但转置索引和列

    pd.DataFrame(logisticRegr.coef_, columns=x_train.columns).T
    

    【讨论】:

      【解决方案2】:

      尝试将它们放在一系列以数据列名称为索引:

      coeffs = pd.Series(model.coef_[0], index=X.columns.values)
      coeffs.sort_values(ascending = False)
      

      【讨论】:

        【解决方案3】:

        zip 中的系数和特征

        print(list(zip(X_train.columns.tolist(),logreg.coef_[0])))
        

        DataFrame 中的系数和特征

        pd.DataFrame({"Feature":X_train.columns.tolist(),"Coefficients":logreg.coef_[0]})
        

        【讨论】:

          【解决方案4】:

          您可以通过创建数据框来做到这一点:

          cdf = pd.DataFrame(regression.coef_, X.columns, columns=['Coefficients'])
          print(cdf)
          

          【讨论】:

          • regression.coef_ 现在作为数据帧返回,因此 cdf = pd.concat([pd.DataFrame(X.columns),pd.DataFrame(np.transpose(regression.coef_)) ], 轴 = 1)
          【解决方案5】:

          假设您的训练数据 X 变量是“df_X”,那么您可以映射到字典并输入 pandas 数据框以获取映射:

          pd.DataFrame(dict(zip(df_X.columns,model.coef_[0])),index=[0]).T
          

          【讨论】:

            【解决方案6】:
            coefficients = pd.DataFrame({"Feature":X.columns,"Coefficients":np.transpose(logistic.coef_)})
            

            【讨论】:

            • 这对我不起作用。 例外:数据必须是一维的
            • @ytu try coefficients = pd.DataFrame({"Feature":X.columns,"Coefficients":np.transpose(logistic.coef_[0, )})
            【解决方案7】:

            我发现的工作是:

            X = 你的自变量

            coefficients = pd.concat([pd.DataFrame(X.columns),pd.DataFrame(np.transpose(logistic.coef_))], axis = 1)
            

            您所说的假设:regression.coef_ 的顺序与 TRAIN 集中的顺序相同,在我的经验中是正确的。 (使用基础数据,并检查 X 和 y 之间的相关性)

            【讨论】:

            • 我认为你可以做 pd.DataFrame(zip(X.columns,logistic.coef_))
            【解决方案8】:

            我想你正在处理一些特征选择任务。使用regression.coef_ 确实得到了特征的相应系数,即regression.coef_[0] 对应于“feature1”,regression.coef_[1] 对应于“feature2”。这应该是你想要的。

            我反过来推荐 sklearn 的树模型,它也可以用于特征选择。具体请查看here

            【讨论】:

            • 只要regression.coef_以相同的顺序返回coefficinet值,这是真的。谢谢。
            • ExtraTreesClassifier 其实很有意思,但是模型拟合好之后,似乎没有办法检索它选择的实际特征?
            • @jeffrey 是的,但我总是按clf.feature_importances_ 选择特征来检索特征的重要性排名。很直观,它就像线性模型的系数,不是吗?
            • 好吧,如果你使用像 CountVectorizer() 这样的特征选择方法,它有一个方法 get_feature_names()。然后你可以将 get_feature_names() 映射到 .coef_ (我认为它们是有序的,我不确定)。但是,您不能对树执行此操作。
            猜你喜欢
            • 2020-08-08
            • 1970-01-01
            • 2018-09-23
            • 2013-03-07
            • 2016-04-11
            • 2018-09-24
            • 2019-05-14
            • 2017-12-25
            • 2020-05-01
            相关资源
            最近更新 更多