标签: feature-selection

Matlab:Kmeans每次给出不同的结果

我在matlab上使用400x1000矩阵运行kmeans,出于某种原因,每当我运行算法时,我得到的结果都不同.下面是一个代码示例:

[idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,每次运行此代码我都会得到不同的结果?有任何想法吗?

我用它来识别多重共线性问题.

谢谢您的帮助!

matlab k-means feature-selection

8
推荐指数
2
解决办法
7960
查看次数

编码风格的监督学习 - 特征选择(Scikit Learn)

我正在研究是否可以根据编码风格自动计算学生代码的得分.这包括避免重复代码,注释掉代码,变量命名错误等等.

我们正在尝试根据过去学期的作文分数(从1-3开始)学习,这很好地导致了有监督的学习.基本思想是我们从学生的提交中提取特征,并创建feature_vector,然后使用scikit-learn通过逻辑回归运行它.我们还尝试了各种各样的事情,包括在特征向量上运行PCA以减少维数.

我们的分类器只是猜测最频繁的类,即2分.我相信这是因为我们的功能无论如何都不能预测.有监督的学习算法是否还有其他可能的原因来猜测优势类?有什么方法可以防止这种情况吗?

我认为这是因为这些功能不具备预测性,有没有办法确定"好"的功能是什么?(好的,我的意思是可辨别的或预测性的).

注意:作为一项辅助实验,我们通过对已经评分的读者成绩分配测试了过去成绩的一致性.只有55%的人给出了相同的项目成分(1-3).这可能意味着这个数据集根本无法归类,因为人类甚至无法进行一致评分.关于其他想法的任何提示?或者事实上是否真的如此?

功能包括:重复代码行数,平均函数长度,1个字符变量数,包含注释掉代码的行数,最大行长度,未使用导入计数,未使用变量,未使用参数.还有一些...我们将所有功能可视化,并发现虽然平均值与分数相关,但变化非常大(不太有希望).

编辑:我们项目的范围:我们只是试图从一个特定项目(给出骨架代码)中学习.我们还不需要概括.

statistics machine-learning feature-extraction feature-selection supervised-learning

8
推荐指数
1
解决办法
499
查看次数

R中svm特征选择的示例

我正在尝试使用R包在SVM中应用特征选择(例如递归特征选择).我已经安装了Weka,它支持LibSVM中的功能选择,但我没有找到任何SVM语法或类似的例子.一个简短的例子将是一个很大的帮助.

r machine-learning svm weka feature-selection

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

规范化SVM的特征值

我一直在玩一些SVM实现,我想知道 - 将特征值标准化以适应一个范围的最佳方法是什么?(从0到1)

假设我有3个功能,其值范围为:

  1. 3 - 5.

  2. 0.02 - 0.05

  3. 10-15.

如何将所有这些值转换为[0,1]的范围?

如果在训练期间,我将遇到的特征编号1的最高值为5,并且在我开始在更大的数据集上使用我的模型之后,我会偶然发现高达7的值?然后在转换范围内,它将超过1 ......

如何在训练期间对值进行标准化,以解释"野外值"超过训练期间"看到"模型的最高(或最低)值的可能性?如果发生这种情况,模型将如何对此作出反应以及如何使其正常工作?

machine-learning range normalization svm feature-selection

7
推荐指数
2
解决办法
5953
查看次数

具有RFECV的GridSearchCV在sklearn中的含义

基于递归特征消除和使用scikit-learn的网格搜索,我知道RFECV可以结合使用GridSearchCV以获得更好的模型参数设置,如线性SVM.

如答案所述,有两种方法:

  • "在RFECV上运行GridSearchCV,这将导致数据分成两次折叠(GridSearchCV内部和RFECV内部),但搜索组件数量将是有效的."

  • "GridSearchCV仅针对RFE,这将导致数据的单一分割,但是对RFE估计器的参数进行非常低效的扫描."

为了使我的问题清楚,我必须首先澄清RFECV:

  1. 将整个数据拆分为n个折叠.

  2. 在每个折叠中,通过仅拟合训练数据来获得特征等级rfe.

  3. 对排名进行排序并使训练数据适合SVM并在测试数据上进行测试以进行评分.这应该进行m次,每次都有减少的特征数量,其中m是假设的特征数量step=1.

  4. 在前一步骤中获得一系列得分,并且在步骤1~3已经进行n次之后,这样的序列将最后在n次折叠中平均,得到平均评分序列,表明要做的最佳特征数rfe.

  5. 以功能最数目的参数n_features_to_selectrfe装有原始整个数据.

  6. .support_获得特色中的"赢家"; .grid_scores_得到平均得分序列.

  7. 如果我错了请纠正我,谢谢.

所以我的问题是在哪里放置GridSearchCV?我猜第二种方式"在RFE上做GridSearchCV"是在第5步做GridSearchCV,它将SVM的参数设置为网格中的一个值,使其适合GridSearchCV分割的训练数据,以获得步骤中建议的功能数量4,并用其余的数据进行测试以获得分数.这样的过程在k次完成,平均得分表示网格中该值的良好性,其中k是cvGridSearchCV中的参数.但是,由于替代训练数据和网格值,所选功能可能会有所不同,如果按照我的猜测完成,则第二种方式不合理.

GridSearchCV实际上如何与RFECV结合?

feature-selection scikit-learn cross-validation

7
推荐指数
0
解决办法
1120
查看次数

在 scikit-learn 中结合递归特征消除和网格搜索

我试图在 scikit-learn 中结合递归特征消除和网格搜索。正如您从下面的代码(有效)中看到的那样,我能够从网格搜索中获得最佳估计量,然后将该估计量传递给 RFECV。但是,我宁愿先进行 RFECV,然后再进行网格搜索。问题是,当我将选择器 ?from RFECV 传递给网格搜索时,它不接受:

ValueError:估计器 RFECV 的参数引导程序无效

是否可以从 RFECV 获取选择器并将其直接传递给 RandomizedSearchCV,或者这在程序上不是正确的做法?

from sklearn.datasets import make_classification
from sklearn.feature_selection import RFECV
from sklearn.grid_search import GridSearchCV, RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint as sp_randint

# Build a classification task using 3 informative features
X, y = make_classification(n_samples=1000, n_features=25, n_informative=5, n_redundant=2, n_repeated=0, n_classes=8, n_clusters_per_class=1, random_state=0)

grid = {"max_depth": [3, None],
        "min_samples_split": sp_randint(1, 11),
        "min_samples_leaf": sp_randint(1, 11),
        "bootstrap": [True, False],
        "criterion": ["gini", "entropy"]}

estimator = RandomForestClassifierCoef()
clf = …
Run Code Online (Sandbox Code Playgroud)

feature-selection scikit-learn grid-search

7
推荐指数
1
解决办法
2821
查看次数

使用sklearn进行多标签特征选择

我正在寻找使用 sklearn 对多标签数据集执行特征选择。我想获得标签的最终特征集,然后我将在另一个机器学习包中使用这些特征。我打算使用我在这里看到的方法,它分别为每个标签选择相关特征。

from sklearn.svm import LinearSVC
from sklearn.feature_selection import chi2, SelectKBest
from sklearn.multiclass import OneVsRestClassifier
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
                ('svm', LinearSVC())])
