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) 我正在处理十万(100,000)份文件(平均文件长度约为 500 个术语)。对于每个文档,我想通过余弦相似度获得前 k 个(例如 k = 5)个相似文档。那么如何通过Python有效地做到这一点。
这是我所做的:
我在 i5-2.5GHz 上运行我的代码,12 小时过去了,但它仍然有效。所以我想知道如何优化我的代码或程序。
这是我的想法:
那么,你有什么好主意吗?
非常感谢。
我知道有一个类似的问题,但这不是我想要的。
感谢 @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) 我正在尝试在我的机器学习项目中为scikit learn和weka数据挖掘工具之间做出决定.但是我意识到需要选择特征.我想知道scikit learn是否有用于特征选择的包装方法.
我是新来的火花。我正在研究一个分类模型,想使用 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
我试图从许多连续特征中预测二元(分类)目标,并希望在进入模型拟合之前缩小特征空间。我注意到 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 检验能否用于检验分类变量是否依赖于连续变量?
据我所知,在 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
我有一个带有邮政编码列的数据集。它们在输出中具有一定的意义,我想将其用作一项功能。我正在使用随机森林模型。
我需要有关使用邮政编码列作为功能的最佳方法的建议。(例如,我应该获取该邮政编码的纬度/经度,而不是直接输入邮政编码等)
提前致谢 !!
zipcode machine-learning feature-selection random-forest h2o
我试图通过将特征选择方法应用于我的数据集来找到最有价值的特征。我现在使用 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
我一直在尝试使用 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) 如何根据相关系数确定要从我们的模型中删除的变量。
请参阅下面的变量示例:
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中去除一个高相关变量
例:之间的相关值pdays 和pmonths 是 1.000000 哪个变量从模型天或pmonths被删除?变量是如何确定的?
2)考虑丢弃变量的相关阈值范围是多少?例如:>0.65或>0.90等
3)请您解释一下上面的热图并解释要删除的变量及其原因?
python ×6
scikit-learn ×3
chi-squared ×2
algorithm ×1
apache-spark ×1
correlation ×1
h2o ×1
heatmap ×1
n-gram ×1
numpy ×1
pandas ×1
python-2.7 ×1
r ×1
tf-idf ×1
zipcode ×1