使用逻辑回归进行特征选择

     2023-03-12     211

关键词:

【中文标题】使用逻辑回归进行特征选择【英文标题】:feature selection using logistic regression 【发布时间】:2016-01-25 23:51:11 【问题描述】:

我正在使用逻辑回归执行特征选择(在具有 1,930,388 行和 88 个特征的数据集上)。如果我在保留数据上测试模型,准确率略高于 60%。响应变量是均匀分布的。我的问题是,如果模型的性能不好,我可以将它给出的特征视为实际的重要特征吗?还是应该尝试提高模型的准确性,尽管我的最终目标不是提高准确性,而只是获得重要特征

【问题讨论】:

你的特征选择器是什么? 【参考方案1】:

sklearn 的 GridSearchCV 有一些非常简洁的方法可以为您提供最佳功能集。例如,考虑以下代码

pipeline = Pipeline([
    ('vect', TfidfVectorizer(stop_words='english',sublinear_tf=True)),
    ('clf', LogisticRegression())
    ])

    parameters = 
        'vect__max_df': (0.25, 0.5, 0.6, 0.7, 1.0),
        'vect__ngram_range': ((1, 1), (1, 2), (2,3), (1,3), (1,4), (1,5)),
        'vect__use_idf': (True, False),
        'clf__C': (0.1, 1, 10, 20, 30)
    

这里的参数数组包含我需要考虑的所有不同参数。注意 if vect__max_df 的使用。 max_df 是我的矢量化器使用的实际键,它是我的特征选择器。所以,

'vect__max_df': (0.25, 0.5, 0.6, 0.7, 1.0),

实际上指定我想为我的矢量化器尝试上述 5 个值。其他人也是如此。请注意我如何将矢量化器绑定到键“vect”,将分类器绑定到键“clf”。你能看到图案吗?继续前进

    traindf = pd.read_json('../../data/train.json')

    traindf['ingredients_clean_string'] = [' , '.join(z).strip() for z in traindf['ingredients']]  

    traindf['ingredients_string'] = [' '.join([WordNetLemmatizer().lemmatize(re.sub('[^A-Za-z]', ' ', line)) for line in lists]).strip() for lists in traindf['ingredients']]       

    X, y = traindf['ingredients_string'], traindf['cuisine'].as_matrix()

    X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7)

    grid_search = GridSearchCV(pipeline, parameters, n_jobs=3, verbose=1, scoring='accuracy')
    grid_search.fit(X_train, y_train)

    print ('best score: %0.3f' % grid_search.best_score_)
    print ('best parameters set:')

    bestParameters = grid_search.best_estimator_.get_params()

    for param_name in sorted(parameters.keys()):
        print ('\t %s: %r' % (param_name, bestParameters[param_name]))

    predictions = grid_search.predict(X_test)
    print ('Accuracy:', accuracy_score(y_test, predictions))
    print ('Confusion Matrix:', confusion_matrix(y_test, predictions))
    print ('Classification Report:', classification_report(y_test, predictions))

请注意,bestParameters 数组将为我提供我在创建管道时指定的所有选项中最好的一组参数。

希望这会有所帮助。

编辑:获取所选功能列表

因此,一旦您拥有最佳参数集,就可以使用这些参数值创建矢量化器和分类器

vect = TfidfVectorizer('''use the best parameters here''')

然后你基本上再次训练这个矢量化器。在此过程中,矢量化器将从您的训练集中选择某些特征。

traindf = pd.read_json('../../data/train.json')

        traindf['ingredients_clean_string'] = [' , '.join(z).strip() for z in traindf['ingredients']]  

        traindf['ingredients_string'] = [' '.join([WordNetLemmatizer().lemmatize(re.sub('[^A-Za-z]', ' ', line)) for line in lists]).strip() for lists in traindf['ingredients']]       

        X, y = traindf['ingredients_string'], traindf['cuisine'].as_matrix()

        X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7)

       termDocMatrix = vect.fit_transform(X_train, y_train)

