前面我们学习了分类决策树,下面我们以周志华的机器学习书上的西瓜数据作为训练集练习以下,数据集如下。

X = [['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑'],['乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],['青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑'],['浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑'],['青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘'],['乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘'],['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑'],['乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑'],['青绿', '硬挺', '清脆', '清晰', '平坦', '软粘'],['浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑'],['浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘'],['青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑'],['浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑'],['乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘'],['浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑'],['青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑']
]
Y = ['是', '是', '是', '是', '是', '是', '是', '是', '否', '否', '否', '否', '否', '否', '否', '否', '否']

如果你直接将这个数据集传入决策树,则会运行出错,错误信息如下。

ValueError: could not convert string to float: '青绿'

为什么会出现这样的错误呢?这是因为决策树在训练中,会把数据转换为np.float32类型,但你的输入数据是string类型,还是中文,无法进行转换,所以出错。在sklearn中提供了独热编码(One-Hot Encoding)来解决这样的问题。

下面我们来了解下什么是独热编码,它又是如何将离散的数据进行编码的。独热编码就是用M个寄存器来标识M个状态,每一个状态对应指定的寄存器。下面举个例子。

比如人的性别属性可以取值为{"male","female","others"},即人的性别有三种状态,我们可以使用三个寄存器来唯一标识。比如"male"可以编码100,"female"编码为010,"others"编码为001。再比如人的肤色属性可以取值为{"yellow","white","black"},则"yellow"编码为100,"white"编码为010,"black"编码为001。

对于有多个属性怎么编码呢?就是将每个属性的单独编码拼接起来就可以。比如有个人的性别为"male",肤色为"black",则他的编码为100001。

了解了独热编码是怎么编码的,我们就想直接把西瓜数据集进行独热编码,但很抱歉还是会出错。为什么呢,查看One-Hot Encoding的使用方法后发现输入数据只能是int类型。什么意思呢,下面举个例子。

还是以人的性别属性可以取值为{"male","female","others"}为例,我们不能直接传入One-Hot Encoding,而是先将{"male","female","others"}标识为{0,1,2}再传入One-Hot Encoding中,这样就得到了独热编码。这里可能有的人就问了:“为什么不直接把{0,1,2}作为编码直接传入决策树,这是因为如果直接传入,决策树是把它当作连续值处理的,也就认为属性的值是有序的,但我们知道性别是离散属性,属性值是无序的。

from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
print(enc.fit_transform([[0],[1],[2]]).toarray())
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]

所以我们第一步要做的就是先将属性用数字标识,好在sklearn提供了LabelBinarizer类。比如西瓜数据集的第一列属性会被标识成[2 0 0 2 1 2 0 0 0 2 1 1 2 1 0 1 2]。将西瓜数据集的所有属性利用LabelBinarizer类标识的代码如下。

Xdf = pd.DataFrame(X)
le = preprocessing.LabelEncoder()
for col in Xdf.columns:f = le.fit_transform(Xdf[col])Xdf[col] = f
print(Xdf)
    0  1  2  3  4  5
0   2  2  1  1  0  0
1   0  2  0  1  0  0
2   0  2  1  1  0  0
3   2  2  0  1  0  0
4   1  2  1  1  0  0
5   2  1  1  1  2  1
6   0  1  1  2  2  1
7   0  1  1  1  2  0
8   0  1  0  2  2  0
9   2  0  2  1  1  1
10  1  0  2  0  1  0
11  1  2  1  0  1  1
12  2  1  1  2  0  0
13  1  1  0  2  0  0
14  0  1  1  1  2  1
15  1  2  1  0  1  0
16  2  2  0  2  2  0

再将标识好的数据集One-Hot Encoding进行独热编码。代码如下。

enc = preprocessing.OneHotEncoder()
Xdf_enc = enc.fit_transform(Xdf).toarray()
print(Xdf_enc)
[[0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0.][1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0.][1. 0. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0.][0. 0. 1. 0. 0. 1. 1. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0.][0. 1. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0.][0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 1.][1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 1.][1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 1. 0.][1. 0. 0. 0. 1. 0. 1. 0. 0. 0. 0. 1. 0. 0. 1. 1. 0.][0. 0. 1. 1. 0. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 1.][0. 1. 0. 1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 1. 0. 1. 0.][0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0. 1.][0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 1. 1. 0. 0. 1. 0.][0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 0. 1. 1. 0. 0. 1. 0.][1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 1.][0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 0. 1. 0. 1. 0.][0. 0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 1. 0. 0. 1. 1. 0.]]

最后就可以传入决策树进行训练了,代码如下。

clf = tree.DecisionTreeClassifier()
clf.fit(Xdf_enc,Y)

这样决策树就构建了,如果你要对一个数据样本进行预测,你就要先对这个样本进行LabelBinarizer和独热编码了,再传入决策树进行预测。我们在原始数据集进行预测。

print(clf.predict(Xdf_enc))
['是' '是' '是' '是' '是' '是' '是' '是' '否' '否' '否' '否' '否' '否' '否' '否' '否']

