返回介绍

3.数据变换

发布于 2024-01-28 21:41:24 字数 3796 浏览 0 评论 0 收藏 0

本章数据变换主要采用属性构造和数据离散化两种方法对数据进行处理。首先通过属性构造,获得证型系数,然后通过聚类算法对数据进行离散化处理,形成建模数据。

(1)属性构造

为了更好地反映出中医证素分布的特征,采用证型系数代替具体单证型的证素得分,证型相关系数计算公式为:证型系数=该证型得分/该证型总分。

针对各种证型得分进行属性构造后的数据集见表8-8。

表8-8 属性构造后的数据集

数据详见:demo/data/data.xls

(2)数据离散化

由于Apriori关联规则算法无法处理连续型数值变量,为了将原始数据格式转换为适合建模的格式,需要对数据进行离散化。本章采用聚类算法对各个证型系数进行离散化处理,将每个属性聚成4类,其离散化后的数据格式见表8-9~表8-14。

表8-9 肝气郁结证型系数离散表

表8-10 热毒蕴结证型系数离散表

表8-11 冲任失调证型系数离散表

表8-12 气血两虚证型系数离散表

表8-13 脾胃虚弱证型系数离散表

表8-14 肝肾阴虚证型系数离散表

数据离散化的代码如代码清单8-1所示。

代码清单8-1 数据聚类离散化代码

#-*- coding: utf-8 -*-
'''聚类离散化,最后的result的格式为:
      1           2           3           4
A     0    0.178698    0.257724    0.351843
An  240  356.000000  281.000000   53.000000即(0, 0.178698]有240个,(0.178698, 0.257724]有356个,依此类推。
'''
from __future__ import print_function
import pandas as pd
from sklearn.cluster import KMeans #导入K均值聚类算法
datafile = '../data/data.xls' #待聚类的数据文件
processedfile = '../tmp/data_processed.xls' #数据处理后文件
typelabel ={u'肝气郁结证型系数':'A', u'热毒蕴结证型系数':'B', u'冲任失调证型系数':'C', u'
    气血两虚证型系数':'D', u'脾胃虚弱证型系数':'E', u'肝肾阴虚证型系数':'F'}
k = 4 #需要进行的聚类类别数
#读取数据并进行聚类分析
data = pd.read_excel(datafile) #读取数据
keys = list(typelabel.keys())
result = pd.DataFrame()
if __name__ == '__main__': #判断是否主窗口运行,这句代码的作用比较神奇,有兴趣了解的读取请
 #自行搜索相关材料
  for i in range(len(keys)):
     #调用k-means算法,进行聚类离散化
     print(u'正在进行“%s”的聚类...' % keys[i])
     kmodel = KMeans(n_clusters = k, n_jobs = 4) #n_jobs是并行数,一般等于CPU数较好
     kmodel.fit(data[[keys[i]]].as_matrix()) #训练模型
     r1 = pd.DataFrame(kmodel.cluster_centers_, columns = [typelabel[keys[i]]]) 
         #聚类中心
     r2 = pd.Series(kmodel.labels_).value_counts() #分类统计
     r2 = pd.DataFrame(r2, columns = [typelabel[keys[i]]+'n']) #转为DataFrame,记
         录各个类别的数目
     r = pd.concat([r1, r2], axis = 1).sort(typelabel[keys[i]]) #匹配聚类中心和类别
        数目
     r.index = [1, 2, 3, 4]
     r[typelabel[keys[i]]] = pd.rolling_mean(r[typelabel[keys[i]]], 2) #rolling_
         mean()用来计算相邻2列的均值,以此作为边界点
     r[typelabel[keys[i]]][1] = 0.0 #这两句代码将原来的聚类中心改为边界点
     result = result.append(r.T)
  result = result.sort() #以Index排序,即以A,B,C,D,E,F顺序排
  result.to_excel(processedfile)

代码详见:demo/code/discretization.py

原始数据集经过数据预处理后,形成建模数据,见表8-15。

表8-15 建模数据集

8.2.3 模型构建

本案例的目标是探索乳腺癌患者TNM分期与中医证型系数之间的关系,因此采用关联规则算法,挖掘它们之间的关联关系。

关联规则算法主要用于寻找数据集中项之间的关联关系。它揭示了数据项间的未知关系,基于样本的统计规律,进行关联规则挖掘。根据所挖掘的关联关系,可以从一个属性的信息来推断另一个属性的信息。当置信度达到某一阈值时,就可以认为规则成立。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文