小编fer*_*vam的帖子

GridSearch用于OneVsRestClassifier内的估算器

我想在SVC模型中执行GridSearchCV,但是它使用one-vs-all策略.对于后者,我可以这样做:

model_to_set = OneVsRestClassifier(SVC(kernel="poly"))
Run Code Online (Sandbox Code Playgroud)

我的问题是参数.假设我想尝试以下值:

parameters = {"C":[1,2,4,8], "kernel":["poly","rbf"],"degree":[1,2,3,4]}
Run Code Online (Sandbox Code Playgroud)

为了执行GridSearchCV,我应该做类似的事情:

 cv_generator = StratifiedKFold(y, k=10)
 model_tunning = GridSearchCV(model_to_set, param_grid=parameters, score_func=f1_score, n_jobs=1, cv=cv_generator)
Run Code Online (Sandbox Code Playgroud)

但是,然后我执行它得到:

Traceback (most recent call last):
  File "/.../main.py", line 66, in <module>
    argclass_sys.set_model_parameters(model_name="SVC", verbose=3, file_path=PATH_ROOT_MODELS)
  File "/.../base.py", line 187, in set_model_parameters
    model_tunning.fit(self.feature_encoder.transform(self.train_feats), self.label_encoder.transform(self.train_labels))
  File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 354, in fit
    return self._fit(X, y)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 392, in _fit
    for clf_params in grid for train, test in cv)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line 473, in __call__
    self.dispatch(function, args, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn

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

TypeError:只有具有一个元素的整数数组才能转换为索引

使用交叉验证执行递归功能选择时出现以下错误:

Traceback (most recent call last):
  File "/Users/.../srl/main.py", line 32, in <module>
    argident_sys.train_classifier()
  File "/Users/.../srl/identification.py", line 194, in train_classifier
    feat_selector.fit(train_argcands_feats,train_argcands_target)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 298, in fit
    ranking_ = rfe.fit(X[train], y[train]).ranking_
TypeError: only integer arrays with one element can be converted to an index
Run Code Online (Sandbox Code Playgroud)

生成错误的代码如下:

def train_classifier(self):

    # Get the argument candidates
    argcands = self.get_argcands(self.reader)

    # Extract the necessary features from the argument candidates
    train_argcands_feats = []
    train_argcands_target = []

    for argcand in argcands:
        train_argcands_feats.append(self.extract_features(argcand))
        if argcand["info"]["label"] == "NULL":
            train_argcands_target.append("NULL")
        else: …
Run Code Online (Sandbox Code Playgroud)

python feature-selection scikit-learn

31
推荐指数
2
解决办法
3万
查看次数

首先做什么:特征选择或模型参数设置?

这更像是一个"理论"问题.我正在使用scikit-learn包来执行一些NLP任务.Sklearn提供了许多方法来执行特征选择和模型参数的设置.我想知道我应该先做什么.

如果我使用单变量特征选择,很明显我应该首先进行特征选择,然后使用所选特征,然后我将估计器的参数调整.

但是,如果我想使用递归功能消除怎么办?我应该首先使用所有原始功能使用网格搜索设置参数,然后执行功能选择吗?或者我可能首先选择功能(使用估算器的默认参数),然后使用所选功能设置参数?

在此先感谢你能给我的任何帮助.

编辑

我在这里说的问题几乎相同.到那时,还没有解决方案.有人知道它现在是否存在?

python machine-learning feature-selection scikit-learn

13
推荐指数
1
解决办法
1959
查看次数

predict_proba或decision_function作为估算器"置信度"

我正在使用LogisticRegression作为模型来训练scikit-learn中的估算器.我使用的功能(大多数)是绝对的; 标签也是如此.因此,我分别使用DictVectorizer和LabelEncoder来正确编码值.

培训部分相当简单,但我遇到了测试部分的问题.简单的事情是使用训练模型的"预测"方法并获得预测标签.但是,对于我之后需要进行的处理,我需要每个特定实例的每个可能标签(类)的概率.我决定使用"predict_proba"方法.但是,对于同一个测试实例,我会得到不同的结果,无论我是在实例单独使用还是在其他实例的情况下使用此方法.

接下来,是一个重现问题的代码.

from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import LabelEncoder


X_real = [{'head': u'n\xe3o', 'dep_rel': u'ADVL'}, 
          {'head': u'v\xe3o', 'dep_rel': u'ACC'}, 
          {'head': u'empresa', 'dep_rel': u'SUBJ'}, 
          {'head': u'era', 'dep_rel': u'ACC'}, 
          {'head': u't\xeam', 'dep_rel': u'ACC'}, 
          {'head': u'import\xe2ncia', 'dep_rel': u'PIV'}, 
          {'head': u'balan\xe7o', 'dep_rel': u'SUBJ'}, 
          {'head': u'ocupam', 'dep_rel': u'ACC'}, 
          {'head': u'acesso', 'dep_rel': u'PRED'}, 
          {'head': u'elas', 'dep_rel': u'SUBJ'}, 
          {'head': u'assinaram', 'dep_rel': u'ACC'}, 
          {'head': u'agredido', 'dep_rel': u'SUBJ'}, 
          {'head': u'pol\xedcia', 'dep_rel': u'ADVL'}, 
          {'head': u'se', 'dep_rel': u'ACC'}] 
y_real = [u'AM-NEG', u'A1', u'A0', u'A1', …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn

12
推荐指数
1
解决办法
2627
查看次数

文本为scikit-learn中的分类算法提供输入格式

我开始使用scikit-learn做一些NLP.我已经使用了NLTK的一些分类器,现在我想尝试在scikit-learn中实现的分类器.

我的数据基本上是句子,我从这些句子的某些单词中提取特征来做一些分类任务.我的大多数功能都是名义上的:单词的词性(POS),左到右的单词,左到右的单词,右到右的单词,POS单词到单词. - 正确的,句法关系从一个词到另一个词的路径等.

当我使用NLTK分类器(决策树,朴素贝叶斯)进行一些实验时,特征集只是一个字典,其中包含特征的相应值:标称值.例如:[{"postag":"noun","wleft":"house","path":"VPNPNP",...},....].我只需将其传递给分类器,他们就完成了自己的工作.

这是使用的代码的一部分:

def train_classifier(self):
        if self.reader == None:
            raise ValueError("No reader was provided for accessing training instances.")

        # Get the argument candidates
        argcands = self.get_argcands(self.reader)

        # Extract the necessary features from the argument candidates
        training_argcands = []
        for argcand in argcands:
            if argcand["info"]["label"] == "NULL":
                training_argcands.append( (self.extract_features(argcand), "NULL") )
            else:
                training_argcands.append( (self.extract_features(argcand), "ARG") )

        # Train the appropriate supervised model
        self.classifier = DecisionTreeClassifier.train(training_argcands)

        return
Run Code Online (Sandbox Code Playgroud)

以下是提取的一个功能集的示例:

[({'phrase': u'np', 'punct_right': 'NULL', 'phrase_left-sibling': 'NULL', 'subcat': 'fcl=np np vp np …
Run Code Online (Sandbox Code Playgroud)

python text-processing classification scikit-learn feature-engineering

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

使用StratifiedShuffleSplit和稀疏矩阵

我试图复制StratifiedShuffleSplitX 的例子,不是数组而是稀疏矩阵.在下面的示例中,此矩阵是通过DictVectorizer拟合混合名义和数字要素的数组创建的.

from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import LabelEncoder
from sklearn.cross_validation import StratifiedShuffleSplit

X = [{"a":1, "b":"xx"}, {"a":2, "b":"yx"}, {"a":2, "b":"yx"}, {"a":1, "b":"xx"}]
y = ["A", "B", "B", "A"]

X = DictVectorizer().fit_transform(X)
y = LabelEncoder().fit_transform(y)

sss = StratifiedShuffleSplit(y, 3, test_size=0.5, random_state=0)

for train_index, test_index in sss:
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,抛出以下错误:

Traceback (most recent call last):
  File ".../test.py", line 22, in <module>
    X_train, X_test = X[train_index], X[test_index]
TypeError: only …
Run Code Online (Sandbox Code Playgroud)

python numpy classification scikit-learn

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