肥宅钓鱼网
当前位置: 首页 钓鱼百科

python数据离散化的方法(python数据分析之数据离散化)

时间:2023-08-23 作者: 小编 阅读量: 2 栏目名: 钓鱼百科

数据离散化的意义数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。这样有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。即将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。我们随机产生200个人的年龄数据,然后通过等宽离散化,并进行可视化。

数据离散化的意义

数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。

离散化的原因

1.模型限制

比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。

2. 离散化的特征更易理解

比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。

3. 使模型结果更加稳定

比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问,如果按区间离散化,划分区间是非常关键的。

4. 调高计算效率

离散特征的增加和减少都很容易,易于模型的快速迭代。(离散特征的增加和减少,模型也不需要调整,重新训练是必须的,相比贝叶斯推断方法或者树模型方法迭代快)。稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展。

5. 图像处理中的二值化处理

将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。这样有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。

连续数据离散化方法

  • 等宽离散法:等距区间或自定义区间进行离散,有点是灵活,保持原有数据分布
  • 等频离散法:根据数据的频率分布进行排序,然后按照频率进行离散,好处是数据变为均匀分布,但是会更改原有的数据结构
  • 聚类离散法:使用k-means将样本进行离散处理
  • 分位数法:使用四分位、五分位、十分位等进行离散
  • 卡方:通过使用基于卡方的离散方法,找出数据的最佳临近区间并合并,形成较大的区间
  • 二值化:数据跟阈值比较,大于阈值设置为某一固定值(例如1),小于设置为另一值(例如0),然后得到一个只拥有两个值域的二值化数据集。

注意: 卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。

具体讲解

1. 等宽法

将属性的值域从最小值到最大值分成具有相同宽度的n个区间,n由数据特点决定,往往是需要有业务经验的人进行评估。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间。

我们随机产生200个人的年龄数据,然后通过等宽离散化,并进行可视化。这里主要使用的是pandas库中的 cut函数。其定义如下:

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

【案例代码】

可视化部分代码

# 可视化def cluster_plot(d, k): import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(12, 4)) for j in range(0, k): plt.plot(data[d == j], [j for i in d[d == j]], 'o') plt.ylim(-0.5, k - 0.5) return plt

等宽离散化代码

data = np.random.randint(1, 100, 200)k = 5 # 分为5个等宽区间# 等宽离散d1 = pd.cut(data, k, labels=range(k))cluster_plot(d1, k).show()

【效果】

自定义宽度区间

data = np.random.randint(1, 100, 200)k = 6bins = [0, 10, 18, 30, 60, 100] # 自定义区间d2 = pd.cut(data, bins=bins, labels=range(k-1))cluster_plot(d2, k).show()

【效果】

2.等频法

等频法是将相同数量的记录放在每个区间,保证每个区间的数量基本一致。即将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。

我们随机产生200个人的年龄数据,然后通过等宽离散化,并进行可视化。这里主要使用的是pandas库中的 qcut函数。其缺点是边界易出现重复值,如果为了删除重复值可以设置 duplicates=‘drop’,但易出现于分片个数少于指定个数的问题。其函数定义如下:

qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

【案例代码】

data = np.random.randint(1, 100, 200)k = 6d3=pd.qcut(data,k)print(d3.value_counts())

【效果】

根据上面可以看出,每个区间数量大致相同,但是区间位置的意义却不清楚。

【自己实现的等频离散化】

data = np.random.randint(1, 100, 200)data = pd.Series(data)k = 6# 等频率离散化w = [1.0 * i / k for i in range(k1)]w = data.describe(percentiles=w)[4:4k1]w[0] = w[0] * (1 - 1e-10)d4 = pd.cut(data, w, labels=range(k))cluster_plot(d4, k).show()

【效果】

3.基于聚类

一维聚类离散包括两个过程:选取聚类算法(K-Means算法)将连续属性值进行聚类;处理聚类之后的到的k个簇,得到每个簇对应的分类值(类似这个簇的标记),将在同一个簇内的属性值做为统一标记。

【案例代码】

# 聚类离散from sklearn.cluster import KMeansdata = np.random.randint(1, 100, 200)data = pd.Series(data)k=5kmodel = KMeans(n_clusters=k)kmodel.fit(data.reshape((len(data), 1)))c = pd.DataFrame(kmodel.cluster_centers_, columns=list('a')).sort_values(by='a')# rolling_mean表示移动平均,即用当前值和前2个数值取平均数,# 由于通过移动平均,会使得第一个数变为空值,因此需要使用.iloc[1:]过滤掉空值。w = pd.rolling_mean(c, 2).iloc[1:]w = [0]list(w['a'])[data.max()]d5 = pd.cut(data, w, labels=range(k))cluster_plot(d5, k).show()

【效果】

总结

由等宽离散结果我们可以直观的看出等宽离散的缺点,其缺点在于对噪点过于敏感,倾向于不均匀的把属性值分布到各个区间,导致有些区间的数值极多,而有些区间极少,严重损坏离散化之后建立的数据模型。等频离散不会像等宽离散一样,出现某些区间极多或者极少的情况。但是根据等频离散的原理,为了保证每个区间的数据一致,很有可能将原本是相同的两个数值却被分进了不同的区间,这对最终模型的损坏程度一点都不亚于等宽离散。聚类离散当然好,但是前提是依据聚类,聚类的好坏很影响离散化,还是需要经验决定。

