机器学习基础知识——离散化

本文探讨了数据离散化在数据预处理中的关键作用,强调了它如何通过简化数据、提高建模速度和精度、增强模型稳定性和鲁棒性。介绍了离散化的必要性,以及等频、等宽、聚类分析、基于卡方和信息熵的离散化方法,以及针对连续变量的有监督和无监督离散化策略。
摘要由CSDN通过智能技术生成

百度词条把数据离散化定义为把无限空间中有限的个体映射到有限的空间中去,以提高算法的时空效率。换句话说,在不改变相对大小的情况下,对数据进行相应的缩小。离散化仅适用于只关注元素之间的大小关系而不关注元素数值本身的情况。离散化可以降低特征中的噪声节点,提升特征的表达能力。

必要性:

1.数据离散化对数据预处理影响重大,研究表明离散化数值在提高建模速度和提高模型精度上有显著作用,比如,对于决策树来说,离散化数据可以加快数据建模的速度,拥有更高的,模型精度;离散化数值后,简化了逻辑回归,降低了数据过拟合的风险。

2.数据离散化实际是一个数据简化机制。因为通过数值离散化过程,一个完整的数据集变成一个个按照某种规则分类的子集,增强了模型的稳定性。

3.离散化后的特征对异常数据具有很强的鲁棒性(稳定性)。能减少噪声节点对数据的影响。

4.某些算法只能处理离散化数据,即使可以处理连续型数据,其综合学习效率和模型精度也要逊色于离散化数据

***:任何离散化过程都会带来一定的信息丢失,因此寻求最小化信息丢失是使用数值离散化技术人员的核心目标之一。

方法:

1.等频

2.等宽

3.聚类分析

4.基于卡方的方法

5.基于信息熵的方法变量类型:

变量类型:

针对不同的数据类型,有不同的离散化方法

1.连续变量的离散化

(一).有监督(参考标签列)

        1.1R(不经常用)

          定义:把连续的区间分成小区间,任何根据类标签对区间内变量调整。每个区间至少包含六                       个变量(最后一个区间除外)。

          方法:1R算法

        2.基于信息熵的方法

        定义:自顶向下的方法,运用决策树的理念进行变量离散化。 因涉及到具体算法决策树的相                     关内容(后续详细介绍),因此在此仅简要说明。

        3.基于卡方的方法

        定义:自底向上的方法,运用卡方检验的策略,自底向上合并数值进行有监督离散化,核心                       操作是Merge。 将数据集里的数值当做单独区间,递归找出可合并的最佳临近区间。                     判断可合并区间用到卡方统计量来检测两个区间的相关性,对符合所设定阀值的区间                       进行合并

***:有监督的离散化均不需要设置分箱的个数,他们会自己根据标签列进行分箱

有监督的离散化说起来较为复杂,因此我会在后面的模型进行举例说明,想了解原理的这里推荐大家一些大佬的文章

特征离散化系列(一)方法综述_ent-mdlp-CSDN博客

https://www.slideshare.net/hadooring/data-discretization

可能需要一点魔法才能访问

(二).无监督(不参考标签列)

        1.聚类划分:

          定义:使用聚类算法将数据分为K类,需要制定K值大小。 把同属一类的数值标记为相同标                       签。

          方法:k-means算法

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans

iris = load_iris()
X_df = pd.DataFrame(iris['data'],columns=iris['feature_names'])

print(X_df)

kmeans = KMeans(n_clusters=3)  # n_clusters 表示分类的个数
kmeans.fit(X_df.iloc[:,0].values.reshape(-1,1))   # 不用fit_transfrom 它返回的值是各个点与分类中心的距离,而fit返回的是分类的结果
# 由于iloc函数返回的是一个序列,所以我们不能直接将其转换为二维数组,我们将其值取出来进行转换
X_df.iloc[:,0] = kmeans.labels_      # 最后将分类的标签写回原数据

print(X_df)

运行结果:

我们可以看出,分类后的数据被分为0,1,2 

        2.分箱(等宽/等频)

          定义:把连续变量按照相同的区间间隔划分为几等份。换句话说就是根据连续变量的最大值                       和最小值,划分n份,每份数值间隔相同。

          方法:等宽:pd.cut          等频:pd.qcut

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans

iris = load_iris()
X_df = pd.DataFrame(iris['data'],columns=iris['feature_names'])

# 等宽
data = pd.cut(X_df.iloc[:,0],bins=5)    # bins 设置分箱的个数
# 等频
data = pd.qcut(X_df.iloc[:,0],q = 5)    # q  设置分箱的个数
print(data)

          结果:等宽:

等频结果就不做展示了,等频是按照从小到大排序,每个间隔包含相同的个数,这样就可能导致相同的数值被划分到两个不同的区间,例如:一组连续数值10个(11,12,12,12,13,14,15,16,17,18),划分为5份。划分后结果为[11,12],[12,12],[13,14],[15,16],[17,18] 

        

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值