机器学习入门-数值特征-数字映射和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())
机器学习入门-数值特征-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)的更多相关文章
- 机器学习入门-数值特征-数据四分位特征 1.quantile(用于求给定分数位的数值) 2.plt.axvline(用于画出竖线) 3.pd.pcut(对特征进行分位数切分,生成新的特征)
函数说明: 1. .quantile(cut_list) 对DataFrame类型直接使用,用于求出给定列表中分数的数值,这里用来求出4分位出的数值 2. plt.axvline() # 用于画 ...
- 机器学习入门-数值特征-进行多项式变化(将特征投影到高维度上) 1.PolynomialFeatures(将数据变化为多项式特征)
函数说明: 1. PolynomialFeatures(degree=2, interaction_only=False, include_bias=False) 参数说明:degree=2,表示多项 ...
- 机器学习入门-数值特征-对数据进行log变化
对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布 因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布 进行log变化,就是对数据使用n ...
- 机器学习入门-数值特征-连续数据离散化(进行分段标记处理) 1.hist(Dataframe格式直接画直方图)
函数说明: 1. .hist 对于Dataframe格式的数据,我们可以使用.hist直接画出直方图 对于一些像年龄和工资一样的连续数据,我们可以对其进行分段标记处理,使得这些连续的数据变成离散化 就 ...
- 机器学习入门-数值特征-进行二值化变化 1.Binarizer(进行数据的二值化操作)
函数说明: 1. Binarizer(threshold=0.9) 将数据进行二值化,threshold表示大于0.9的数据为1,小于0.9的数据为0 对于一些数值型的特征:存在0还有其他的一些数 二 ...
- 机器学习入门-随机森林温度预测的案例 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) ...
- 机器学习入门 - Google机器学习速成课程 - 笔记汇总
机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...
- 机器学习入门-随机森林温度预测-增加样本数据 1.sns.pairplot(画出两个关系的散点图) 2.MAE(平均绝对误差) 3.MAPE(准确率指标)
在上一个博客中,我们构建了随机森林温度预测的基础模型,并且研究了特征重要性. 在这个博客中,我们将从两方面来研究数据对预测结果的影响 第一方面:特征不变,只增加样本的数据 第二方面:增加特征数,增加样 ...
- Pythoncookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法 本文实例讲述了Python在字典中将键映射到多个值上的方法.分享给大家供大家参考,具体如下: 问题:一个能将键(key ...
随机推荐
- elastic search 日期为string类型导致视图无法展示时间的解决办法
尝试将结构化的json数据发送到es(elastic search)上,然后创建视图,这样就能以小时维度查看数据,直接使用post发送到es后,创建索引,结果提示 没有date类型的字段(field) ...
- 内核启动卡在 Starting kernel ...
一.有时log是这样的 Card did not respond to voltage select! bytes read ms (39.8 MiB/s) bytes read ms (13.4 M ...
- oracle 、sql server 、mysql 复制表数据
我们知道在oracle 中复制表数据的方式是使用 create table table_name as select * from table_name 而在sql server 中是不能这么使用的 ...
- [C++ Primer] : 第16章: 模板与泛型编程
面向对象编程(OOP)和泛型编程都能处理在编写程序时不知道类型的情况, 不同之处在于: OOP能处理类型在程序运行之前都未知的情况, 而在泛型编程中, 在编译时就能获知类型了. 函数模板 模板是C++ ...
- jquery select radio
Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为S ...
- <dedecms>织梦内页调用会员信息
1.织梦CMS v5.7调用文章所属会员信息标签 打开官方默认模板article_artcile.htm,我们可以提取出如下代码: {dede:memberinfos} 会员头像:<a h ...
- 胡乱摸的NOIP2017游记和总结
来自YZK的总结 本篇总结主要分成两部分:NOI Professional游记和平日的刷题训练. 今年的NOI Professional TG的难度在洛谷上标记为:二黄一绿三紫.恭喜NOIP今年全面脱 ...
- SpringCloud之最大的坑
就一句话,controller里面的API方法千万不要夹@Bean,因为加了这个就变成预编译的了!!!!不能断点不能log!!!!!!当然,如果想项目启动就执行的话,那就加上这个.
- bzoj1047 理想的正方形
Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...
- Bootstrap-CSS:概况
ylbtech-Bootstrap-CSS:概况 1.返回顶部 1. Bootstrap CSS 概览 在这一章中,我们将讲解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好 ...