到此,我们就知道了离散属性如何处理了。

机器学习之离散值处理相关推荐

  1. 机器学习处理数据为什么把连续性特征离散化、离散值、无监督、有监督用处

    一.离散化原因 数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间.分段的原则有基于等距离.等频率或优化的方法.数据离散化的原因主要有以下几点: 1.算法需要 比如决策树.朴素贝叶斯等算法 ...

  2. 机器学习常用术语词汇表

    EOF是一个计算机术语,为End Of File的缩写 ,在操作系统中表示资料源无更多的资料可读取. 刚接触机器学习框架 TensorFlow 的新手们,这篇由 Google 官方出品的常用术语词汇表 ...

  3. 自动机器学习(AutoML)

    自动机器学习(AutoML) 不再需要苦恼于学习各种机器学习的算法 目录: 一.为什么需要自动机器学习 二.超参数优化 Hyper-parameter Optimization 三.元学习 Meta ...

  4. 【CV】吴恩达机器学习课程笔记 | 第1-15章

    目录 1 介绍 1-3 监督学习 1-4 无监督学习 2 单变量线性回归 2-2 代价函数 2-5 Batch 梯度下降算法 4 多变量线性回归 4-1 多特征 4-2 多元梯度下降法 4-3 多元梯 ...

  5. 机器学习概念 — 监督学习、无监督学习、半监督学习、强化学习、欠拟合、过拟合、后向传播、损失和优化函数、计算图、正向传播、反向传播

    1. 监督学习和无监督学习 监督学习 ( Supervised Learning ) 和无监督学习 ( Unsupervised Learning ) 是在机器学习中经常被提及的两个重要的学习方法. ...

  6. 机器学习-线性回归LinearRegression

    概述 今天要说一下机器学习中大多数书籍第一个讲的(有的可能是KNN)模型-线性回归.说起线性回归,首先要介绍一下机器学习中的两个常见的问题:回归任务和分类任务.那什么是回归任务和分类任务呢?简单的来说 ...

  7. flask部署机器学习_如何开发端到端机器学习项目并使用Flask将其部署到Heroku

    flask部署机器学习 There's one question I always get asked regarding Data Science: 关于数据科学,我经常被问到一个问题: What ...

  8. 赠书 | 图解机器学习算法,看这文就够了!

    机器学习指的是计算机根据给定的问题.课题或环境进行学习,并利用学习结果解决问题或课题等的一整套机制(图 1-1). 图 1-1 分类的示意图 与机器学习共同成为热门话题的还有人工智能和深度学习.这里梳 ...

  9. 基于Python的自动特征工程——教你如何自动创建机器学习特征

    作者 | William Koehrsen 译者 | 王天宇 编辑 | Jane 出品 | AI科技大本营 [导读]如今机器学习正在从人工设计模型更多地转移到自动优化工作流中,如 H20.TPOT 和 ...

最新文章

  1. SpringBoot (三) :SpringBoot使用Freemarker模板引擎渲染web视图
  2. 深入JVM锁机制2-Lock
  3. 人工智能2021截稿日期_APISE2021会议预览【人工智能amp;控制amp;模式识别】
  4. CCAI 2017 中国人工智能大会 6.4 折抢票倒计时!
  5. Centos 6.4 搭建LANMP一键安装版
  6. boost::fast_pool_allocator
  7. MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)
  8. DOM编程以及domReady加载的几种方式
  9. 闭包(实例化)【面试】
  10. ubuntu 下安装配置LAMP
  11. Day11名称空间,作用域,闭包函数
  12. Python使用scrapy框架编写自动爬虫爬取京东商品信息并写入数据库
  13. 青春互撩——详解基于Socket通信的聊天软件开发(附项目源码)
  14. E php短信平台接口
  15. OSChina 周二乱弹 ——人在职场飘,哪能不跳槽
  16. 关于符号Symbol第一篇
  17. [Windows系统]visio安装时提示和即点即用版本不能并行怎么办
  18. Android程序的目录结构分析——manifests目录、Java目录、res目录
  19. python画三维坐标图像_用python检索xyz坐标并绘制三维图形
  20. 视频直播网站源码,uniapp页面跳转的几种方法和区别

热门文章

  1. ChatGPT 目前到底能帮助我们程序员做什么?
  2. ArcGIS教程:删除重复的要素之---线
  3. Apache 配置与应用
  4. 【MP4 QuickTime隐写】tcsteg、jpegEOFx、detect anomalies in video files
  5. 电驴提示“该内容尚未提供权利证明,无法提供下载”之解决办法详解
  6. GO and KEGG富集分析
  7. 《HFSS电磁仿真设计从入门到精通》一2.1 设计概述
  8. 支付清结算之基本概念和入门
  9. AHP层次分析法理解以及项目实战
  10. 看门狗2显示服务器不可用,看门狗2显示目前无法使用这个应用程序 | 手游网游页游攻略大全...