# 在一些分类算法中,要求数据是分类属性形式,这样,常常需要将连续属性变换成分类属性,即连续属性离散化 # 1、离散化过程:在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或者整数值代表落在每个子区间中的数据值。 # 2、离散化方法: # (1)等宽法:将属性的值域划分成具有相同宽度的区间,区间的个数由数据本身的特点决定,或者由用户指定。 # (2)等频法:将相同数量的记录放进每个区间。 # (3)基于聚类分析的方法:一维聚类的方法包括两个步骤,首先将连续属性的值用聚类算法(k-means)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值并做同一标记。 # 聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。 # 数据离散化代码 import pandas as pd datafile='E:/WTTfiles/自我学习/机器学习/python数据分析与挖掘实战/chapter4/demo/data/discretization_data.xls' data=pd.read_excel(datafile) data=data[u'肝气郁结证型系数'].copy() k=4 d1=pd.cut(data,k,labels=range(k)) w=[1.0*i/k for i in range(k+1)] w=data.describe(percentiles=w)[4:4+k+1] w[0]=w[0]*(1-1e-10) d2=pd.cut(data,w,labels=range(k)) # from sklearn.cluster import KMeans # kmodel=KMeans(n_clusters=k,n_jobs=1) # kmodel.fit(data.reshape((len(data),1))) # c=pd.DataFrame(kmodel.cluster_centers_).sort_index(0) # w=pd.rolling_mean(c,2).iloc[1:] # w=[0]+list(w[0])+[data.max()] # d3=pd.cut(data,w,labels=range(k)) 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=(8,3)) 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 cluster_plot(d1,k).show() cluster_plot(d2,k).show() # cluster_plot(d3,k).show()
Python数据分析与挖掘实战第四章笔记之属性离散化
最新推荐文章于 2022-05-04 16:22:35 发布