标签: feature-selection

R 插入符号包 rfe 永远不会完成错误任务 1 失败 - “替换长度为零”

我最近开始研究我正在开发的模型的插入符号包。我正在使用最新版本。作为第一步,我决定将其用于特征选择。我使用的数据有大约 760 个特征和 10k 个观察值。我根据网上的培训资料创建了一个简单的函数。不幸的是,我一直遇到错误,因此该过程永远不会完成。这是产生错误的代码。在这个例子中,我使用了一小部分功能。我从全套功能开始。我还更改了子集、折叠次数和重复次数,但无济于事。我知道如果没有数据,很难追查问题。我已经共享了一小部分数据(以下面使用的 r 对象格式)。如果您无法从那里获取文件,请尝试此链接

它总是产生这个错误:

{ 中的错误:任务 1 失败 - “替换长度为零”

caretFeatureSelection <- function() {
  library(caret)
  library(mlbench)
  library(Hmisc)

  set.seed(10)

  lr.features = c("f2", f271","f527","f528","f404", "f376", "f67",  "f670", "f281", "f333", "f13",  "f282", "f599",
                  "f597", "f68",  "f629", "f378", "f230", "f229", "f273", "f768", "f406", "f630", 
                  "f596", "f598", "f413", "f412", "f332", "f377", "f766", "f767", "f775", "f10", "f442")

  trainDF <- readRDS(file='trainDF.rds')
  trainDF <- trainDF[trainDF$loss>0,]
  trainDF$lossProb <- trainDF$loss/100
  y <- trainDF[,'lossProb']
  x <- trainDF[,names(trainDF) %in% lr.features]

  rm(trainDF)

  subsets <- c(1:5, …
Run Code Online (Sandbox Code Playgroud)

r feature-selection r-caret

4
推荐指数
1
解决办法
3941
查看次数

scikit-learn:在管道中使用SelectKBest时获取所选功能

我正在尝试在多标签情况下将功能选择作为scikit学习管道的一部分。我的目的是针对给定的k选择最佳的K特征。

这可能很简单,但我不了解如何在这种情况下获取所选要素索引。

在常规情况下,我可以执行以下操作:

anova_filter = SelectKBest(f_classif, k=10)

anove_filter.fit_transform(data.X, data.Y)

anova_filter.get_support()
Run Code Online (Sandbox Code Playgroud)

但是在多标签方案中,我的标签尺寸为#samples X #unique_labels,因此fit和fit_transform会产生以下异常:ValueError:输入形状错误

这很有意义,因为它需要标注为[#samples]维的标签

在多标签方案中,这样做是有意义的:

clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),('svm', LinearSVC())])

multiclf = OneVsRestClassifier(clf, n_jobs=-1)

multiclf.fit(data.X, data.Y)
Run Code Online (Sandbox Code Playgroud)

但是然后我得到的对象是sklearn.multiclass.OneVsRestClassifier类型,它没有get_support函数。在管道中使用经过训练的SelectKBest模型时,如何获得它?

classification machine-learning feature-selection scikit-learn multilabel-classification

4
推荐指数
1
解决办法
2884
查看次数

scikit adaboost功能_重要性_

在python中实现的adaboost算法如何将特征重要性分配给每个特征?我正在使用它进行特征选择,并且我的模型在基于feature_importance_的值应用特征选择时表现更好。

adaboost feature-selection ensemble-learning

4
推荐指数
1
解决办法
1728
查看次数

如何使用来自离散和连续特征混合的互信息来 SelectKBest?

我正在使用 scikit learn 来训练分类模型。我的训练数据中既有离散特征也有连续特征。我想使用最大互信息进行特征选择。如果我有向量x和标签y并且前三个特征值是离散的,我可以获得 MMI 值,如下所示:

mutual_info_classif(x, y, discrete_features=[0, 1, 2])
Run Code Online (Sandbox Code Playgroud)

现在我想在管道中使用相同的互信息选择。我想做这样的事情

SelectKBest(score_func=mutual_info_classif).fit(x, y)
Run Code Online (Sandbox Code Playgroud)

但没有办法将离散特征掩码传递给SelectKBest. 是否有一些我忽略的语法可以做到这一点,或者我是否必须编写自己的评分函数包装器?

feature-selection scikit-learn

4
推荐指数
1
解决办法
5338
查看次数

机器学习 - 按算法进行特征排名

我有一个包含大约 30 个特征的数据集,我想找出哪些特征对结果贡献最大。我有5种算法:

  1. 神经网络
  2. 后勤
  3. 幼稚的
  4. 随机森林
  5. 阿达助推器

我读了很多有关信息增益技术的内容,它似乎与所使用的机器学习算法无关。它就像一种预处理技术。

我的问题如下:最佳实践是独立地为每个算法执行特征重要性还是仅使用信息增益。如果是的话,每种技术使用什么技术?

machine-learning prediction weka feature-selection

4
推荐指数
1
解决办法
646
查看次数

VIF 函数返回所有“inf”值

我正在处理函数的多重共线性问题variance_inflation_factor()

但运行该函数后,我发现该函数将所有分数返回为无限值。

这是我的代码:

from rdkit import Chem
import pandas as pd
import numpy as np
from numpy import array

data = pd.read_csv('Descriptors_raw.csv')
class_ = pd.read_csv('class_file.csv')
class_tot = pd.read_csv('class_total.csv')

mols_A1 = Chem.SDMolSupplier('finaldata_A1.sdf')
mols_A2 = Chem.SDMolSupplier('finaldata_A2.sdf')
mols_B = Chem.SDMolSupplier('finaldata_B.sdf')
mols_C = Chem.SDMolSupplier('finaldata_C.sdf')

mols = []
mols.extend(mols_A1)
mols.extend(mols_A2)
mols.extend(mols_B)
mols.extend(mols_C)

mols_df = pd.DataFrame(mols)
mols = pd.concat([mols_df, class_tot, data], axis=1)

mols = mols.dropna(axis=0, thresh=1400)
mols.groupby('target_name_quarter').mean()
fill_mean_func = lambda g: g.fillna(g.mean())
mols = mols.groupby('target_name_quarter').apply(fill_mean_func)
molfiles = mols.loc[:, :'target_quarter']
descriptors = mols.loc[:, 'nAcid':'Zagreb']

from …
Run Code Online (Sandbox Code Playgroud)

python infinite dataframe feature-selection

4
推荐指数
1
解决办法
1万
查看次数

分类器中是否正确选择和使用了所有特征?

我想知道当我使用分类器时是否,例如:

random_forest_bow = Pipeline([
        ('rf_tfidf',Feat_Selection. countV),
        ('rf_clf',RandomForestClassifier(n_estimators=300,n_jobs=3))
        ])
    
random_forest_ngram.fit(DataPrep.train['Text'],DataPrep.train['Label'])
predicted_rf_ngram = random_forest_ngram.predict(DataPrep.test_news['Text'])
np.mean(predicted_rf_ngram == DataPrep.test_news['Label'])
Run Code Online (Sandbox Code Playgroud)

我也在考虑模型中的其他功能。我定义 X 和 y 如下:

X=df[['Text','is_it_capital?', 'is_it_upper?', 'contains_num?']]
y=df['Label']

X_train, X_test, y_train, y_test  = train_test_split(X, y, test_size=0.25, random_state=40) 

df_train= pd.concat([X_train, y_train], axis=1)
df_test = pd.concat([X_test, y_test], axis=1)

countV = CountVectorizer()
train_count = countV.fit_transform(df.train['Text'].values)
Run Code Online (Sandbox Code Playgroud)

我的数据集如下所示

Text                             is_it_capital?     is_it_upper?      contains_num?   Label
an example of text                      0                  0               0            0
ANOTHER example of text                 1                  1               0            1
What's happening?Let's talk at 5        1                  0               1            1
Run Code Online (Sandbox Code Playgroud)

我还想将 …

python machine-learning feature-selection scikit-learn

4
推荐指数
1
解决办法
155
查看次数

在 Matplotlib 中更改图形大小

这是我的代码,我想让图更大,这样更容易阅读。在这里,我试图根据杂质的平均减少来获得特征重要性。我得到了一些输出,但由于我的条形图有 63 个 bin,我希望它更大。我尝试了所有评论的内容。有人可以建议我如何使这个条形图更具可读性吗?在此输入图像描述

import pandas as pd
from matplotlib.pyplot import figure

# fig.set_figheight(20)
# fig.set_figwidth(20)
#plt_1 = plt.figure(figsize=(20, 15), dpi = 100)

forest_importances = pd.Series(importances, index=feature_names)
fig, ax = plt.subplots()
forest_importances.plot.bar(yerr=std, ax=ax)
ax.set_title("Feature importances using MDI")
ax.set_ylabel("Mean decrease in impurity")

# fig = plt.figure()

fig.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

python data-visualization matplotlib bar-chart feature-selection

4
推荐指数
1
解决办法
9943
查看次数

shap.TreeExplainer 和 shap.Explainer 条形图之间的区别

对于下面给出的代码,我得到了不同的值条形图shap

在此示例中,我有一个train包含 1000 个样本、9 个类别和 500 个test样本的数据集。然后,我使用随机森林作为分类器并生成模型。当我开始生成条形图时,shap我在这两种情况下得到不同的结果:

shap_values_Tree_tr = shap.TreeExplainer(clf.best_estimator_).shap_values(X_train)
shap.summary_plot(shap_values_Tree_tr, X_train)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

进而:

explainer2 = shap.Explainer(clf.best_estimator_.predict, X_test)
shap_values = explainer2(X_test)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您能解释一下这两个图之间有什么区别以及使用哪一个吗feature importance

这是我的代码:

from sklearn.datasets import make_classification
import seaborn as sns
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import pickle
import joblib
import warnings
import shap
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV

f, (ax1,ax2) = plt.subplots(nrows=1, ncols=2,figsize=(20,8))
# Generate noisy …
Run Code Online (Sandbox Code Playgroud)

feature-selection python-3.x random-forest shap

4
推荐指数
1
解决办法
8637
查看次数

Logistic回归:如何找到权重最高的前三个特征?

我正在研究UCI乳腺癌数据集,并试图找到权重最高的前3个功能.我能够找到所有功能的重量,logmodel.coef_但我怎样才能获得功能名称?下面是我的代码,输出和数据集(从scikit导入).

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression

cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, stratify=cancer.target, random_state=42)

