分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

机器学习入门-数据预处理-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) ?4.pd.get_dummies(直接对特征进行one-hot编码)

发布时间:2023-09-06 02:31责任编辑:苏小强关键词:暂无标签

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 npimport pandas as pdvg_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 LabelEncoderGen_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_labelsprint(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对离散值进行编码,使用的是OneHotEncoderfrom sklearn.preprocessing import OneHotEncoder, LabelEncoderOne_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_dummiespoke_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())

机器学习入门-数据预处理-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) ?4.pd.get_dummies(直接对特征进行one-hot编码)

原文地址:https://www.cnblogs.com/my-love-is-python/p/10320337.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved