连续数据离散化

作者: dalalaa | 来源:发表于2018-08-28 09:02 被阅读12次

在工作中经常会有对连续数据进行分级的工作。我们可以构造一个这样的实例:

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_means分级

如上图所示,K均值分级的效果堪比人工分级。

相关文章

  • 连续数据离散化

    在工作中经常会有对连续数据进行分级的工作。我们可以构造一个这样的实例: 人工分级 Artificial Divis...

  • 数据预处理_数据离散化

    一、数据离散化 1、所谓离散化,就是把无限空间中的有限个体映射到一个有限的空间中。 2、数据离散化大多针对连续数据...

  • 2019-04-08

    一、离散化 简单离散 通过定义一些划分规则,将原来连续的数据划分成不同的类别,从而将数据离散化。 分桶后平滑 先根...

  • 图形学自问自答1——直线光栅化

    如何在屏幕上画线段 光栅化是一个连续数据离散化的过程,而最简单的一个连续数据离散化的过程是如何将一条线段在屏幕中画...

  • 标准化和离散化总结

    离散化总结 等距离散化是根据连续型变量的取值,等频离散化根据连续型变量的总个数。

  • 笔记|数据分析之pandas基础----数据清理

    合并数据集 离散化和面元划分为了方便分析,连续数据常常被离散化或拆分为“面元”,可以看下面的例子: 可以看到上面这...

  • 机器学习要点汇总

    数据预处理 数据清洗 离散化对于在连续性随机变量上计算信息熵,需要将变量离散化。其概率密度函数f(x)的定义为:!...

  • 特征工程

    1、数据分桶(分桶后需要编码) 连续值经常离散化或者分离成“箱子”进行分析, 为什么要做数据分桶呢? 离散后稀疏向...

  • 广告CTR算法简介

    一、CTR预估的数据特点 1.输入中包含类别型和连续型数据。类别型数据需要one-hot,连续型数据可以先离散化再...

  • 离散属性连续化

    本来要写神经网络中前向传播和反向传播的一些东西。准备使用西瓜数据集建立一个超级简单的两层MLP进行分析。但是着手动...

网友评论

    本文标题:连续数据离散化

    本文链接:https://www.haomeiwen.com/subject/fyrtwftx.html