【发布时间】:2021-09-06 01:48:09
【问题描述】:
我正在 scikit-learn 中编写一个自定义转换器,它使用股票 KMeans 将集群标签作为新列添加到 pandas 数据帧。 自定义转换器应该适合现有数据,然后通过添加索引名称为“Cluster”的新列来转换看不见的数据,并在不修改原始数据帧的情况下返回带有附加列的新数据帧。 以下是我想出的代码:
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.cluster import KMeans
class AddClustersFeature(BaseEstimator, TransformerMixin):
def __init__(self, clusters = 10):
self.clusters = clusters
self.model = KMeans(n_clusters = self.clusters)
def fit(self, X):
self.X=X
self.model.fit (self.X)
return self.model
def transform(self, X):
self.X=X
X_=X.copy() # avoiding modification of the original df
X_['Clusters'] = self.model.transform(self.X_).labels_
return X_
cluster_enc_tr_data = AddClustersFeature().fit_transform(enc_tr_data)
cluster_enc_tr_data
不幸的是,代码确实可以正常工作。结果是一个数据框,其中簇号作为列索引,行号和未知的先前值。 任何帮助或提示将不胜感激。
6 月 21 日第 23 次更新 v2: 请在实施 Ben 修改后的 cmets 后查看下面的代码。 现在完美运行。
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.cluster import KMeans
class AddClustersFeature(BaseEstimator, TransformerMixin):
def __init__(self, clusters = 10):
self.clusters = clusters
def fit(self, X):
self.X=X
self.model = KMeans(n_clusters = self.clusters)
self.model.fit (self.X)
return self
def transform(self, X):
self.X=X
X_=X.copy() # avoiding modification of the original df
X_['Clusters'] = self.model.predict(X_)
return X_
cluster_enc_tr_data = AddClustersFeature().fit_transform(enc_tr_data)
【问题讨论】:
标签: python pandas machine-learning scikit-learn k-means