写在前面
一、为什么要引入类别变量:对现有的数据进行预处理,再训练模型,使得训练出来的模型效果更好

二、什么是类别变量:类别变量又名分类变量,顾名思义,类别变量就是能表示类别的名词,比如说,男,女;汽车制造业,手工业,农业等。

本文基于kaggle教程介绍三个方法

1、丢弃分类变量

找到数据中的分类变量,drop掉

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.preprocessing import OrdinalEncoder,OneHotEncoder
pd.set_option('display.max_columns',None)
# Function for comparing different approaches
def score_dataset(X_train, X_valid, y_train, y_valid):model = RandomForestRegressor(n_estimators=100, random_state=0)model.fit(X_train, y_train)preds = model.predict(X_valid)return mean_absolute_error(y_valid, preds)# Read the data
data = pd.read_csv('../machineLearning/temp/archive/melb_data.csv')# Separate target from predictors
y = data.Price
X = data.drop(['Price'], axis=1)# Divide data into training and validation subsets
X_train_full, X_valid_full, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2,random_state=0)
# 删除存在空值的列
cols_with_missing = [col for col in X_train_full.columns if X_train_full[col].isnull().any()]
X_train_full.drop(cols_with_missing, axis=1, inplace=True)
X_valid_full.drop(cols_with_missing, axis=1, inplace=True)# "Cardinality" means the number of unique values in a column
# Select categorical columns with relatively low cardinality (convenient but arbitrary)
low_cardinality_cols = [cname for cname in X_train_full.columns if X_train_full[cname].nunique() < 10 andX_train_full[cname].dtype == "object"]# 选择num列
numerical_cols = [cname for cname in X_train_full.columns if X_train_full[cname].dtype in ['int64', 'float64']]
# Keep selected columns only
my_cols = low_cardinality_cols + numerical_cols
X_train = X_train_full[my_cols].copy()
X_valid = X_valid_full[my_cols].copy()#找到object列
s = (X_train.dtypes == 'object')
object_cols = list(s[s].index)print("Categorical variables:")
print(object_cols)#直接将类别变量去掉
drop_X_train = X_train.select_dtypes(exclude=['object'])
drop_X_valid = X_valid.select_dtypes(exclude=['object'])print("MAE from Approach 1 (Drop categorical variables):")
print(score_dataset(drop_X_train, drop_X_valid, y_train, y_valid))

2、Ordinal Encoding

对数据中分类变量的值进行从0到排号

# Make copy to avoid changing original data
label_X_train = X_train.copy()
label_X_valid = X_valid.copy()# Apply ordinal encoder to each column with categorical data
ordinal_encoder = OrdinalEncoder()
#print(label_X_train[object_cols])
label_X_train[object_cols] = ordinal_encoder.fit_transform(X_train[object_cols])
label_X_valid[object_cols] = ordinal_encoder.transform(X_valid[object_cols])
#print(label_X_train[object_cols])print("MAE from Approach 2 (Ordinal Encoding):")
print(score_dataset(label_X_train, label_X_valid, y_train, y_valid))

3、One-Hot Encoding


OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(X_train[object_cols]))
OH_cols_valid = pd.DataFrame(OH_encoder.transform(X_valid[object_cols]))
#print(OH_cols_train.head())# One-hot encoding removed index; put it back
OH_cols_train.index = X_train.index
OH_cols_valid.index = X_valid.index
print(OH_cols_train.shape)
# Remove categorical columns (will replace with one-hot encoding)
num_X_train = X_train.drop(object_cols, axis=1)
num_X_valid = X_valid.drop(object_cols, axis=1)
print(num_X_train.shape)# Add one-hot encoded columns to numerical features
OH_X_train = pd.concat([num_X_train, OH_cols_train], axis=1)
OH_X_valid = pd.concat([num_X_valid, OH_cols_valid], axis=1)
print(OH_X_train.shape)print("MAE from Approach 3 (One-Hot Encoding):")
print(score_dataset(OH_X_train, OH_X_valid, y_train, y_valid))

