我用的是python,我有如下结构的数据,其中混合了类别和数字
subject_id hour_measure urinecolor blood pressure
3 1.00 red
1.15 high
4 2.00 yellow low我想使用热板法来估算它,但是我发现我应该把它编码成数字,然后再进行估算。
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
df= pd.read_csv('path')
enc.fit(df)
enc.transform(df)当我尝试进行编码时,它会要求我先填充缺失值,那么在编码时如何处理缺失值呢?当我对分类数据进行编码时,补偿将为缺失的值生成值,那么如何在补偿后将其恢复为原始数据?有人能帮我解决这个问题吗?
发布于 2019-12-18 03:33:29
基本上,你需要使用一个scikit-learn管道:
import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
X = np.array(
[['cat1', 'cat1'],
['cat2', np.nan],
[np.nan, 'cat2']],
dtype=object
)
encoder = make_pipeline(
SimpleImputer(strategy="constant", fill_value="missing"),
OneHotEncoder(sparse=False)
)
print(encoder.fit_transform(X))
print(encoder[-1].categories_)[[1. 0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0. 1.]
[0. 0. 1. 0. 1. 0.]]
[array(['cat1', 'cat2', 'missing'], dtype=object), array(['cat1', 'cat2', 'missing'], dtype=object)]在这里,缺少的值由一些np.nan值表示。它们首先被字符串'missing'替换。然后,每个类别将成为一个列。因此,“丢失”的信息将由编码后的列表示。
您可能不想从数据中删除此信息。如果需要,可以删除相应的列。
https://stackoverflow.com/questions/59370700
复制相似问题