logmodel = LogisticRegression(C=1.0).fit(X_train, y_train)
logmodel.coef_[0]
Run Code Online (Sandbox Code Playgroud)

上面的代码输出权重数组.使用这些权重如何获取关联功能名称?

Output:
    array([  1.90876683e+00,   9.98788148e-02,  -7.65567571e-02,
             1.30875965e-03,  -1.36948317e-01,  -3.86693503e-01,
            -5.71948682e-01,  -2.83323656e-01,  -2.23813863e-01,
            -3.50526844e-02,   3.04455316e-03,   1.25223693e+00,
             9.49523571e-02,  -9.63789785e-02,  -1.32044174e-02,
            -2.43125981e-02,  -5.86034313e-02,  -3.35199227e-02,
            -4.10795998e-02,   1.53205924e-03,   1.24707244e+00,
            -3.19709151e-01,  -9.61881472e-02,  -2.66335879e-02,
            -2.44041661e-01,  -1.24420873e+00,  -1.58319440e+00,
            -5.78354663e-01,  -6.80060645e-01,  -1.30760323e-01])
Run Code Online (Sandbox Code Playgroud)

谢谢.我真的很感激任何帮助.

python machine-learning feature-selection scikit-learn logistic-regression

3
推荐指数
1
解决办法
4354
查看次数