机器学习笔记——哑变量处理
在机器学习的特征处理环节,免不了需要用到类别型特征,这类特征进入模型的方式与一般数值型变量有所不同。
通常根据模型的需要,类别型特征需要进行哑变量处理,即按照特征类别进行编码,一般一个类别为k的特征需要编码为一组k-1【避免引起多重共线性】个衍生哑变量,这样就可以表示特征内部所有的类别(将其中基准比较类设为0,当k-1个哑变量都为0时,即为基准类)。
这种哑变量的编码过程在R和Python中的有成熟的方案,而无需我们手动进行编码,使用成熟的编码方案可以提升特征处理的过程。
R语言哑变量处理:
data(iris)
这里仍以iris数据集为例,假设这里的Species变量是要进入模型的其中一个自变量,在建模前需要对齐进行哑变量处理。
方法一——dummy包:
library("dummy")
dumy <- dummy(x=iris)
dummy函数会自动检查你输入数据集对象中的字符型/因子型变量,并全量输出字符型/因子型变量的哑变量编码结果。注意这里编码结果是全量输出,即类别型特征的每一个类别都有一个编码后的特征。为了编码引起多重共线性,我们需要舍弃一个(代表比较基准类的特征),这里Species类别变量一共有三个类别:setosa、versicolor 、virginica,各自都有一个对应编码变量,当原始类别变量取对应类别时,则对应类别哑变量位置取值为1,否则为0.
假设这里我们想要对比的基准类是setosa,只需要保留versicolor、virginica对应的编码后变量。那么当versicolor、virginica都取值为0时,则代表取值为setosa。
最终我们要将保留的哑变量与原始数据集合并,以备之后其他特征处理环节需要。
iris_data <- cbind(iris,dumy[,-1])
此时就可以完美的用Species_versicolor、Species_virginica这两个新生成的哑变量来代表原始分类变量Species了。
方法二——model.matrix函数:
R语言内置包stat中有一个model.matrix函数(无需单独加载既可用),它可以处理分类变量的哑变量处理过程,语法非常简单。
dumy <- model.matrix( ~ Species -1, data = iris)
iris_data <- cbind(iris,dumy[,-1])
这里需要在表达式中设定消除截距【公式中减一,否则输出的哑变量带有截距项】,选择的时候同上,只取比较基准类之外的所有哑变量。
方法三——caret包中的dummyVars函数:
library("caret")
dumy <- dummyVars(~gender,data=customers)
trfs <- predict(dumy,newdata=customers)
iris_data <- iris %>% dummyVars(~Species,.) %>% predict(iris) %>% .[,-1] %>% cbind(iris,.)
选择规则同上。
Python中的哑变量处理工具:
from sklearn.preprocessing import Imputer,LabelEncoder,OneHotEncoder
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
方案一——:sk-learn中的OneHotEncoder方法:
iris = load_iris()
data = iris['data']
iris_data = pd.DataFrame(
data = data,
columns = ['sepal_length','sepal_width','petal_length','petal_width']
)
iris_data["Species"] = iris[ 'target']
iris_data["Species"] = iris_data["Species"].map({0:"setosa",1:"versicolor",2:"virginica"})
labelencoder_X = LabelEncoder()
iris_data["Species_code"] = labelencoder_X.fit_transform(iris_data.iloc[:,4])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(iris_data[["Species_code"]]).toarray()
iris_data = pd.DataFrame(
data = np.hstack((iris_data.values,X[:,0:2])),
columns = iris_data.columns.tolist() + ['Species_versicolor','Species_virginica']
)
方案二——pandas中的get_dummies方法:
可以看到sk-learn中的OneHotEncoder方法必须保证处理的输入值是array,而且只能处理数值型(也就是数字编码之后的类别变量),无法直接处理仔字符型变量。
其实如果能够直接在数据框中处理完这一切就方便很多。
dummy = pd.get_dummies(iris_data.iloc[:,4],prefix = "Species")
iris_data = pd.concat([iris_data,dummy.iloc[:,0:2]], axis= 1)
pandas中的get_dummies方法提供了非常简单高效的哑变量处理方案,只有短短的一句代码即可。
回顾一下今天分享的哑变量处理知识点:
R语言:
● 方案一——:dummy包的dummy函数
● 方法二——:model.matrix函数
● 方法三——:caret包中的dummyVars函数
Python:
● 方法一——:caret包中的dummyVars函数
● 方案二——:pandas中的get_dummies方法
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Confluence 6 启用 HTTP 压缩
在屏幕的右上角单击控制台按钮,然后选择基本配置(General Configuration)链接。 在左侧的面板中选择通用配置(General Configuration)。 启用HTTP 响应压缩(Compress HTTP Responses)。 你可以配置那些内容在传输的时候被压缩,这些配置是在 Confluence 中的。在默认的情况下,下面的 mime 类型将会被压缩: text/htmltext javascript text/css text/plain application/x-javascript application/javascript 如果你希望修改压缩内容的类型,添加一个替代的urlrewrite-gzip-default.xml文件到WEB-INF/classes/com/atlassian/gzipfilter/目录中。这个目录在你的 Confluence 安装目录中。一示例文件如下面链接中的内容:https://confluence.atlassian.com/doc/files/13204/149258252/1/1206408412991/url...
- 下一篇
Java实现定时任务
import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test { public static void main(String[] args) { //timer1(); timer2(); //timer3(); //timer4(); } // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time) public static void timer1() { Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("-------设定要指定任务--------"); } }, 20...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能