Как мне убедиться, что все данные будут одинаковыми при преобразовании данных для обучения и прогнозирования с помощью моделей sklearn? - PullRequest
0 голосов
/ 18 октября 2019

Я хочу убедиться, что данные во входящем наборе данных совпадают с данными, на которых обучалась модель. Например ...

df = pd.Dataframe({'prediction':['red', 'green', 'blue'], 'features': ['one','two','three']})

После того, как это преобразовано, оно должно выглядеть следующим образом:

>>>df
prediction  features
1           1
2           2
3           3

Теперь я хочу убедиться, что новый набор данных ...

new_df = pd.Dataframe({'prediction':['yellow', 'red', 'green'], 'features': ['three','two','one']})

Будет преобразован в тот же, что и исходный DataFrame df. Обратите внимание, что я добавил кое-что в new_df, потому что модель также должна справиться с этим. Новый фрейм данных должен выглядеть примерно так ...

>>>new_df
prediction  features
4           3
1           2
2           1

Как мне это сделать и как я тоже могу преобразовать данные обратно?

1 Ответ

1 голос
/ 18 октября 2019

Вы можете использовать LabelEncoder здесь.

import pandas as pd
df = pd.DataFrame({'prediction':['red', 'green', 'blue'], 'features': ['one','two','three']})
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(df["prediction"])
oldData = df['prediction'].tolist()
df["prediction"] = le.transform(df["prediction"])
new_df = pd.DataFrame({'prediction':['yellow', 'red', 'green'], 'features': ['three','two','one']})
newData = new_df['prediction'].tolist()
newData = list(set(newData)- set(oldData))
le.classes_ = np.append(le.classes_, newData )
new_df["prediction"] = le.transform(new_df["prediction"])

Обновить

import pandas as pd
df = pd.DataFrame({'prediction':['red', 'green', 'blue'], 'features': ['one','two','three']})
from sklearn import preprocessing
encoderDict = {}
oldData = {}
for col in df.columns:
    le = preprocessing.LabelEncoder()
    le.fit(df[col])
    encoderDict[col] = le
    oldData[col] = df[col].tolist()
    df[col] = le.transform(df[col])
new_df = pd.DataFrame({'prediction':['yellow', 'red', 'green'], 'features': ['three','two','one']})
newData = {}
for col in new_df.columns:
    newData[col] = new_df[col].tolist()
    newData[col] = list(set(newData[col])- set(oldData[col]))
    encoderDict[col].classes_ = np.append(encoderDict[col].classes_, newData[col] )
    new_df[col] = encoderDict[col].transform(new_df[col])

Для обратного преобразования данных все, что вам нужно сделать, это следующее.

ndf = df.append(new_df).reset_index(drop=True)
for col in ndf:
    print(encoderDict[col].inverse_transform(ndf[col]))
...