使用Numpy将特征离散化
Posted 算法韭菜.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Numpy将特征离散化相关的知识,希望对你有一定的参考价值。
一、前言:什么是离散化
在通俗意义上:是在不改变数据相对大小的前提下,将数据进行相应缩小
二、目的:
小编先以简单、常见的例子来解释一下😃
例:[520,13,14]-- 离散化后的映射结果为 [3,1,2]
在机器学习中:
针对每一个数字离散化是不常见的。
因此我们希望,在面对庞大的数组中 --
能够针对相应特征(或属性)范围内进行离散化,实现每个值的特征简单化。
例:
在班级内调查每一个同学的成绩是否及格时:可以将60分作为划定及格和不及格的界限。
将60分以下离散化为0,将60分及以上离散化为1。
三、代码部分
1.你可以使用for循环语句
python_score = [64,58,59,75,95,46,49,52,23,76,84,65,27,79,100]
number = 1
for x in python_score:
if x >=60:
print(f"学号number同学成绩及格 -- 1")
else:
print(f"学号number同学成绩不及格 -- 0")
number += 1
>>> 运行结果
学号1同学成绩及格 -- 1
学号2同学成绩不及格 -- 0
学号3同学成绩不及格 -- 0
学号4同学成绩及格 -- 1
学号5同学成绩及格 -- 1
学号6同学成绩不及格 -- 0
学号7同学成绩不及格 -- 0
学号8同学成绩不及格 -- 0
学号9同学成绩不及格 -- 0
学号10同学成绩及格 -- 1
学号11同学成绩及格 -- 1
学号12同学成绩及格 -- 1
学号13同学成绩不及格 -- 0
学号14同学成绩及格 -- 1
学号15同学成绩及格 -- 1
2.使用numpy将特征离散化
import numpy as np
# 创建特征
python_score = np.array([64,58,59,75,95,46,49,52,23,76,84,65,27,79,100])
# 使用numpy中函数digitize将特征离散化
result = np.digitize(python_score,bins=[60])
print(result)
>>> 运行结果
[1 0 0 1 1 0 0 0 0 1 1 1 0 1 1]
参数解释:
python_score | 对象 |
bins | bins参数是一个数组,表示的是边界。 如我上述的值给定为60,那么它将以60的边界作为取离散值标准 <60离散值为0,>=60离散值为1 |
问题来了:如果我还想分类班内成绩80分及以上呢?😯
可以这样修改(主要修改bins参数)
import numpy as np
# 创建特征
python_score = np.array([64,58,59,75,95,46,49,52,23,76,84,65,27,79,100])
# 使用numpy中函数digitize将特征离散化
result = np.digitize(python_score,bins=[60,80])
print(result)
>>> 运行结果
[1 0 0 1 2 0 0 0 0 1 2 1 0 1 2]
注意:bins参数遵守的规则是"左闭右开"👈👈👈(看完下面这个例子有个保姆级可视化表格哦😋)
举一个非特殊化例子
import numpy as np
# 创建特征
python_score = np.array([20,60,80,100])
# 使用numpy中函数digitize将特征离散化
result = np.digitize(python_score,bins=[60,80])
print(result)
>>> 运行结果
[0 1 2 2]
取值范围 | 离散值 |
x < 60 | 0 |
60<= x <80 | 1 |
80 <= x | 2 |
如果想实现“左开右闭”可以使用参数right = True
import numpy as np
# 创建特征
python_score = np.array([20,60,80,100])
# 使用numpy中函数digitize将特征离散化
result = np.digitize(python_score,bins=[60,80],right=True)
print(result)
>>> 运行结果
[0 0 1 2]
取值范围(right = True) | 离散值 |
x <= 60 | 0 |
60< x <= 80 | 1 |
80 < x | 2 |
四、资料拓展
使用scikit-learn的Binarizer创建二值化器
import numpy as np
from sklearn.preprocessing import Binarizer
# 创建特征
python_score = np.array([[20],
[60],
[80],
[100]])
# 创建二值化器
binarizer = Binarizer(60)
# 转换特征
binarizer = binarizer.fit_transform(python_score)
print(binarizer)
>>> 运行结果
[[0]
[0]
[1]
[1]]
五、资料参考
《python机器学习手册 -- 从数据预处理到深度学习》 -- Chris Albon
--------------------------------------感谢大家的观看---------------------------------------------------
以上是关于使用Numpy将特征离散化的主要内容,如果未能解决你的问题,请参考以下文章