假设我有以下DataFrame(当然,过分简化):
df = pd.DataFrame([
'Hello','Bye','Hello','Hello'
],columns=['A'])
我还有以下估算器/变换器,用于根据相似度将A
的所有值聚类为 N 个聚类:
class Clusterer(BaseEstimator,TransformerMixin):
def __init__(self,nclusters=2):
print('__init__({}) called'.format(nclusters))
self._vectorizer = CountVectorizer(strip_accents='unicode',stop_words='english')
self._nclusters = nclusters
def fit(self,X,y=None):
# Vectorize all values,then cluster
self._clusters = [
KMeans(n_clusters=self._nclusters)
.fit(self._vectorizer.fit_transform(x))
for x in X.values.T
]
return self
def transform(self,X):
# Return cluster labels
return np.array([c.labels_ for c in self._clusters])
请注意print
下的__init__
语句
我希望得到以下转换
A
--
0
1
0
0
0
1
0
1
0
请注意,所有内容均已以0
或1
进行编码(我提供的示例是真实数据的真正简化版本)
我创建了以下转换:
ctf = ColumnTransformer([
('a',Clusterer(nclusters=2),['A'])
])
但是,执行后:
ctf.fit_transform(df)
我得到以下印刷声明:
__init__(2)
__init__(None)
由于未提供n_clusters
,因此在实际群集期间会导致错误。
我在这里想念什么吗?