现在,termDocMatrix 具有所有选定的特征。此外,您可以使用矢量化器来获取特征名称。假设您想获得前 100 个功能。你的比较指标是卡方分数

getKbest = SelectKBest(chi2, k = 100)

现在只是

print(np.asarray(vect.get_feature_names())[getKbest.get_support()])

应该为您提供前 100 个功能。试试这个。

【讨论】:

感谢GridSearch的详细解释。但这并不能回答我的问题。我的问题是,如果我使用任何算法进行特征选择,我是否应该非常关注模型的准确性?例如,sk learn 特征选择方法 (scikit-learn.org/stable/modules/feature_selection.html) 将随机森林、逻辑回归等列为标准方法。如何在两种基于模型的特征选择方法之间进行选择?根据准确率选择? 准确率是一个很好的衡量标准,但您还应该查看其他参数,例如 ROC 曲线、精度、召回率和 f 度量。根据您要解决的问题,这些参数中的一个或多个可能很重要。这就是为什么它有助于创建管道,以便您可以比较不同的模型。准确性是最直接的。顺便问一下,您要解决哪个问题?你的用例是什么? 另外,当您说“最终目标不是提高准确性,而只是获得重要特征”时,您实际上是在寻找性能最佳模型选择的特征吗​​?即你想找出表现最好的模型正在关注的“事物”吗? 这是我的用例:我的响应变量是二进制的。我的特征是数字的(它们是某些产品特征,属性值是用户使用这些属性的次数)我想找到那些影响响应变量为 1 的特征。我不打算将用户分类为未来为 1 或 0。我只对模型返回的重要特征进行分类。 我还没有尝试实施您的建议,但快速的观察告诉我,所有这些都与文本分析有关。我的不是文本分析问题

sklearn 逻辑回归中的特征选择

