预测v.s.转换为sklearn.cluster.KMeans

时间:2018-01-29 14:52:09

标签: python scikit-learn data-science

我目前正在研究一个数据科学项目,其中我有一个包含三个功能列的数据集:

  • 纬度,经度(浮动)
  • 区域,是具有3个值的分类变量。

我想在纬度和经度列上运行一个聚类算法(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

0 个答案:

没有答案