[sklearn]One-Hot转换

2021-03-08  本文已影响0人  Silver_42ac

在机器学习中,对于分类变量要进行

from sklearn.preprocessing import OneHotEncoder

def df2onehot_narray(input_matrix):
    in_df = input_matrix
    var_2 = {}
    var_1 = {}
    var_0 = {}
    #Label_values= [0,1,2] #t_df.columns
    
    #columns_len = len(list(t_df.columns))#list(t_df.columns)  #columns 列的名字;可以换 range(columns_len)
    for col in list(t_df.columns):
        var_0[col] = 0
        var_1[col] = 1
        var_2[col] = 2
    var_0_df = pd.DataFrame(var_0,index=["var_0"])
    var_1_df = pd.DataFrame(var_1,index=["var_1"])
    var_2_df = pd.DataFrame(var_2,index=["var_2"])
    in_df = in_df .append(var_0_df)
    in_df = in_df .append(var_1_df)
    in_df = in_df .append(var_2_df)

    values = np.unique(in_df .values)#values#输出为多维的 (numpy array ,narray) #从df中获得所有唯一的标签(值)
    # values 内部可以重复,但是必须是1维度的(1D);np.unique()可以做到转为1维度
    # integer encode
    label_encoder = LabelEncoder() #导入类对象(类似导入针对特定数据的流程,包含多步骤函数和获得属性变量,就是常说的类class 写法)
    integer_encoded = label_encoder.fit_transform(values)
    onehot_encoder = OneHotEncoder(sparse=False) 
    #初始化OneHotEncoder实例时,默认sparse参数为True,编码后返回的是一个稀疏矩阵的对象,如果要使用一般要调用toarray()方法转化成array对象。若将sparse参数设置为False,则直接生成array对象,可直接使用
    
    # binary encode
    integer_encoded = integer_encoded.reshape(len(values),1)
    onehot_np_array = onehot_encoder.fit_transform(in_df)
    return onehot_np_array[0:-3]  #返回值去掉最后3个自己添加的内容,这三个样品 特征,是为了保证所有样品特征都有这三个标签,方便转换;以及和训练集合的对应

参考:
l利用sklearn进行One-Hot转换
sklearn中OneHotEncoder使用注意事项——sparse参数
Pandas:DataFrame数据的更改、插入新增的列和行
np.unique( )的用法

上一篇 下一篇

猜你喜欢

热点阅读