标签: feature-selection

获取 pandas 数据框中最大条目的行和列名称(argmax)

df.idxmax() 返回沿轴(行或列)的最大值,但我希望 arg_max(df) 在整个数据帧上,它返回一个元组(行,列)。

我想到的用例是特征选择,其中我有一个相关矩阵,并且想要“递归”删除具有最高相关性的特征。我对相关矩阵进行预处理以考虑其绝对值并将对角线元素设置为 -1。然后我建议使用rec_drop,它递归地删除具有最高相关性的特征对中的一个(受到截止值:max_allowed_correlation),并返回最终的特征列表。例如:

S = S.abs()
np.fill_diagonal(S.values,-1) # so that max can't be on the diagonal now
S = rec_drop(S,max_allowed_correlation=0.95)

def rec_drop(S, max_allowed_correlation=0.99):
    max_corr = S.max().max()
    if max_corr<max_allowed_correlation: # base case for recursion
         return S.columns.tolist() 
    row,col = arg_max(S)  # row and col are distinct features - max can't be on the diagonal
    S = S.drop(row).drop(row,axis=1) # removing one of the features from S
    return rec_drop(S, max_allowed_correlation)
Run Code Online (Sandbox Code Playgroud)

python numpy feature-selection pandas

5
推荐指数
1
解决办法
4078
查看次数

如何使用python通过余弦相似度有效地检索顶级K-相似文档?

我正在处理十万(100,000)份文件(平均文件长度约为 500 个术语)。对于每个文档,我想通过余弦相似度获得前 k 个(例如 k = 5)个相似文档。那么如何通过Python有效地做到这一点。

这是我所做的:

  1. 对于每个文档,进行文本分割,去除停用词,计算词频(tf)
  2. 所以我们得到了 tf 矩阵,大约 100,000 个文档 * 600000 个术语
  3. 1做- pairwise_distances(tf_matrix,度量= “余弦”)
  4. 对于每个文档,获取前 k 个相似文档。

我在 i5-2.5GHz 上运行我的代码,12 小时过去了,但它仍然有效。所以我想知道如何优化我的代码或程序。

这是我的想法:

  1. 对于每个文档,进行特征选择,只保留 tf > 1 的术语
  2. 首先进行聚类,然后计算每个聚类内的余弦相似度
  3. 因为我只需要前 k 个相似的文档,我是否需要计算所有成对余弦相似度?
  4. python GPU编程还是并行编程?

那么,你有什么好主意吗?

非常感谢。


我知道有一个类似的问题,但这不是我想要的。


更新1

感谢 @orange ,经过分析,我发现第 2 步是瓶颈!这是示例代码:

def construct_dt_matrix():
    dt_matrix = pd.DataFrame(columns=['docid'])
    docid = 0
    for f in files:
        # text segmentation for f
        # remove stop words
        # word count store …
Run Code Online (Sandbox Code Playgroud)

python algorithm tf-idf feature-selection cosine-similarity

5
推荐指数
1
解决办法
2005
查看次数

用于特征选择的包装方法(机器学习)在Scikit Learn中

我正在尝试在我的机器学习项目中为scikit learn和weka数据挖掘工具之间做出决定.但是我意识到需要选择特征.我想知道scikit learn是否有用于特征选择的包装方法.

machine-learning feature-selection python-2.7

5
推荐指数
1
解决办法
4358
查看次数

Spark ML:使用 ChiSqSelector 进行特征选择后训练中的问题

我是新来的火花。我正在研究一个分类模型,想使用 ChiSqSelector 来选择模型训练的重要特征。但是,当我使用 ChiSqSelector 选择的特征进行训练时,它会引发以下错误:

“IllegalArgumentException:u'Feature 0 被标记为名义(分类),但它没有指定的值数量。”

有趣的是,当我使用任何基于树的算法时,我遇到了上述错误。对于天真偏差和逻辑回归,我没有得到错误。

当我使用 spark 文档中示例代码中提供的数据时,我发现了相同的结果。可以使用 spark 2.1.1 文档中的代码重现该错误:

from pyspark.ml.feature import ChiSqSelector
from pyspark.ml.linalg import Vectors

df = spark.createDataFrame([
    (7, Vectors.dense([0.0, 0.0, 18.0, 1.0]), 1.0,),
    (8, Vectors.dense([0.0, 1.0, 12.0, 0.0]), 0.0,),
    (9, Vectors.dense([1.0, 0.0, 15.0, 0.1]), 0.0,)], ["id", "features", 
"clicked"])
selector = ChiSqSelector(numTopFeatures=2, featuresCol="features",
                     outputCol="selectedFeatures", labelCol="clicked")
result = selector.fit(df).transform(df)
print("ChiSqSelector output with top %d features selected" % 
selector.getNumTopFeatures())
result.show()
from pyspark.ml.classification import DecisionTreeClassifier
dt = DecisionTreeClassifier(labelCol="clicked", 
featuresCol="selectedFeatures")
model = dt.fit(result)
Run Code Online (Sandbox Code Playgroud)

有人在 Apache Spark …

machine-learning feature-selection apache-spark apache-spark-ml apache-spark-mllib

5
推荐指数
1
解决办法
872
查看次数

使用 chi2 测试进行具有连续特征的特征选择(Scikit Learn)