Categorical variable(类别变量)学习笔记(未完)相关推荐

  1. TS学习笔记 ---未完待续....

    TS学习笔记 1 .ts文件与.tsx文件有什么区别 2.使用TS之前需要配置 3.TS特性 泛型和类型注解有什么区别? 3.什么是泛型参数? 4.函数.类.接口有什么区别? 4.1 一个class不 ...

  2. XSS学习笔记(未完)

    XSS基础学习 1. XSS 1.1 客户端Cookie: 1.2 XSS攻击类型 1.3 工具/平台 1.4 利用方式 1.4.1 非手工方式 1.4.1.1自动化攻击:beef 1.4.2 手工方 ...

  3. 个体软件过程(PSP)学习笔记 (未完)

    个体软件过程 前言 软件工程漫谈 软件工程认识观 标准定义 将系统化的.规范的.可度量的方法应用于软件的开发.运行和维护的过程,即将工程化应用于软件中;以上所述方法的研究 软件开发管理 项目管理是基础 ...

  4. 赖世雄教你学英语语法学习笔记(未完)

    [size=medium]关系代词部分(18-19) 关系代词使用的三个原则 1.关系代词前面必须有先行词,也就是被代替的名词 2.关系代词在所引导的从句中必须当主语或宾语 3.关系代词在从句中不能当 ...

  5. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  6. 《漫画算法》读书心得笔记-未完

    感谢FunTester送的书籍.建议大家买或借来看看,一起学习下.本文主要是记录我看这本书的心得,不一定理解是对的,是我自己悟出来的体会,而不是按书照抄,都是凭自己的理解写出来的,相当于在写一本书了, ...

  7. 哔哩大学计算机学院:初识常量变量学习笔记

    CSDN话题挑战赛第2期 参赛话题:学习笔记 目录 视频教程上整理知识点 遇到的难题 解决方法 知识点实践 视频教程上整理知识点 1. 初识变量常量 生活中的数据 有些数据不能变:血型,性别 有些数据 ...

  8. Ubuntu系统学习笔记(完整版)

    Ubuntu是一个以桌面应用为主的Linux操作系统.一般叫做乌班图 什么叫操作系统? widows,用于个人桌面 macOS,用于个人桌面 Linux,主要用于服务器,商务部署 创建虚拟机安装Ubu ...

  9. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  10. 大数据Spark学习笔记—未更完

    Spark概述 核心模块 Spark编程配置 IDEA配置scala环境 IDEA软件中Scala配置安装教程(Spark计算环境搭建)_jing_zhong的博客-CSDN博客 较全的idea202 ...

最新文章

  1. 安卓学习第36课——PopupWindow
  2. m 文件 dll matlab 中调用_Java与MatLab混编
  3. 假如有人把支付宝存储服务器炸了(附文末福利)
  4. C#打造自己的文件浏览器
  5. STM8S001J3M3还能完这么多花样,开发板尝鲜体验。
  6. python画带状图_13个使用Matplotlib实现数据可视化的Python代码
  7. aspose.words读取html,Aspose.Words for .NET HTML代码直接生成WORD | 学步园
  8. sql重命名数据库_SQL重命名数据库
  9. 怎么阻止acrobat自动更新升级?
  10. 搜索引擎的原理以及倒排索引技术
  11. r语言 svycoxph_R语言之生信⑦Cox比例风险模型(单因素)
  12. 分辨率单位及换算详解
  13. WordPress二次元博客主题模板-Sakurairo v2.5.1.1
  14. uniapp微信小程序引用标准版交易组件
  15. 腾讯云HTTPDNS 将上线微信服务平台!
  16. Python3网络爬虫:腾讯新闻App的广告数据抓取
  17. 我的大学六年——郭天祥
  18. 数字IC常考题(单选、多选、编程)
  19. 今天老夫就把完全背包的底裤给你扒出来瞅瞅!!!
  20. OLED显示技术的发展趋势浅析

热门文章

  1. WCF 4.0一个鲜为人知的改变[兼书名征集]
  2. 十大经典排序算法与算法复杂度
  3. RBM,DBM和DBN之间有什么区别?
  4. 数据--第21课-递归课后练习
  5. 凸优化第九章无约束优化 9.1 无约束优化问题
  6. NATS--NATS Streaming持久化
  7. 服务器内存太小,伤不起![异常与应用程序池引发的连锁命案]
  8. 桥接模式 适配器模式 装饰模式
  9. ie8下a标签中的图片出现边框
  10. BZOJ4435 : [Cerc2015]Juice Junctions