我在学习
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
)但医生没有给我任何帮助。你认为问题出在哪里?