0

有沒有辦法使用sklearn.preprocessing對象來分類分類值?我想最終創建一個預處理對象,我可以將其應用於新數據,並將其轉換爲與舊數據相同的方式。Sklearn:分類的印象?

我正在尋找一種方法來做到這一點,以便我可以使用它this的方式。

+1

您應該添加更多的解釋,連同數據一起你想用它做什麼? –

回答

0

複製和修改this答案,我做了一個imputer的pandas.Series對象

import numpy 
import pandas 

from sklearn.base import TransformerMixin 


class SeriesImputer(TransformerMixin): 

    def __init__(self): 
     """Impute missing values. 

     If the Series is of dtype Object, then impute with the most frequent object. 
     If the Series is not of dtype Object, then impute with the mean. 

     """ 
    def fit(self, X, y=None): 
     if X.dtype == numpy.dtype('O'): self.fill = X.value_counts().index[0] 
     else       : self.fill = X.mean() 
     return self 

    def transform(self, X, y=None): 
     return X.fillna(self.fill) 

要使用它,你會怎麼做:

# Make a series 
s1 = pandas.Series(['k', 'i', 't', 't', 'e', numpy.NaN]) 


a = SeriesImputer() # Initialize the imputer 
a.fit(s1)    # Fit the imputer 
s2 = a.transform(s1) # Get a new series 
1

是的,這是可能的。例如,您可以使用參數strategy = 'most_frequent'sklearn.preprocessing.Imputer

使用fit_transform方法將其應用於舊數據(訓練集),然後在新數據(測試集)上應用transform

+0

我不認爲Imputer使用字符串。 – user1367204

+0

嗯,我認爲它已經是數字(整數)分類。如果分類數據是字符串格式,首先需要將其轉換爲數字,例如,sklearn.LabelEncoder – slonopotam

+0

當我使用LabelEncoder時,我失去了numpy.NaN字段,它們變成了一個數字,然後我無法在下一步中使用Imputer。 – user1367204