我在matlab上使用400x1000矩阵运行kmeans,出于某种原因,每当我运行算法时,我得到的结果都不同.下面是一个代码示例:
[idx, ~, ~, ~] = kmeans(factor_matrix, 10, 'dist','sqeuclidean','replicates',20);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,每次运行此代码我都会得到不同的结果?有任何想法吗?
我用它来识别多重共线性问题.
谢谢您的帮助!
我正在研究是否可以根据编码风格自动计算学生代码的得分.这包括避免重复代码,注释掉代码,变量命名错误等等.
我们正在尝试根据过去学期的作文分数(从1-3开始)学习,这很好地导致了有监督的学习.基本思想是我们从学生的提交中提取特征,并创建feature_vector,然后使用scikit-learn通过逻辑回归运行它.我们还尝试了各种各样的事情,包括在特征向量上运行PCA以减少维数.
我们的分类器只是猜测最频繁的类,即2分.我相信这是因为我们的功能无论如何都不能预测.有监督的学习算法是否还有其他可能的原因来猜测优势类?有什么方法可以防止这种情况吗?
我认为这是因为这些功能不具备预测性,有没有办法确定"好"的功能是什么?(好的,我的意思是可辨别的或预测性的).
注意:作为一项辅助实验,我们通过对已经评分的读者成绩分配测试了过去成绩的一致性.只有55%的人给出了相同的项目成分(1-3).这可能意味着这个数据集根本无法归类,因为人类甚至无法进行一致评分.关于其他想法的任何提示?或者事实上是否真的如此?
功能包括:重复代码行数,平均函数长度,1个字符变量数,包含注释掉代码的行数,最大行长度,未使用导入计数,未使用变量,未使用参数.还有一些...我们将所有功能可视化,并发现虽然平均值与分数相关,但变化非常大(不太有希望).
编辑:我们项目的范围:我们只是试图从一个特定项目(给出骨架代码)中学习.我们还不需要概括.
statistics machine-learning feature-extraction feature-selection supervised-learning
我正在尝试使用R包在SVM中应用特征选择(例如递归特征选择).我已经安装了Weka,它支持LibSVM中的功能选择,但我没有找到任何SVM语法或类似的例子.一个简短的例子将是一个很大的帮助.
我一直在玩一些SVM实现,我想知道 - 将特征值标准化以适应一个范围的最佳方法是什么?(从0到1)
假设我有3个功能,其值范围为:
3 - 5.
0.02 - 0.05
10-15.
如何将所有这些值转换为[0,1]的范围?
如果在训练期间,我将遇到的特征编号1的最高值为5,并且在我开始在更大的数据集上使用我的模型之后,我会偶然发现高达7的值?然后在转换范围内,它将超过1 ......
如何在训练期间对值进行标准化,以解释"野外值"超过训练期间"看到"模型的最高(或最低)值的可能性?如果发生这种情况,模型将如何对此作出反应以及如何使其正常工作?
基于递归特征消除和使用scikit-learn的网格搜索,我知道RFECV可以结合使用GridSearchCV以获得更好的模型参数设置,如线性SVM.
如答案所述,有两种方法:
"在RFECV上运行GridSearchCV,这将导致数据分成两次折叠(GridSearchCV内部和RFECV内部),但搜索组件数量将是有效的."
"GridSearchCV仅针对RFE,这将导致数据的单一分割,但是对RFE估计器的参数进行非常低效的扫描."
为了使我的问题清楚,我必须首先澄清RFECV:
将整个数据拆分为n个折叠.
在每个折叠中,通过仅拟合训练数据来获得特征等级rfe.
对排名进行排序并使训练数据适合SVM并在测试数据上进行测试以进行评分.这应该进行m次,每次都有减少的特征数量,其中m是假设的特征数量step=1.
在前一步骤中获得一系列得分,并且在步骤1~3已经进行n次之后,这样的序列将最后在n次折叠中平均,得到平均评分序列,表明要做的最佳特征数rfe.
以功能最数目的参数n_features_to_select在rfe装有原始整个数据.
.support_获得特色中的"赢家"; .grid_scores_得到平均得分序列.
所以我的问题是在哪里放置GridSearchCV?我猜第二种方式"在RFE上做GridSearchCV"是在第5步做GridSearchCV,它将SVM的参数设置为网格中的一个值,使其适合GridSearchCV分割的训练数据,以获得步骤中建议的功能数量4,并用其余的数据进行测试以获得分数.这样的过程在k次完成,平均得分表示网格中该值的良好性,其中k是cvGridSearchCV中的参数.但是,由于替代训练数据和网格值,所选功能可能会有所不同,如果按照我的猜测完成,则第二种方式不合理.
GridSearchCV实际上如何与RFECV结合?
我试图在 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) 我正在寻找使用 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
我是命名实体识别的新手,我在理解用于此任务的功能/功能方面遇到了一些麻烦.
到目前为止我读过的一些论文提到了使用的功能,但没有真正解释它们,例如在 CoNLL-2003共享任务简介:与语言无关的命名实体识别中,提到了以下功能:
参与CoNLL-2003共享任务的16个系统使用的主要功能按英语测试数据的性能排序.Aff:附加信息(n-gram); 包:一袋字; cas:全球案例信息; chu:chunk标签; doc:全球文件信息; gaz:地名录; lex:词汇特征; ort:正交信息; pat:正交模式(如Aa0); pos:词性标签; pre:先前预测的NE标签; quo:标记该单词在引号之间; 三:触发词.
不过,我对其中一些人感到有些困惑.例如:
我认为我在这里需要的只是查看一个示例表,其中每个功能都作为列,并查看它们的值以了解它们是如何工作的,但到目前为止,我找不到易于阅读的数据集.
有人可以澄清或指出我使用这些功能的一些解释或示例吗?
nlp classification machine-learning named-entity-recognition feature-selection
我正在使用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也可以确定主要功能之间的相对重要性?
如果需要,我很高兴增加树木或类似树木的数量。与此相关,是否有办法查看此排名的信心?
我目前正在使用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 一起使用吗?
scikit-learn ×5
python ×2
svm ×2
grid-search ×1
k-means ×1
lightgbm ×1
matlab ×1
nlp ×1
python-2.7 ×1
r ×1
range ×1
statistics ×1
weka ×1
xgboost ×1