我目前正在研究一个数据科学项目,其中我有一个包含三个功能列的数据集:
我想在纬度和经度列上运行一个聚类算法(KMeans)来做这个,编写这个自定义转换器,从一个pandas Dataframe中提取一个或多个列
from sklearn.base import BaseEstimator, TransformerMixin
import pandas as pd
class SelectColumns(BaseEstimator, TransformerMixin):
def __init__(self, columns):
'''
columns: list or array of columns to extract
'''
self.columns = columns
def transform(self, data_train):
'''
data_train: Pandas dataframe of which we want to extract the columns
'''
return data_train[self.columns]
def fit(self, *_):
return self
然后,我在管道中用KMeans链接它:
from sklearn.cluster import KMeans
from sklearn.pipeline import Pipeline, FeatureUnion
SelectPosition = SelectColumns(columns=['latitude', 'longitude'])
Clustering = Pipeline([('SelectPosition', SelectPosition),
('Clustering', KMeans())])
SelecCategoricalVariable = SelectColumns(columns=['area'])
FinalPipeline = FeatureUnion([('cat',SelecCategoricalVariable),
('cluster',Clustering)])
问题在于,当我运行FinalPipeline.fit_transform()
这是唯一可用的方法时(我不知道为什么fit_predict不可用)应该包含我的变量beongs的簇的列返回一个浮点数,我相信是我的变量到我的集群中心的距离。你们中的任何人都知道为什么会发生这种情况,并且是否有可能迫使KMeans预测器按照我的意愿行事。
谢谢你的帮助
我跑的时候
FinalPipeline.fit_predict(data)
我获得AttributeError: type object 'FeatureUnion' has no attribute 'fit_predict'
以下是我想要适合的数据示例
air latitude longitude
Dining bar 35.641463 139.698171
Dining bar 35.662665 139.668268
Dining bar 35.693840 139.703549
Bar/Cocktail 35.670651 139.771861
Japanese food 35.712607 139.779996
Izakaya 35.743575 139.847180
Izakaya 35.693840 139.703549