Допустим, у меня есть следующий DataFrame ( упрощенно , конечно):
df = pd.DataFrame([
'Hello', 'Bye', 'Hello', 'Hello', 'Bye', 'Hello', 'Bye', '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
не предоставляется.
Есть идеи о том, что мне здесь не хватает?