【问题标题】:Finding the optimal combination of algorithms in an sklearn machine learning toolchain在 sklearn 机器学习工具链中找到算法的最佳组合
【发布时间】:2016-12-02 18:28:10
【问题描述】:

在 sklearn 中,可以创建一个管道来优化机器学习设置的完整工具链,如以下示例所示:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA
estimators = [('reduce_dim', PCA()), ('svm', SVC())]
clf = Pipeline(estimators)

现在,管道根据定义表示一个串行过程。但是,如果我想在管道的同一级别上比较不同的算法怎么办?假设我想在 PCA 之外尝试另一种特征转换算法,在 SVM 之外尝试另一种机器学习算法,例如树,并从 4 种可能的组合中获得最好的?这可以用某种并行管道表示,还是在 sklearn 中有一个元算法?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    管道不是并行进程。这是相当连续的(管道line) - 请参阅here 文档,提及:

    依次应用变换列表和最终估算器。 [...] 管道的目的是在设置不同参数的同时将多个步骤组合在一起进行交叉验证。

    因此,您只需更改一个参数即可创建两条管道。然后,您将能够比较结果并保持更好。如果你想,比如说,比较更多的估算器,你可以自动化这个过程

    这是一个简单的例子:

    from sklearn.svm import SVC
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import f_regression
    from sklearn.decomposition import PCA
    
    clf1 = SVC(Kernel = 'rbf')
    clf2 = RandomForestClassifier()
    
    feat_selec1 = SelectKBest(f_regression)
    feat_selec2 = PCA() 
    
    for selec in [('SelectKBest', feat_selec1), ('PCA', feat_select2)]:
        for clf in [('SVC', clf1), ('RandomForest', clf2):
            pipe = Pipeline([selec, clf])
            //Do your training / testing cross_validation
    

    【讨论】:

      【解决方案2】:

      管道是顺序的:

      Data -> Process input with algorithm A -> Process input with algorithm B -> ...
      

      类似的东西,我也认为您正在寻找的东西被称为“合奏”。例如,在分类上下文中,您可以训练多个 SVM,但使用不同的特征:

            |-SVM A gets features x_1, ... x_n       -> vote for class 1 -|
      DATA -|-SVM B gets features x_{n+1}, ..., x_m  -> vote for class 1 -| -> Classify
            |-SVM C gets features x_{m+1}, ..., x_p  -> vote for class 0 -|
      

      在这个小例子中,3 个分类器中有 2 个投给了第 1 类,第 3 个分类器投给了第 0 类。因此,通过多数投票,集成将数据分类为第 1 类。(这里,分类器是并行执行的)

      当然,您可以在一个集成中拥有多个管道。

      请参阅sklearns Ensemble methods 以获得很好的总结。

      我不久前为不同的集成方法制作的简短图像摘要:

      【讨论】:

        猜你喜欢
        • 2012-01-28
        • 2018-11-27
        • 1970-01-01
        • 2016-04-20
        • 2020-06-06
        • 2020-01-25
        • 2011-07-23
        • 2019-06-13
        • 2016-09-19
        相关资源
        最近更新 更多