【数据挖掘】数据变换与离散化讲解与实战(超详细 附源码)

需要源码和PPT请点赞关注收藏后评论区留言私信~~~

在数据预处理过程中,不同的数据适合不同的数据挖掘算法。数据变换是一种将原始数据变换成较好数据格式的方法,以便作为数据处理前特定数据挖掘算法的输入。数据离散化是一种数据变换的形式

一、数据变换的策略

1. 光滑 数据光滑用于去掉数据中的噪声。常用的数据平滑方法有分箱、回归和聚类等方法

2. 属性构造 属性构造是通过由给定的属性构造新的属性并添加到属性集中,以帮助数据挖掘

3. 聚集 聚集是对数据进行汇总或聚集。例如,可以聚集日销售数据,计算月和年销售量。通常,聚集用来为多个抽象层的数据分析构造数据立方体

4. 规范化 把属性数据按比例缩放,使之落入一个特定的小区间,如-1.0~1.0

(1)最小-最大规范化

(2)z分数规范化

 

(3)小数定标

 

5. 离散化

1)通过分箱离散化 分箱是一种基于指定的箱个数的自顶向下的分裂技术。例如使用等宽或等频分箱,然后用箱均值或中位数替换箱中的每个值,可以将属性值离散化。分箱对用户指定的箱个数很敏感,也易受离群点的影响

(2)通过直方图离散化 直方图把属性A的值划分为不相交的区间,称作桶或箱。可以使用各种划分规则定义直方图。如在等宽直方图中,将值分成相等分区或区间。直方图分析算法可以递归地用于每个分区,自动地产生多级概念分层,直到达到一个预先设定的概念层数,过程终止

(3)通过聚类、决策树和相关分析离散化

6. 由标称数据产生概念分层

对于标称数据,概念分层可以基于模式定义以及每个属性的不同值个数产生。使用概念分层变换数据使得较高层的知识模式可以被发现。它允许在多个抽象层进行挖掘 

二、Python数据变换与离散化

 1. 数据规范化

数据分析的预处理除了数据清洗、数据合并和标准化之外,还包括数据变换的过程,如类别型数据变换和连续型数据的离散化

数据规范化示例

【数据挖掘】数据变换与离散化讲解与实战(超详细 附源码)_第1张图片

import pandas as pd
import numpy as np
a=[47, 83, 81, 18, 72, 41]
b=[56, 96, 84, 21, 87, 67]
data=np.array([a, b]).T
dfab = pd.DataFrame(data, columns=['A', 'B'])
print('最小-最大规范化:\n',(dfab- dfab.min())/(dfab.max()- dfab.min()))
print('零均值规范化:\n',(dfab- dfab.mean())/dfab.std())

2. 类别型数据的哑变量处理

类别型数据是数据分析中十分常见的特征变量,但是在进行建模时,Python不能像R那样去直接处理非数值型的变量,因此往往需要对这些类别变量进行一系列转换,如哑变量

哑变量(Dummy Variables)用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1

Python中利用pandas库中的get_dummies函数对类别型特征进行哑变量处理

数据的哑变量处理

【数据挖掘】数据变换与离散化讲解与实战(超详细 附源码)_第2张图片

df = pd.DataFrame([  
            ['green', 'M', 10.1, 'class1'],   
            ['red', 'L', 13.5, 'class2'],   
            ['blue', 'XL', 14.3, 'class1']])  
df.columns = ['color', 'size', 'prize','class label']  
print(df)
pd.get_dummies(df)  

 3.连续型变量的离散化

数据分析和统计的预处理阶段,经常会碰到年龄、消费等连续型数值,而很多模型算法尤其是分类算法都要求数据是离散的,因此要将数值进行离散化分段统计,提高数据区分度

常用的离散化方法主要有等宽法、等频法和聚类分析法

(1)等宽法

将数据的值域划分成具有相同宽度的区间,区间个数由数据本身的特点决定或者用户指定

Pandas提供了cut函数,可以进行连续型数据的等宽离散化。cut函数的基础语法格式为:

pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3)

(2)等频法

cut函数虽然不能够直接实现等频离散化,但可以通过定义将相同数量的记录放进每个区间

cut方法应用

【数据挖掘】数据变换与离散化讲解与实战(超详细 附源码)_第3张图片

np.random.seed(666)
score_list = np.random.randint(25, 100, size = 10)
print('原始数据:\n',score_list)
bins = [0, 59, 70, 80, 100]
score_cut = pd.cut(score_list, bins)
print(pd.value_counts(score_cut)) 
# 统计每个区间人数

等频法离散化连续型数据

def SameRateCut(data,k):
    k = 2
    w = data.quantile(np.arange(0,1+1.0/k,1.0/k))
    data = pd.cut(data,w)
    return data
result = SameRateCut(pd.Series(score_list),3)
result.value_counts()

 (3)聚类分析法

一维聚类的方法包括两步,首先将连续型数据用聚类算法(如K-Means算法等)进行聚类,然后处理聚类得到的簇,为合并到一个簇的连续型数据做同一标记。聚类分析的离散化需要用户指定簇的个数,用来决定产生的区间数

创作不易 觉得有帮助请点赞关注收藏~~~

你可能感兴趣的:(数据挖掘,数据挖掘,人工智能,python,数据分析)