multi_clf = OneVsRestClassifier(clf)
Run Code Online (Sandbox Code Playgroud)

然后我计划使用以下方法提取每个标签包含的特征的索引:

selected_features = []
for i in multi_clf.estimators_:
    selected_features += list(i.named_steps["chi2"].get_support(indices=True))
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,如何选择要包含在最终模型中的选定特征?我可以使用每一个独特的特征(包括只与一个标签相关的特征),或者我可以做一些事情来选择与更多标签相关的特征。

我最初的想法是创建一个给定特征选择的标签数量的直方图,并根据视觉检查确定一个阈值。我担心的是这种方法是主观的。使用 sklearn 为多标签数据集执行特征选择是否有更原则性的方法?

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

7
推荐指数
1
解决办法
8350
查看次数

命名实体识别(NER)功能

我是命名实体识别的新手,我在理解用于此任务的功能/功能方面遇到了一些麻烦.

到目前为止我读过的一些论文提到了使用的功能,但没有真正解释它们,例如在 CoNLL-2003共享任务简介:与语言无关的命名实体识别中,提到了以下功能:

参与CoNLL-2003共享任务的16个系统使用的主要功能按英语测试数据的性能排序.Aff:附加信息(n-gram); 包:一袋字; cas:全球案例信息; chu:chunk标签; doc:全球文件信息; gaz:地名录; lex:词汇特征; ort:正交信息; pat:正交模式(如Aa0); pos:词性标签; pre:先前预测的NE标签; quo:标记该单词在引号之间; 三:触发词.

不过,我对其中一些人感到有些困惑.例如:

  • 是不是应该是一种生成功能的方法(每个单词一个)?BOW本身如何成为一种功能?或者这仅仅意味着除了提到的所有其他功能外,我们还有BOW中的每个单词的功能?
  • 地名录如何成为一个特征?
  • 如何将POS标签完全用作功能?我们不是每个单词都有一个POS标签吗?是不是每个对象/实例都是"文本"?
  • 什么是全球文件信息?
  • 什么是功能触发词?

我认为我在这里需要的只是查看一个示例表,其中每个功能都作为列,并查看它们的值以了解它们是如何工作的,但到目前为止,我找不到易于阅读的数据集.

有人可以澄清或指出我使用这些功能的一些解释或示例吗?

nlp classification machine-learning named-entity-recognition feature-selection

7
推荐指数
1
解决办法
3377
查看次数

scikit-学习功能排名返回相同的值

我正在使用scikit-learn的RFECV类来执行功能选择。我对确定一堆变量的相对重要性感兴趣。但是,scikit-learn对于多个变量返回相同的排名(1)。这也可以在他们的示例代码中看到:

>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFECV
>>> from sklearn.svm import SVR
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFECV(estimator, step=1, cv=5)
>>> selector = selector.fit(X, y)
>>> selector.support_ 
array([ True,  True,  True,  True,  True, False, False, False, False,
       False])
>>> selector.ranking_
array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
Run Code Online (Sandbox Code Playgroud)

有没有办法让scikit-learn也可以确定主要功能之间的相对重要性?

如果需要,我很高兴增加树木或类似树木的数量。与此相关,是否有办法查看此排名的信心?

python machine-learning feature-selection scikit-learn

7
推荐指数
1
解决办法
183
查看次数

如何将 RFE 与 xgboost Booster 一起使用?

我目前正在使用xgb.train(...)which 返回一个助推器,但我想使用 RFE 来选择最好的 100 个功能。返回的 booster 不能在 RFE 中使用,因为它不是 sklearn 估计器。XGBClassifier 是 xgboost 库中的 sklearn api,但是,我无法获得与该xgb.train(...)方法相同的结果(在 roc-auc 上差 10%)。我已经尝试过 sklearn 助推器,但它们也无法获得类似的结果。我还尝试将该xgb.train(...)方法包装在一个类中以添加 sklearn estimator 方法,但要更改的方法太多了。有什么方法可以将xgb.train(...)sklearn 的 RFE 与 RFE 一起使用吗?

python feature-selection scikit-learn xgboost lightgbm

7
推荐指数
1
解决办法
369
查看次数