datafile = '../data/discretization_data.xls' #参数初始化 data = pd.read_excel(datafile) #读取数据 data = data[ u'肝气郁结证型系数' ].copy() k = 4 d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3 #基于聚类分析的方法 from sklearn.cluster import KMeans #引入KMeans kmodel = KMeans(n_clusters = k, n_jobs = 4 ) #建立模型,n_jobs是并行数,一般等于CPU数较好 kmodel.fit(data.reshape((len(data), 1 ))) #训练模型 c = pd.DataFrame(kmodel.cluster_centers_).sort_values( 0 ) #输出聚类中心,并且排序(默认是随机序的) w = pd.rolling_mean(c, 2 ).iloc[ 1 :] #相邻两项求中点,作为边界点 w = [ 0 ] + list(w[ 0 ]) + [data.max()] #把首末边界点加上,w[0]中0为列索引 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.plot(x,y,'o') plt.ylim(- 0.5 , k- 0.5 ) return plt cluster_plot(d1, k).show() cluster_plot(d3, k).show()

(1)等宽法结果图
这里写图片描述

(2)基于聚类分析方法的结果图
这里写图片描述

补充:cut函数使用方法

cut()函数可以将一个数组中的数据切分成几个部分。
将数据分为几个部分,就称为几个面元。
(1)cut(数据数组,面元数组)

array = [3, 60, 43, 100, 52, 36, 37, 0, 80, 100]
bins = [0, 25, 50, 75, 100]
cat = pd.cut(array, bins)
[(0, 25], (50, 75], (25, 50], (75, 100], (50, 75], (25, 50], (25, 50], NaN, (75,100], (75, 100]]
Categories (4, interval[int64]): [(0, 25] < (25, 50] < (50, 75] < (75, 100]]

(2)不指定面元的界限,直接传入一个整数参数。
cut()会按照指定的数字,将元素划分为相应的几部分。

array = [3, 60, 43, 100, 52, 36, 37, 0, 80, 100]
pd.cut(array,5)
[(-0.1, 20.0], (40.0, 60.0], (40.0, 60.0], (80.0, 100.0], (40.0, 60.0], (20.0, 40.0], (20.0, 40.0], (-0.1, 20.0], (60.0, 80.0], (80.0, 100.0]]
Categories (5, interval[float64]): [(-0.1, 20.0] < (20.0, 40.0] < (40.0, 60.0] <(60.0, 80.0] <(80.0, 100.0]]
需要离散化的数据示例:实现代码#-*- coding: utf-8 -*-#数据规范化import pandas as pddatafile = '../data/discretization_data.xls' #参数初始化data = pd.read_excel(datafile) #读取数据data = data[u'肝气郁结证型系数'].copy()k = 4...
文章目录1. 特征 离散化 的作用2. 特征 离散化 可以引入非线性的证明 李沐曾说过,模型是使用离散特征还是 连续 特征,其实是一个“海量离散特征+简单模型” 同 “少量 连续 特征+复杂模型”的权衡。既可以 离散化 用线性模型,也可以用 连续 特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。 1. 特征 离散化 的作用 在实际工作中,需要使用譬如LR这种线性分类器的时候,往往需要将特征 离散化 成0/1特征,之后再进行模型训练。这样的好.
文章目录离散特征为什么要 连续 离散化 处理的一般过程 离散化 的分类无监督的方 有监督的方 卡方检验(CHI)信息增益 (IG) 离散化 的评价 离散化 工具sklearn.preprocessing.KBinsDiscretizerpd.cut参考 离散特征为什么要 连续 化 作者:严林 链接:https://www.zhihu.com/question/31989952/answer/54184582
至此, python 作业已经全部更新完毕 该题目的 数据 我放到资源里面的,但是我不知道那个收费不收费,我有时间了把他存到百度云盘/阿里云盘里面供大家下载 ** 2、统计 年龄 分布情况(5岁的间隔统计),绘制出 年龄 分布图** 代码如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams["font.family"] = ['SimHei'] plt.rcParams["axes.unicode_mi
文章目录一、为什么 离散化 离散化 的优势特征 离散化 离散化 的优势 一、为什么 离散化 离散化 的优势 在机器学习中,在很多案例中,人们在处理 数据 的时候,常常把 连续 特征 离散化 。那么为什么要用离散特征呢?这么做有什么优势? 特征 离散化 数据 离散化 是将 连续 数据 进行分段,使其变为一段段 离散化 的区间。 连续 特征 离散化 的基本假设,是默认 连续 特征不同区间的取值对结果的贡献是不一样的。 特征的 连续 值在不同的区间的重要性...
离散化 的原因 1.模型限制 比如决策树、朴素贝叶斯等算 ,都是基于离散型的 数据 展开的。如果要使用该类算 ,必须将离散型的 数据 进行。有效的 离散化 能减小算 的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。 2. 离散化 的特征更易理解 比如工资收入,月薪2000和月...
import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import AgglomerativeClustering from sklearn.datasets import make_blobs from scipy.cluster.hierarchy import dendrogram # 生成随机 数据 集 X, y = make_blobs(n_samples=50, centers=3, random_state=42) # 创建聚合聚类模型 model = AgglomerativeClustering(n_clusters=3) # 拟合 数据 model.fit(X) # 可视化聚类结果 plt.scatter(X[:, 0], X[:, 1], c=model.labels_, cmap='rainbow') plt.show() # 绘制树状图 def plot_dendrogram(model, **kwargs): 画出树状图 # 创建距离矩阵 distances = model.distances_ # 计算连线 linkage_matrix = np.column_stack([model.children_, distances, np.zeros_like(distances)]) dendrogram(linkage_matrix, **kwargs) plt.title('Hierarchical Clustering Dendrogram') plot_dendrogram(model, truncate_mode='level', p=3) plt.xlabel("Number of points in node (or index of point if no parenthesis).") plt.show() 在代码中,我们使用 `make_blobs` 方 生成了一个包含 50 个样本和 3 个中心的 数据 集。然后,我们创建了一个 `AgglomerativeClustering` 模型,并将其拟合到 数据 集中。最后,我们使用 `plt.scatter` 方 可视化了聚类结果,并使用 `plot_dendrogram` 方 绘制了树状图。 树状图可以帮助我们更好地理解聚类的过程和结果。在树状图中,横轴表示样本点的索引,纵轴表示样本点 之间 的距离。每个竖直线段表示两个样本点 之间 的距离,横坐标为这两个样本点的索引。在树状图的底部,我们可以看到每个样本点的编号。在树状图的顶部,我们可以看到聚类结果。例如,在本例中,我们可以看到最终的聚类结果包含 3 个簇。