连续数据离散化
时间:2022-07-28
本文章向大家介绍连续数据离散化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在工作中经常会有对连续数据进行分级的工作。我们可以构造一个这样的实例:
import numpy as np
from numpy.random import random
import matplotlib.pyplot as plt
%matplotlib inline
random()
0.7965577941827164
x = [a + 0.5*random() for i in range(20) for a in [1,2,2.5,3.5,4,5,6]]
y = [3*random() for j in range(140)]
plt.scatter(x,y,color = 'r')
df = pd.DataFrame({'x':x,'y':y})
待分级数据
人工分级 Artificial Division
对于少量数据来说,最准确的方法当然是人工分级。
scales = [0,1.8,3.2,4.6,5.6,7]
colors = ['r','g','orange','b','pink']
for i in range(len(scales)-1):
plt.scatter(df[(df['x']>=scales[i])&(df['x']<=scales[i+1])]['x'],df[(df['x']>=scales[i])&(df['x']<=scales[i+1])]['y'],color = colors[i])
"plt.plot((1.8,1.8),(0,3.0),color = 'g')nplt.plot((3.2,3.2),(0,3.0),color = 'g')nplt.plot((4.6,4.6),(0,3.0),color = 'g')nplt.plot((5.6,5.6),(0,3.0),color = 'g')"
人工分级
人工分级结果,各类数据分割清晰。
等间隔分级 Equal Interval Division
数据量增大之后,难以通过肉眼观察到分界点,可以采用等间隔分级的方式进行粗暴的分级,但是通常效果不好:
x_max = max(x)
x_min = min(x)
scale = (x_max - x_min)/5
scales = [x_min + n * scale for n in range(1,5)]
scales.insert(0,x_min)
scales.append(x_max)
for i in range(len(scales)-1):
plt.scatter(df[(df['x']>=scales[i])&(df['x']<=scales[i+1])]['x'],df[(df['x']>=scales[i])&(df['x']<=scales[i+1])]['y'],color = colors[i])
等间隔分级
等百分比分级 Equal Percentage Division
等间隔分级常常会导致各个级别中包含的数据量悬殊,为了避免这种情况,可以将绝对间隔改为相对间隔,即采用等百分比间隔分级
x = np.array(x)
scales = [np.percentile(x,20*i) for i in range(1,5)]
scales.insert(0,x_min)
scales.append(x_max)
for i in range(len(scales)-1):
plt.scatter(df[(df['x']>=scales[i])&(df['x']<=scales[i+1])]['x'],df[(df['x']>=scales[i])&(df['x']<=scales[i+1])]['y'],color = colors[i])
等百分比分级
K均值分级 K_Means Division
分级其实是一种聚类问题,自然可以使用聚类算法,我们可以尝试用最简单的聚类算法K均值聚类来进行分级实验:
from sklearn.cluster import KMeans
x = x.reshape(-1,1)
km = KMeans(n_clusters=5)
km.fit(x)
km.labels_
array([3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3,
1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1,
1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1,
2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2,
2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2,
4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4, 0, 3, 1, 1, 2, 2, 4,
0, 3, 1, 1, 2, 2, 4, 0])
import pandas as pd
# x = np.squeeze(x)
df['l'] = km.labels_
colors = ['r','g','orange','b','pink']
for i in range(5):
plt.scatter(df[df['l']==i]['x'],df[df['l']==i]['y'],color = colors[i])
K均值分级
如上图所示,K均值分级的效果堪比人工分级。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP的JSON封装、转变及输出操作示例
- php 策略模式原理与应用深入理解
- 解决在Laravel 中处理OPTIONS请求的问题
- PHP使用观察者模式处理异常信息的方法详解
- php判断目录存在的简单方法
- 怎么优雅的使用 laravel 的 validator验证办法
- Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
- php设计模式之适配器模式原理、用法及注意事项详解
- php基于Redis消息队列实现的消息推送的办法
- tp5框架无刷新分页实现方法分析
- PHP与SQL语句写一句话木马总结
- golang实现php里的serialize()和unserialize()序列和反序列办法详解
- php和html的区别点详细总结
- 详解在YII2框架中使用UEditor编辑器发布文章
- 在Laravel的Model层做数据缓存的实现