- 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。
- 连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。
离散化有很多种方法,这使用一种最简单的方式去操作,例如:
- 原始人的身高数据:165,174,160,180,159,163,192,184
- 假设按照身高分几个区间段:150~165, 165~180,180~195
1、使用pd.qcut:对数据进行分组
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9]) # qcut()方法第一个参数是数据, 第二个参数定义区间的分割方法, 比如这里把数字分成两半, 那就是[0, 0.5, 1] # 如果要分成4份, 就是[0, 0.25, 0.5, 0.75, 1], 也可以不是均分, 比如[0, 0.1, 0.2, 0.3, 1], 这就就会按照1:1:1: 7 # 如果是小的数,值就变成'small number',大的数,值就变成'large number': qcut = pd.qcut(data,[0,0.5,1],labels=['small number','large number']) # 自行分组,分成10组 qcut = pd.qcut(data,10) print(qcut) # 统计分组次数 print(qcut.value_counts())
2、使用pd.cut(data, bins)自定义区间分组:
- pd.cut(data, bins)
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9]) # 自己指定分组区间 bins = [1, 2, 4,7,10] counts = pd.cut(data, bins) print(counts) c = counts.value_counts() print(c)
3、get_dummies实现哑变量矩阵
哑变量:也叫虚拟变量,引入哑变量的目的是,将不能狗定量处理的变量量化,如职业、性别对收入的影响,战争、自然灾害对GDP的影响,这种“量化”通常是通过引入“哑变量”来完成的。根据这些因素的属性类型,构造只取“0”或“1”的人工变量
1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}
df = pd.DataFrame([ ['green', 'M', 10.1, 'class1'], ['red', 'L', 13.5, 'class2'], ['blue', 'XL', 15.3, 'class1']]) df.columns = ['color', 'size', 'prize', 'class label'] size_mapping = { 'XL': 3, 'L': 2, 'M': 1} df['size'] = df['size'].map(size_mapping) # class_mapping = {label: idx for idx, label in enumerate(set(df['class label']))} df['class label'] = df['class label'].map(class_mapping) print(df) print(pd.get_dummies(df))