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())

机器学习入门-数值特征-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)的更多相关文章

  1. 机器学习入门-数值特征-数据四分位特征 1.quantile(用于求给定分数位的数值) 2.plt.axvline(用于画出竖线) 3.pd.pcut(对特征进行分位数切分,生成新的特征)

    函数说明: 1.  .quantile(cut_list) 对DataFrame类型直接使用,用于求出给定列表中分数的数值,这里用来求出4分位出的数值 2.  plt.axvline()  # 用于画 ...

  2. 机器学习入门-数值特征-进行多项式变化(将特征投影到高维度上) 1.PolynomialFeatures(将数据变化为多项式特征)

    函数说明: 1. PolynomialFeatures(degree=2, interaction_only=False, include_bias=False) 参数说明:degree=2,表示多项 ...

  3. 机器学习入门-数值特征-对数据进行log变化

    对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布 因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布 进行log变化,就是对数据使用n ...

  4. 机器学习入门-数值特征-连续数据离散化(进行分段标记处理) 1.hist(Dataframe格式直接画直方图)

    函数说明: 1. .hist 对于Dataframe格式的数据,我们可以使用.hist直接画出直方图 对于一些像年龄和工资一样的连续数据,我们可以对其进行分段标记处理,使得这些连续的数据变成离散化 就 ...

  5. 机器学习入门-数值特征-进行二值化变化 1.Binarizer(进行数据的二值化操作)

    函数说明: 1. Binarizer(threshold=0.9) 将数据进行二值化,threshold表示大于0.9的数据为1,小于0.9的数据为0 对于一些数值型的特征:存在0还有其他的一些数 二 ...

  6. 机器学习入门-随机森林温度预测的案例 1.datetime.datetime.datetime(将字符串转为为日期格式) 2.pd.get_dummies(将文本标签转换为one-hot编码) 3.rf.feature_importances_(研究样本特征的重要性) 4.fig.autofmt_xdate(rotation=60) 对标签进行翻转

    在这个案例中: 1. datetime.datetime.strptime(data, '%Y-%m-%d') # 由字符串格式转换为日期格式 2. pd.get_dummies(features)  ...

  7. 机器学习入门 - Google机器学习速成课程 - 笔记汇总

    机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...

  8. 机器学习入门-随机森林温度预测-增加样本数据 1.sns.pairplot(画出两个关系的散点图) 2.MAE(平均绝对误差) 3.MAPE(准确率指标)

    在上一个博客中,我们构建了随机森林温度预测的基础模型,并且研究了特征重要性. 在这个博客中,我们将从两方面来研究数据对预测结果的影响 第一方面:特征不变,只增加样本的数据 第二方面:增加特征数,增加样 ...

  9. Pythoncookbook(数据结构与算法)在字典中将键映射到多个值上的方法

    Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法 本文实例讲述了Python在字典中将键映射到多个值上的方法.分享给大家供大家参考,具体如下: 问题:一个能将键(key ...

随机推荐

  1. elastic search 日期为string类型导致视图无法展示时间的解决办法

    尝试将结构化的json数据发送到es(elastic search)上,然后创建视图,这样就能以小时维度查看数据,直接使用post发送到es后,创建索引,结果提示 没有date类型的字段(field) ...

  2. 内核启动卡在 Starting kernel ...

    一.有时log是这样的 Card did not respond to voltage select! bytes read ms (39.8 MiB/s) bytes read ms (13.4 M ...

  3. oracle 、sql server 、mysql 复制表数据

    我们知道在oracle 中复制表数据的方式是使用 create table table_name as select * from table_name 而在sql server  中是不能这么使用的 ...

  4. [C++ Primer] : 第16章: 模板与泛型编程

    面向对象编程(OOP)和泛型编程都能处理在编写程序时不知道类型的情况, 不同之处在于: OOP能处理类型在程序运行之前都未知的情况, 而在泛型编程中, 在编译时就能获知类型了. 函数模板 模板是C++ ...

  5. jquery select radio

    Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...});   //为S ...

  6. <dedecms>织梦内页调用会员信息

    1.织梦CMS v5.7调用文章所属会员信息标签 打开官方默认模板article_artcile.htm,我们可以提取出如下代码:  {dede:memberinfos}   会员头像:<a h ...

  7. 胡乱摸的NOIP2017游记和总结

    来自YZK的总结 本篇总结主要分成两部分:NOI Professional游记和平日的刷题训练. 今年的NOI Professional TG的难度在洛谷上标记为:二黄一绿三紫.恭喜NOIP今年全面脱 ...

  8. SpringCloud之最大的坑

    就一句话,controller里面的API方法千万不要夹@Bean,因为加了这个就变成预编译的了!!!!不能断点不能log!!!!!!当然,如果想项目启动就执行的话,那就加上这个.

  9. bzoj1047 理想的正方形

    Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...

  10. Bootstrap-CSS:概况

    ylbtech-Bootstrap-CSS:概况 1.返回顶部 1. Bootstrap CSS 概览 在这一章中,我们将讲解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好 ...