代码之家  ›  专栏  ›  技术社区  ›  nakoshimati

所有中间步骤都应该是transformer和implement fit and transforming,或者是字符串“passthrough”

  •  1
  • nakoshimati  · 技术社区  · 2 年前

    我在学习 In Depth: k-Means Clustering 课本的一节 Jake VanderPlas's Python Data Science Handbook 我发现了以下代码块:

    from sklearn.datasets import load_digits
    from sklearn.manifold import TSNE
    from sklearn.cluster import KMeans
    
    digits = load_digits()
    
    # Project the data: this step will take several seconds
    tsne = TSNE(n_components=2, init='random', random_state=0)
    digits_proj = tsne.fit_transform(digits.data)
    
    # Compute the clusters
    kmeans = KMeans(n_clusters=10, random_state=0)
    clusters = kmeans.fit_predict(digits_proj)
    

    这本书中的代码(为了澄清我的问题,我做了一些更改,您可以从第一个链接查看原始代码)运行时没有任何问题。然后我试着通过 sklearn.pipeline.Pipeline 上面的模型。这是我的代码:

    from sklearn.datasets import load_digits
    from sklearn.manifold import TSNE
    from sklearn.cluster import KMeans
    from sklearn.pipeline import Pipeline
    
    digits = load_digits()
    
    estimators = [('reduce_dim', TSNE(n_components=2, init='random', random_state=0)),
                  ('cls', KMeans(n_clusters=10, random_state=0))]
    
    pipe = Pipeline(estimators)
    
    clusters = pipe.fit_predict(digits.data)
    

    我试着运行我的代码,但每次我都收到错误消息

    TypeError:所有中间步骤都应该是transformer并实现fit-and-transform,或者是字符串“passthrough”“TSNE(init='random',random_state=0)”(type)not

    问题是 TSNE() step是一个变换器,也实现了拟合和变换。我们可以从书中的原始代码中看到这一点

    tsne = TSNE(n_components=2, init='random', random_state=0)
    digits_proj = tsne.fit_transform(digits.data)
    

    但错误信息却恰恰相反。我读了scikit learn的文档(特别是, sklearn.manifold.TSNE Pipelines and composite estimators )但医生没有给我任何帮助。你认为问题出在哪里?

    0 回复  |  直到 2 年前
    推荐文章