Python K-means聚类分析实现,疾病诊断聚类分析,短文本聚类分析,疾病数据聚类分析

一、聚类分析概念

物以类聚,人以群分,即聚类。

Python K-means聚类分析实现,疾病诊断聚类分析,短文本聚类分析,疾病数据聚类分析_第1张图片

聚类分析,就是物以类聚的过程,是机器识别文本特点进行分类的过程。聚类分析的目标就是在相似的基础上收集数据来分类。聚类源于很多领域,包括数学,计算机科学,统计学,生物学和经济学。在不同的应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中。

从机器学习的角度讲,簇相当于隐藏模式。聚类是搜索簇的无监督学习过程。与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据对象有类别标记。聚类是观察式学习,而不是示例式的学习。

二、K-means聚类分析实例实现

(1)现有如下短文本:

双肺内间质病变///双肺内细小结节///双肺盘状肺不张///角膜融解穿孔///角膜肉样增生///角膜上皮剥脱///宫颈非典型腺细胞///宫颈非典型性增生///宫颈非典锥切术后///...。

这些信息是门诊疾病诊断信息,数据维度大概28w条,分类目的:想探查门诊疾病诊断数据大概有多少类疾病,或者观察有没有特别罕见的疾病等。

(2)方法:基于字形的聚类分析,代码依赖包如下:

# coding: utf-8

import numpy as np
import pandas as pd
import jieba
from sklearn.cluster import KMeans
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.decomposition import PCA

数据预处理过程,读入数据,把每个短文本(疾病)进行切词

def cut(word):
    word_list = [i for i in jieba.cut(word)]
    return_word = ' '.join(word_list)
    return return_word

name_list = []
for i in open('适应症.txt','r',encoding='utf8'):
    name0 = i.split(' ')[0]
    if len(name0) == 1:
        continue
    name_list.append(name0)

 计算tfidf,转化为向量矩阵

new_name_list =[i for i in map(cut,name_list)]
tfidf = TfidfVectorizer()
data = tfidf.fit_transform(new_name_list)
data_array = data.tocsc()
n = 100
clf = KMeans(n_clusters=n)

转化为实际数据,保存数据 

print('start predict')
clf.fit(data_array)
print(clf.inertia_)
y_hat = clf.predict(data_array)
print(y_hat)
save_data = [i for i in zip(name_list,y_hat)]
print('start save')
df = pd.DataFrame(save_data,columns=['word','type'])
df.to_csv('kmeans_data_疾病.xlsx')

 总结:短文本进行聚类分析对参数设置要求比较高,需要自己不断去调试参数,才可能获得自己想要的结果。而且聚类分析应用于短文本的方式不能应用于实践,尤其是在疾病短文本分类领域,疾病之间的特征数量差距过大,不容易进行分类,但是这个方法还是值得大家去学习的!!!

一起加油吧~~~

你可能感兴趣的:(Python数据基础,疾病诊断归一化,聚类分析,python,人工智能)