机器学习之类别性特征

类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型。Sklearn中提供了几个转换器来处理文本属

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

  类别型特征原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型。Sklearn中提供了几个转换器来处理文本属性,下面将总结LabelEncode(序号编码)、OneHotEncoder(独热编码)和LabelBinarizer(二进制编码)转换器用法

1. 类图结构

  机器学习之类别性特征

2. LabelEncode用法

  官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

示例:

labels = [1,2,2,6]
le = LabelEncoder()
le.fit(labels)
print("classes_:",le.classes_)
print("transform:",le.transform([1, 2, 2, 6]))
print('fit_transform:',le.fit_transform(labels))
print('inverser_transform:',le.inverse_transform([0, 0, 1, 2]))

 输出:

机器学习之类别性特征

  当labels换成文本标签时

labels = ['aa','cc','dd','bb']
le = LabelEncoder()
le.fit(labels)
print("classes_:",le.classes_)
print("transform:",le.transform(['aa','cc','dd','bb']))
print('fit_transform:',le.fit_transform(labels))
print('inverser_transform:',le.inverse_transform([0, 2, 3, 1]))

输出:

机器学习之类别性特征

3. OneHotEncoder用法

OneHotEncoder(n_values=’auto’,  categorical_features=’all’,  dtype=<class ‘numpy.float64’>,  sparse=True,  handle_unknown=’error’)

(1)参数

  n_values = ‘auto’ —>表示每个特征使用几维的数值由数据集自动推断,即几种类别就使用几位来表示,还可以自己设置

- int : number of categorical values per feature.
            Each feature value should be in ``range(n_values)``
- array : ``n_values[i]`` is the number of categorical values in
          ``X[:, i]``. Each feature value should be
          in ``range(n_values[i])``

  categorical_features = ‘all’ —>这个参数指定了对哪些特征进行编码,默认对所有类别都进行编码。也可以自己指定选择哪些特征,通过索引或者 bool 值来指定

  dtype —>表示编码数值格式,默认为浮点型
  spares—>表示编码的格式,默认为True,即为稀疏的格式,指定False则就不用toarray了
  handle_unknow —>指定为‘error’或者’ignore’,即如果碰到未知的类型,是返回一个错误还是忽略它
(2)示例
enc = OneHotEncoder()
enc.fit([[0, 0, 3],
         [1, 1, 0],
         [0, 2, 1],
         [1, 0, 2]])
print(enc.transform([[0,1,3]]).toarray())

  输出:

机器学习之类别性特征

  我们先来看第一个特征,即第一列 [0,1,0,1][0,1,0,1],也就是说它有两个取值 0 或者 1,那么 one-hot 就会使用两位来表示这个特征,[1,0][1,0] 表示 0, [0,1][0,1] 表示 1,在上例输出结果中的前两位 [1,0…][1,0…] 也就是表示该特征为 0

  第二个特征,第二列 [0,1,2,0][0,1,2,0],它有三种值,那么 one-hot 就会使用三位来表示这个特征,[1,0,0][1,0,0] 表示 0, [0,1,0][0,1,0] 表示 1,[0,0,1][0,0,1] 表示 2,在上例输出结果中的第三位到第六位 [...0,1,0,0…][…0,1,0,0…] 也就是表示该特征为 1

  第二个特征,第三列 [3,0,1,2][3,0,1,2],它有四种值,那么 one-hot 就会使用四位来表示这个特征,[1,0,0,0][1,0,0,0] 表示 0, [0,1,0,0][0,1,0,0] 表示 1,[0,0,1,0][0,0,1,0] 表示 2,[0,0,0,1][0,0,0,1] 表示 3,在上例输出结果中的最后四位 [...0,0,0,1][…0,0,0,1] 也就是表示该特征为 3

示例:

array = np.array([1,2,3])
ohe = OneHotEncoder()
labels = ohe.fit_transform(array.reshape(-1,1))
print(labels.toarray())
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

4. LabelBinarizer用法

(1)参数

neg_label : int (default: 0)
    Value with which negative labels must be encoded.

pos_label : int (default: 1)
    Value with which positive labels must be encoded.

sparse_output : boolean (default: False)
    True if the returned array from transform is desired to be in sparse
    CSR format.

(2)示例

  使用LabelBinarizer可以一次性完成LabelEncoder和OneHotEncoder(从文本类别转化为整数类别,再从整数类别转换为独热向量)

lb = preprocessing.LabelBinarizer()
lb.fit_transform(['yes', 'no', 'no', 'yes'])
array([[1],[0],[0],[1]])

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120029.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 大数据处理的基本流程是什么?[通俗易懂]

    写在前面本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和文献引用请见100个问题搞定大数据理论体系解答大数据处理流程主要分为3步:1.数据抽取和集成2.数据分析3.数据解释补充1.数据抽取与集成由于大数据处理的数据来源类型丰富,利用多个数据库来接收来自客户端的数据,包括企业内部数据库、互联网数据和物联网数据,所以需要从数据中提取关系和实体,经过关联和聚合等操作,按照统一定义的格式对数据

  • 转化ico标志

    转化ico标志

  • IntelliJ IDEA 15款 神级超级牛逼插件推荐(自用,真的超级牛逼)

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:荡漾- blog.csdn.net/qq_38380025/article/details/105247548…

  • poi技术实现Excel导入_java json库

    poi技术实现Excel导入_java json库J2EE下Excel转JSON题外话:苦逼毕业狗,在北京做Android还没毕业就10K,回到长沙后连个面试机会都没有。毕业狗总是被瞧不起没有工作经验,好歹我在北京干了大半年呢。一是Android开发太饱和了,门槛低,谁学谁会,二是Android原生开发不行了,在Hybrid混合式和FaceBook主推的ReactNative新开发模式下,越来越多新型创业公司钟情于后两种开发模式。所以我果断抛弃An

  • Fatal error: require(): Failed opening required ‘/www/wwwroot/xxxxxx/public/../thinkphp/start.php

    Fatal error: require(): Failed opening required ‘/www/wwwroot/xxxxxx/public/../thinkphp/start.php项目场景:在CentOS8中安装了宝塔,配置thinkphp5.1版本环境时出了问题,在此之前网站虚拟域名成功配置,能够访问站点创建成功的页面问题描述:在访问tp5默认页面时报错Warning:require():open_basedirrestrictionineffect.File(/home/wwwroot/xxxxxx/thinkphp/start.php)isnotwithintheallowedpath(s):(/home/wwwroot/xxxxxx/pub

  • 2021年Java程序员20个超强练手项目

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章最近一直被问到的一个问题:因为疫情的问题,很多同学说自己没去公司进行实习,能接触到的项目很少,自己不知道怎么去做项目,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号