zoukankan      html  css  js  c++  java
  • 机器学习入门-数值特征-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)

    1.LabelEncoder() # 用于构建数字编码

    2 .map(dict_map)  根据dict_map字典进行数字编码的映射

    3.OnehotEncoder()  # 进行one-hot编码,输入的参数必须是二维的,因此需要做reshape,同时使用toarray() 转换为列表形式

    3  pd.get_dummies(feature,drop_first=False) 如果填单个特征的话,只对一个特征做one-hot编码映射, drop_first表示去除one-hot编码后的第一列数据

    对于一些离散的文本标签,通常我们可以使用两种编码方式

    比如存在['小明', '小红’, '小花', '小明']

    数字编码:

    对于数字映射的编码方式,存在一个编码映射表:比如{‘小明’: 0, '小红': 1, '小花': 2}

    那么上述的特征可以通过数字编码映射为[0, 1, 2, 1]

    one-hot编码:

    对于one-hot编码而言:通常使用特征作为列名,如果存在该特征,对应的列名为1, 其他列名为0 

    即上述的one-hot编码的结果为

         小明   小红   小花

    0     1          0        0

    1     0         1         0

    2     0         0         1

    3     1         0         0

    代码:

           数字编码:

                        第一种方法: 导入LabelEncoder() 进行编码: 

                        第二种方式: 构建数字映射字典,使用.map完成映射

         one-hot编码:

                        第一种方法:使用OnehotEncoder(), 对某列样本特征进行编码,使用toarray()获得列表的格式,构建字典,变换为DataFrame格式,通过pd.concat([], axis=1) 完成DataFrame格式的拼接

                        第二种方法:导入pd.get_dummies(feature, drop_first=False) 对某一列文本特征进行onehot编码的映射,使用pd.concat完成DataFrame格式的拼接,如果不填参单个特征,将对所有的文本特征都进行onehot编码操作

    import numpy as np
    import pandas as pd
    
    
    vg_df = pd.read_csv('datasets/vgsales.csv', encoding = "ISO-8859-1")
    
    # print(vg_df[['Name', 'Platform', 'Year', 'Genre', 'Publisher']].iloc[1:7])
    
    # 第一种方法数字映射编码方式:
    # 使用LabelEncoder() 进行编码
    from sklearn.preprocessing import LabelEncoder
    
    Gen_encode = LabelEncoder()
    Gen_labels = Gen_encode.fit_transform(vg_df['Genre'])
    Gen_map = {encode: label for label, encode in enumerate(Gen_encode.classes_)}
    print(Gen_map)
    vg_df['Genre_en'] = Gen_labels
    print(vg_df[['Name', 'Platform', 'Year', 'Genre', 'Genre_en']].iloc[1:7])
    
    # 第二种方法:使用map进行直接的数字编码映射
    map_dict = {'Action': 0, 'Adventure': 1, 'Fighting': 2, 'Misc': 3, 'Platform': 4, 'Puzzle': 5, 'Racing': 6, 'Role-Playing': 7, 'Shooter': 8, 'Simulation': 9, 'Sports': 10, 'Strategy': 11}
    vg_df['Genre_en'] = vg_df['Genre'].map(map_dict)
    print(vg_df[['Name', 'Platform', 'Year', 'Genre', 'Genre_en']].iloc[1:7])
    
    # One-hot编码方式
    # 第一种方式
    # 使用onehot对离散值进行编码,使用的是OneHotEncoder
    
    from sklearn.preprocessing import OneHotEncoder, LabelEncoder
    
    One_encode = OneHotEncoder()
    label_encode = LabelEncoder()
    poke_df = pd.read_csv('datasets/Pokemon.csv', encoding='utf-8')
    # 将数据进行打乱
    poke_df = poke_df.sample(frac=1, random_state=1).reset_index(drop=False)
    label_classes = label_encode.fit_transform(poke_df['Generation'])
    # 打印出类别
    print(label_encode.classes_)
    One_val = One_encode.fit_transform(poke_df['Generation'].values.reshape(-1, 1)).toarray()
    One_dict_encode = {label_encode.classes_[j]: One_val[:, j] for j in range(len(label_encode.classes_))}
    One_pd_encode = pd.DataFrame(One_dict_encode)
    print(One_pd_encode)
    # 将两个pd进行组合
    poke_df[One_pd_encode.columns] = One_pd_encode[One_pd_encode.columns]
    
    
    Leg_label = label_encode.fit_transform(poke_df['Legendary'])
    Leg_classes = label_encode.classes_
    
    Leg_one = One_encode.fit_transform(poke_df['Legendary'].values.reshape(-1, 1)).toarray()
    # 作为每一列的类名
    Leg_name = ['Leg_'+str(Leg_class) for Leg_class in Leg_classes]
    Leg_dict = {Leg_name[j]:Leg_one[:, j] for j in range(len(Leg_name))}
    Leg_pd = pd.DataFrame(Leg_dict)
    # 使用pd.concat也可以进行组合
    poke_df = pd.concat([poke_df, Leg_pd], axis=1)
    # poke_df[Leg_pd.columns] = Leg_pd[Leg_pd.columns]
    print(poke_df.head())
    
    # 使用onehot编码的第二种方法:使用pd.get_dummies
    
    poke_df = pd.read_csv('datasets/Pokemon.csv', encoding='utf-8')
    poke_dummy_feature = pd.get_dummies(poke_df['Generation'], drop_first=True)
    poke_df = pd.concat([poke_df, poke_dummy_feature], axis=1)
    print(poke_df.head())
  • 相关阅读:
    【BOM】浏览器对象模型
    【版本管理】自定义git
    【版本管理】多人协作及标签管理
    【版本管理】git分支管理
    【版本管理】git远程管理
    待补的坑
    pip下载如何加速
    2017ICPC南宁M The Maximum Unreachable Node Set (偏序集最长反链)
    Petrozavodsk Winter-2018. AtCoder Contest. Problem I. ADD, DIV, MAX 吉司机线段树
    Codeforces 1221F Game With String 思维题
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/10320337.html
Copyright © 2011-2022 走看看