欢迎关注Python学习社

    推荐阅读
  • 描写健康美食很文艺的句子(关于健康美食的句子如下)

    跟着小编一起来看一看吧!描写健康美食很文艺的句子做美食就像做人,必须真材实食料,还要去杂选优.精心烹饪才会成为美味佳肴。把体重留给爱的美食,把眼睛留给好风光,把等待留给一直寻觅的真心,把欢喜留给一次次突破障碍的勇敢,把拥抱留给永远不会离开的自己。吃食是一种幸福,品味是一种情趣。人世间,唯有爱与美食不可辜负,爱已经辜负的太多了,美食就不能再辜负了。此时此刻,我只想坐下来好好享受自己做的美食。

  • 空腹喝牛奶可以减肥吗(减肥能空腹喝牛奶吗)

    牛奶减肥法可能很多人都听说过,网上盛传空腹喝牛奶可以减肥,但是有些人常识之后会出现拉肚子的情况,这是怎么一回事呢?牛奶搭配其它牛奶的营养成分包括蛋白质、脂肪、无机盐、维生素。而且,乳酸菌还能够在肠道中帮助分解乳糖及蛋白质,促进消化。低乳糖牛奶可以减少饮奶不适,消除乳糖不耐受。分两三次食入,最好不要一口气食用全天的量。具体摄入量需根据个人身体状况、整体饮食结构、分配比例、总能量和营养搭配来确定。

  • 平平淡淡最真实的说说句子(真实的有关平淡的句子)

    平平淡淡最真实的说说句子在平淡中安稳,在宁静中盛放。其实,幸福恰恰就是这样。我不知道这算不算奢求,反正我也早就习惯了奢求。每个人,有每个人的不同的生活方式。让生活趋于平淡。-所以我不断的在改变自己,希望能够给周围的朋友带来快乐,幸福的感觉。有人无视平淡,觉得平淡是没有波澜的,僵化的生存方式,他便开始角逐于人生的势利场,换着自己不同的人生面具。

  • 一般面试考题一题多少分(9月底会出成绩吗)

    一般面试考题一题多少分参加827联考的小伙伴期盼已久,期待9月底公布成绩,9月底会公布成绩吗?无论9月底或者10月初公布成绩,小编建议大家提前准备面试,成绩公布后,面试即将到来,时间紧,任务重;赶紧行动起来吧!注意,在这个过程中,一定要建立起属于自己的自信和大方,克服心理的恐惧和胆怯,勇敢去做,总会有进步的。

  • 孕妇梦见别人生孩子预示什么(孕妇梦见别人生孩子好不好)

    以下内容大家不妨参考一二希望能帮到您!孕妇梦见别人生女孩,是预示孕妇心理对胎儿的性别有所期待,很想生个女儿。孕妇梦见别人生男孩则多是反梦,别人可能不会怀孕或者怀孕生了个女儿。孕妇梦见别人生双胞,则是预示孕妇自己内心对双胞胎宝宝有渴望。孕妇梦见别人生龙凤胎,预示自己的宝宝会健健康康的成长;同时也是暗示孕妇自己也想生一对龙凤胎,且会经常猜想肚子里宝宝的性别,想象宝宝长大后的样子。

  • 目前翻译软件哪个好(5大翻译软件测评)

    开头先声明一下,排名先后只是个人意见,仅供参考。不过需要邀请5个好友关注公众号,凑齐足够多的积分后,才能使用「谷歌生物医学专用翻译」。DeepL尽管号称是最好的翻译软件,由于中文翻译功能上线不到3个月,其翻译功能较差。因此,DeepL和有道在句子构成上,比较有优势。在汉译英时,首推的是DeepL,在语序和用词上,翻译的都比较专业化。

  • 破晓传说术技次数怎么刷(破晓传说如何快速刷等级)

    破晓传说术技次数怎么刷?游戏中有许多需要次数的成就,这些非常非常的费时费力,很多小伙伴可能还不清楚术技次数怎么刷吧,今天小编给大家带来破晓传说术技次数刷法推荐,快来看一下吧。破晓传说术技次数刷法推荐我个人是推荐雅旦湖露营据点的大型魔物,左边可以打大蜥蜴右边打巨龙。虽然等级只有27级但难度调整到混沌后,1只怪血量就7万多。由于敌我双方都设定伤害1,基本上不需要害怕被打死。

  • 女生网名古风三个字(清雅仙气的笔名三个字)

    远山眉越人歌,今天小编就来说说关于女生网名古风三个字?下面更多详细答案一起来看看吧!女生网名古风三个字远山眉越人歌甜心匣维尼熊草莓糖第六感润滑感暮云深月色夜永守望小帝姬热台词黑天鹅软仙儿涫清辞陌潇尘醉笙情倾城颜

  • 汉维碳酸钙d3片的作用与功效(补钙要从娃娃抓起)

    汉维碳酸钙D3咀嚼片,原料采用为矿石加工提纯的精制碳酸钙,安全性更高,并且不含色素、防腐剂,它每片钙含量为1.25克碳酸钙,相当于钙500mg,远远高于其他的钙剂。缺钙补钙,赶紧来获取这款汉维碳酸钙D3咀嚼片吧。

  • 大腿小腿粗用什么方法变瘦腿(小腿粗怎么才能瘦腿)

    比如多吃水果蔬菜、米饭以及牛奶牛肉等,肥肉、巧克力、奶油等最好不要食用。长时间有氧训练有氧训练消耗脂肪的同时,也会也会消耗蛋白质。并且每餐中多事水果蔬菜,少吃高脂肪高热量食物比如肥肉、奶油、巧克力等。减少蛋白质摄入肌肉中蛋白质的合成需要很多外来蛋白质的摄入。它指挥着它指挥着身体对肌肉中蛋白质的修复、合成和加固,让我们的肌肉增长增强。这是因为运动后没有及时进行拉升,导致了大腿小腿容易僵硬,失去弹性。