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

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

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

数据离散化的意义数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。这样有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。即将属性值分为具有相同宽度的区间,区间的个数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学习社

    推荐阅读
  • 高考数学90分能考上一本(以口执笔写坚强人生)

    孙家阳母亲的心疼和激动,源于18年前的一次医院确诊。孙家阳出生7个月后,被诊断为代谢性神经肌肉病。不能用手正常写字,只是孙家阳日常需要克服的困难之一。18年来,孙家阳的父母亲竭尽所能,给孙家阳创造更好的生活和学习条件。父母无微不至的照顾,以及乐观向上的心态,将孙家阳培养成了一个乐观开朗的少年。根据此前公布的分数线,今年安徽高考理工类二本线为435分,孙家阳的分数超出二本线12分。

  • 潮湿的近义词(潮湿词语详细介绍)

    下面内容希望能帮助到你,我们来一起看看吧!潮湿的近义词潮湿的近义词:滋润、润湿、湿气、温润、湿润。cháoshī含有比正常状态下较多的水分。《孟子·公孙丑上》:“今恶辱而居不仁,是犹恶湿而居下住。”久束湿薪长期捆着的潮湿柴草。比喻思想保不易接受新事物雨后新晴的原野,潮湿而滋润。

  • 葛洪会什么法术(拖家带口入山修行成仙的葛洪最后成功了吗)

    葛洪本是一名英勇善战的大将军,在广州征兵期间认识了男孩太守鲍玄,并向他学习医药养生知识。《葛稚川移居图》中抱着孩子骑在牛背上的妇人,就是鲍玄的女儿鲍姑。鲍姑嫁给葛洪后,夫唱妇随,终生跟随葛洪一起研究医术和针灸。在得到皇帝的允许后,葛洪就带领家人上任去了。罗浮山葛洪隐居到罗浮山后,与妻子鲍姑一起在那里行医之余,还专门研究如何通过服用药物延年益寿。在罗浮山隐居期间,葛洪一心修道炼丹,追求长生不老。

  • 相距是什么意思(相距意思是什么)

    相距是什么意思“相距”,读音xiāngjù,汉语词语,意思是彼此间距离。出自《史记·商君列传》:“军既相距,卫鞅遗魏将公子昂书。”《新五代史·杂传四·赵犨》:“是时,梁将刘鄩等与庄宗相距澶魏之间,兵数败”。这事发生后,怎么一口咬定是我指使他干的,这不是白日见鬼么?虽然相距遥远,老人依然时常眷恋着她的故乡。我坚信,我们之间的友谊决不会因为相距遥远而日渐淡漠的。

  • nba官方集锦魔术(出道即巅峰的魔术师如何稳步成为首席乔吹的)

    本章主人公是同期的另一位天皇巨星,魔术师约翰逊。1959年8月14日,埃尔文约翰逊出生于美国密歇根州兰辛,家里有9个兄弟姐妹。有正经工作的父母,要想养育好9个小孩,实属不易。家庭出身极为重要,伯德因为家里极其贫困又来自乡下,被称为乡巴佬。可惜最终被肯塔基州冠军淘汰,止步八强。战胜大鸟伯德带领的小球队印第安州立大学,为球队带来第一个NCAA总冠军。这是绝代双骄第一次正面对抗,尽管魔术师捧杯,最佳球员却是拉里伯德。

  • 竹节海棠从扦插到开花需要多久(竹节海棠花一节一节爬)

    竹节海棠不仅叶子好看,而且还一丛一丛的开花。竹节海棠属于秋海棠的一种,是多年生的草本植物。竹节海棠的价格比较便宜,观叶赏花两不误,比较有性价比的一种花卉。竹节海棠在春天和秋天生长的特别快。竹节海棠开花,一般从新枝顶部开花,或者在老枝的顶部往上生长时,从顶部冒出花苞。竹节海棠生长的太高,一定要修剪,在修剪时保留两节左右枝干就可以了。

  • 庖丁解牛翻译 庖丁解牛翻译及词语解释

    翻译:有个名叫丁的厨师给文惠君宰牛。他的手接触的地方,肩膀靠着的地方,脚踩着的地方,膝盖顶住的地方,都哗哗地响,刀子刺进牛体,发出霍霍的声音。没有哪一种声音不合乎音律:既合乎《桑林》舞曲的节拍,又合乎《经首》乐章的节奏。文惠君说:“嘿,好哇!你的技术怎么高明到这种地步呢?”厨师丁放下屠刀,答道:我所喜好的,是‘道’,它比技术进一步了。

  • 减肥吃钙片可以吗 吃钙片减肥吗?

    钙片是现在很多人生活中都会吃的保健品,不过有人担心自己在减肥期价不适合食用钙片,不过网上又盛传睡前吃钙片可以减肥,那么下面就一起来看看究竟是怎样。钙片可以帮助补充身体的营养,在减肥期间食用可以一定程度的保障身体的健康,并且钙片也并不会导致长胖。充足的钙能够让网膜脂肪迅速溶解。钙的吸收最佳时间是夜间,因此睡前补钙可以瘦小腹。

  • 福清哪些公园开放了(福清公园什么时候开放)

    根据部署安排,在城区公园2月20日完成全覆盖消毒消杀基础上,自2020年2月21日起,福清市城区部分公园有限开放。同时回家观察,尽快到医院发热门诊就诊。游客数量超过公园最大容量50%时,公园将进行入园游客数量管控。园内不扎堆、不聚集、不集中锻炼健身,不随地吐痰,保持环境卫生。

  • 空调消毒剂使用方法(空调消毒剂的使用方法)

    跟着小编一起来看一看吧!空调消毒剂使用方法关闭空调电源,拔去插头,并保持室内空气流通。取下滤层网、空气净化过滤器,露出热交换器散热片。使用清洁剂前,充分摇匀瓶罐,不少于6次,然后在离散热片5cm处,进行均匀彻底喷洗。将取下的滤层网喷上清洗剂静止10分钟,然后清洗。散热片喷洗过后,装回滤层网,静置15分钟后,开机15-30分钟,污水自动从排水管排出。