...tcregression【发布时间】:2018-02-2709:13:24【问题描述】:我使用sklearn逻辑回归模型为文本创建了一个二元分类模型。现在我想选择用于模型的特征。我的代码看起来像这样-train,val,y_train,y_test=train_test_split(np.arange(data.shape 查看详情

逻辑回归特征选择

...很重要,除了人工选择,还可以用其他机器学习方法,如逻辑回归、随机森林、PCA、LDA等。分享一下逻辑回归做特征选择特征选择包括:特征升维特征降维特征升维如一个样本有少量特征,可以升维,更好的拟合曲线 特征X&nbs... 查看详情

详解逻辑回归与评分卡-逻辑回归中的特征工程菜菜的sklearn课堂笔记(代码片段)

...时候,我们出于业务考虑,也出于计算量的考虑,希望对逻辑回归进行特征选择来降维。比如,在判断一个人是否会患乳腺癌的时候,医生如果看5~8个指标来确诊,会比需要看30个指标来确诊容易得多。业务选择说到降维和特征... 查看详情

逻辑回归中是不是需要对特征进行缩放?

...0,000之间变化。响应为0(默认=否)或1(默认=是)。这是使用逻辑函数生成的模拟训练集。可以参考here。下面的箱线图分别显示了default 查看详情

逻辑回归中的排名特征

...icregression【发布时间】:2016-05-1707:19:09【问题描述】:我使用逻辑回归作为分类器。我有六个特征,我想知道这个分类器中比其他特征更能影响结果的重要特征。我使用了信息增益,但似乎它不依赖于使用的分类器。是否有任何... 查看详情

选择逻辑回归或决策树

...标签适合他(如果是0或1或2.....9)我已经做了一些代码(使用LR)你怎么看?对于这种情况,我将使用多类逻辑回归 查看详情

7.逻辑回归实践(代码片段)

...量,这是万能的方法,适用任何模型。2.如果数据稀疏,使用L1正则,其他情况,用L2要好,可自己尝试。3.通过特征选择,剔除一些不重要的特征,从而降低模型复杂度。4.如果还过拟合,那就看看是否使用了过度复杂的特征构... 查看详情

在 sklearn 逻辑回归中使用分类数据作为特征

】在sklearn逻辑回归中使用分类数据作为特征【英文标题】:UsingcategoricaldataasfeaturesinskleanLogisticRegression【发布时间】:2016-03-0219:18:37【问题描述】:我正在尝试了解如何将分类数据用作sklearn.linear_model的LogisticRegression中的特征。... 查看详情

逻辑回归的特征筛选方法(代码片段)

 数据特征如下使用逻辑回归的稳定性选择importpandasaspdimportnumpyasnpimportpyechartsimportxlrd#withopen(r‘F:数据分析专用数据分析与机器学习ankloan.xls‘,‘rb‘)asf:file=r‘F:数据分析专用数据分析与机器学习ankloan.xls‘data=pd.read_excel(file... 查看详情

如何使用 scikit-learn 中的 SelectFromModel 正确进行特征选择?

】如何使用scikit-learn中的SelectFromModel正确进行特征选择?【英文标题】:HowtoproperlydofeatureselectionwithSelectFromModelfromscikit-learn?【发布时间】:2021-02-1107:37:54【问题描述】:我使用verysimplekaggledataset来了解带有逻辑回归的SelectFromModel... 查看详情

具有两个文本特征的逻辑回归

...【发布时间】:2021-11-2212:03:46【问题描述】:我只能找到使用TFIDF的文本特征(即垃圾邮件检测)实现逻辑回归的方法。但是由于Feature_A和Feature_B是预测标签的特征,我想知道在处理两个文本特征时使用哪种方法,因为在我的(... 查看详情

第九节,线性逻辑回归(代码片段)

...模型,而且受噪声影响比较大。如果非要应用进入,可以使用logistic回归。logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数g(z)函数来预测。下面介绍一个线性... 查看详情

正则化 l1 逻辑回归特征选择在重新运行时返回不同的 coef_

】正则化l1逻辑回归特征选择在重新运行时返回不同的coef_【英文标题】:Regularizedl1LogisticregressionFeatureSelectionreturnsdifferentcoef_whenrerun【发布时间】:2021-04-0601:11:26【问题描述】:这里已经提到了一个奇怪的问题:LinearSVCFeatureSelec... 查看详情

7.逻辑回归实践(代码片段)

...是否在用结果预测结果等;如果还过拟合,那就看看是否使用了过度复杂的特征构造工程,比如,某两个特征相乘/除/加等方式构造的特征,不要这样做了,保持原特征。正则化可以防止过拟合的原因:通过降低模型复杂度,得... 查看详情

在实现逻辑回归模型时包括特征

】在实现逻辑回归模型时包括特征【英文标题】:Includingfeatureswhenimplementingalogisticregressionmodel【发布时间】:2021-03-0721:21:36【问题描述】:在某些情况下,我正在尝试进行一些匹配以查看该公司是否与另一家公司匹配。我已经对... 查看详情

python对线性模型进行特征选择,不断模型线性模型的aic(代码片段)

...种是后向逐步回归(backwardstepwiseregression)。但我们可以使用暴力的方法不断求出模型的AIC以下是使用前向逐步回归进行特征选择的代码示例:importnumpyasnpimportpandasaspdimportstatsmodels.apiassmfromitertoolsimportcombinationsfromsklearn.metricsimport... 查看详情

如何使用 python 运行具有分类特征的 Spark 逻辑回归?

】如何使用python运行具有分类特征的Spark逻辑回归?【英文标题】:HowdoIruntheSparklogisticregressionwithcategoricalfeaturesusingpython?【发布时间】:2015-02-1815:59:00【问题描述】:我有一个包含一些分类变量的数据,我想使用Mllib运行逻辑回... 查看详情

深度学习:逻辑回归(代码片段)

...pLearning)是机器学习(MachineLearning)的一大分支,它试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。逻辑回归(LogisticRegression,也译作“对数几率回归”)是离散选择法模型之一,属于... 查看详情