我试图从许多连续特征中预测二元(分类)目标,并希望在进入模型拟合之前缩小特征空间。我注意到 SKLearn 的 Feature Selection 包中的 SelectKBest 类在 Iris 数据集上有以下示例(它也从连续特征预测二进制目标):

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
X.shape
(150, 4)
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
X_new.shape
(150,2)
Run Code Online (Sandbox Code Playgroud)

该示例使用 chi2 检验来确定模型中应使用哪些特征。然而,我的理解是 chi2 测试严格用于我们具有预测分类性能的分类特征的情况。我不认为 chi2 测试可以用于这样的场景。我的理解有误吗?chi2 检验能否用于检验分类变量是否依赖于连续变量?

python chi-squared feature-selection scikit-learn

5
推荐指数
1
解决办法
1931
查看次数

Bag of Words (BOW) vs N-gram (sklearn CountVectorizer) - 文本文档分类

据我所知,在 Bag Of Words 方法中,特征是一组单词及其在文档中的频率计数。另一方面,N-grams,例如unigrams也完全一样,只是没有考虑单词出现的频率。

我想使用 sklearn 和 CountVectorizer 来实现 BOW 和 n-gram 方法。

对于 BOW,我的代码如下所示:

CountVectorizer(ngram_range=(1, 1), max_features=3000)
Run Code Online (Sandbox Code Playgroud)

是否足以将“二进制”参数设置为 True 以执行 n-gram 特征选择?

CountVectorizer(ngram_range=(1, 1), max_features=3000, binary=True)
Run Code Online (Sandbox Code Playgroud)

n-gram 相对于 BOW 方法的优势是什么?

python feature-extraction n-gram feature-selection scikit-learn

5
推荐指数
1
解决办法
4488
查看次数

如何在随机森林模型训练中最好地使用邮政编码?

我有一个带有邮政编码列的数据集。它们在输出中具有一定的意义,我想将其用作一项功能。我正在使用随机森林模型。

我需要有关使用邮政编码列作为功能的最佳方法的建议。(例如,我应该获取该邮政编码的纬度/经度,而不是直接输入邮政编码等)

提前致谢 !!

zipcode machine-learning feature-selection random-forest h2o

5
推荐指数
1
解决办法
3466
查看次数

SelectKBest (chi2) 如何计算分数?

我试图通过将特征选择方法应用于我的数据集来找到最有价值的特征。我现在使用 SelectKBest 函数。我可以生成分数值并根据需要对它们进行排序,但我不明白这个分数值是如何计算的。我知道理论上高分更有价值,但我需要一个数学公式或一个例子来计算分数以深入学习。

bestfeatures = SelectKBest(score_func=chi2, k=10)
fit = bestfeatures.fit(dataValues, dataTargetEncoded)
feat_importances = pd.Series(fit.scores_, index=dataValues.columns)
topFatures = feat_importances.nlargest(50).copy().index.values

print("TOP 50 Features (Best to worst) :\n")
print(topFatures)
Run Code Online (Sandbox Code Playgroud)

先感谢您

python machine-learning chi-squared feature-selection scikit-learn

5
推荐指数
1
解决办法
4757
查看次数

为什么 R 中的 grpreg 库和 gglasso 库对于 LASSO 组给出不同的结果?

我一直在尝试使用 LASSO 进行无监督特征选择(通过删除类列)。数据集包括分类(因子)和连续(数字)变量。链接在这里。我构建了一个设计矩阵,使用model.matrix()它为每个级别的分类变量创建虚拟变量。

dataset <- read.xlsx("./hepatitis.data.xlsx", sheet = "hepatitis", na.strings = "")
names_df <- names(dataset)
formula_LASSO <- as.formula(paste("~ 0 +", paste(names_df, collapse = " + ")))
LASSO_df <- model.matrix(object = formula_LASSO, data = dataset, contrasts.arg = lapply(dataset[ ,sapply(dataset, is.factor)], contrasts, contrasts = FALSE ))

### Group LASSO using gglasso package
gglasso_group <- c(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, …
Run Code Online (Sandbox Code Playgroud)

r lasso-regression feature-selection unsupervised-learning

5
推荐指数
1
解决办法
1125
查看次数

相关系数解释--特征选择

如何根据相关系数确定要从我们的模型中删除的变量。

请参阅下面的变量示例:

Top 10 Absolute Correlations:
  Variable 1      Variable 2        Correlation Value
    pdays           pmonths           1.000000
    emp.var.rate    euribor3m         0.970955
    euribor3m       nr.employed       0.942545
    emp.var.rate    nr.employed       0.899818
    previous        pastEmail         0.798017
    emp.var.rate    cons.price.idx    0.763827
    cons.price.idx  euribor3m         0.670844
    contact         cons.price.idx    0.585899
    previous        nr.employed       0.504471
    cons.price.idx  nr.employed       0.490632
Run Code Online (Sandbox Code Playgroud)

自变量的相关矩阵热图“:

下图是自变量的相关矩阵热图

问题:

1)如何从两个变量之间计算的Correlation-value中去除一个高相关变量

:之间的相关值pdayspmonths1.000000 哪个变量从模型天或pmonths被删除?变量是如何确定的?

2)考虑丢弃变量的相关阈值范围是多少?例如:>0.65或>0.90等

3)请您解释一下上面的热图并解释要删除的变量及其原因?

python heatmap correlation feature-selection

5
推荐指数
1
解决办法
992
查看次数