python聚类算法实战详细笔记 (python3.6+(win10、Linux))





一、基本概念:

    1、计算TF-DIF


TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,

则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),

IDF逆向文件频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率。

IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。

    2、K-means聚类计算

K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,

它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。

K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。

算法采用误差平方和准则函数作为聚类准则函数。





二、python3.5 3.6环境配置

    1、
安装了VS2015;

    2、在Python3.5安装路径中有一个Scripts文件夹,里面有pip.exe或者类似的可执行文件,安装一下;

    3、下载相对应的whl安装包,下载地址http://www.lfd.uci.edu/~gohlke/pythonlibs/;

下载:1)numpy-1.12.1+mkl-cp36-cp36m-win32.whl

     2)scipy-0.19.0-cp36-cp36m-win32.whl

     3)scikit_learn-0.18.1-cp36-cp36m-win32.whl

    4、安装, 下载好以后,进入whl文件所在文件夹,进入cmd,输入命令: 

     1)pip install numpy-1.12.1+mkl-cp36-cp36m-win32.whl 回车;显示successful,不要关闭cmd;

     2)pip install scipy-0.19.0-cp36-cp36m-win32.whl 回车;显示successful,不要关闭cmd;

     3)pip install scikit_learn-0.18.1-cp36-cp36m-win32.whl 回车;显示successful,不要关闭cmd;

    5、验证一下,输入命令:  输入import numpy 回车 无异常,输入import scipy 回车 无异常,输入import sklearn 回车 无异常

   

   环境配置成功

三、文本聚类算法步骤

   本次目标是对海量淘宝商品标题进行分类

    1、准备数据
(5000条淘宝商品标题)

   a、采集

   b、手工准备

   范本:https://pan.baidu.com/s/1eR4V77W (标题原文5000行【文本文件】)

    2、初步加工

   a、中文分词

   b、手工处理

   范本:https://pan.baidu.com/s/1mi4Z9wO (分词后的标题5000行【文本文件】)

    3、计算TF-IDF代码如下:

        代码如下


============================tfidf.py begin====================================================

# coding=utf-8    



import time            

import re            

import os    

import sys  

import codecs  

import shutil  

from sklearn import feature_extraction    

from sklearn.feature_extraction.text import TfidfTransformer    

from sklearn.feature_extraction.text import CountVectorizer  

 

if __name__ == "__main__":  

   corpus = [] #文档预料 空格连接  

 

   #读取预料 一行预料为一个文档  

   aa = 0

   for line in open('D:/pyfenlei/5000/p1.txt', 'r').readlines():  

# print (line) 

# print(aa)

aa = aa +1

if (line.strip()):

   corpus.append(line.strip())  

   #print corpus  

   time.sleep(5)  

     

   #将文本中的词语转换为词频矩阵 矩阵元素a[i][j] 表示j词在i类文本下的词频  

   vectorizer = CountVectorizer()  

 

   #该类会统计每个词语的tf-idf权值  

   transformer = TfidfTransformer()  

 

   #第一个fit_transform是计算tf-idf 第二个fit_transform是将文本转为词频矩阵  

   tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  

 

   #获取词袋模型中的所有词语    

   word = vectorizer.get_feature_names()  

 

   #将tf-idf矩阵抽取出来,元素w[i][j]表示j词在i类文本中的tf-idf权重  

   weight = tfidf.toarray()  

 

   resName = "D:/pyfenlei/5000/p1.tfidf"  

   result = codecs.open(resName, 'w', 'utf-8')  

   for j in range(len(word)):  

result.write(word[j] + ' ')  

   result.write('\r\n\r\n')  

 

   #打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重    

   for i in range(len(weight)):  

print ("-------这里输出第",i,u"类文本的词语tf-idf权重------")

for j in range(len(word)):  

   result.write(str(weight[i][j]) + ' ')  

result.write('\r\n\r\n')  

 

   result.close()


============================tfidf.py end======================================================  

计算结果https://pan.baidu.com/s/1nuOujgP  (TF-IDF权重值5000行【文本文件】)





    4、计算K-means代码如下(暂定聚40个类)

        代码如下

============================Kmeans.py begin===================================================

# coding=utf-8    

"""  

#K-means  

"""    

   

import time            

import re            

import os    

import sys  

import codecs  

import shutil  

import numpy as np  

from sklearn import feature_extraction    

from sklearn.feature_extraction.text import TfidfTransformer    

from sklearn.feature_extraction.text import CountVectorizer    

 

if __name__ == "__main__":  

     

   corpus = []  

     

   #读取预料 一行预料为一个文档  

   for line in open('D:/pyfenlei/5000/p1.txt', 'r').readlines():  

# print (line)

corpus.append(line.strip())  

   #print corpus  

   #time.sleep(1)  

     

   #将文本中的词语转换为词频矩阵 矩阵元素a[i][j] 表示j词在i类文本下的词频  

   vectorizer = CountVectorizer()  

 

   #该类会统计每个词语的tf-idf权值  

   transformer = TfidfTransformer()  

 

   #第一个fit_transform是计算tf-idf 第二个fit_transform是将文本转为词频矩阵  

   tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))  

 

   #获取词袋模型中的所有词语    

   word = vectorizer.get_feature_names()  

 

   #将tf-idf矩阵抽取出来,元素w[i][j]表示j词在i类文本中的tf-idf权重  

   weight = tfidf.toarray()  





   from sklearn.cluster import KMeans  

   clf = KMeans(n_clusters=40)  

   s = clf.fit(weight)  





   kmName = "D:/pyfenlei/5000/p1.km" 

   kmresult = codecs.open(kmName, 'w', 'utf-8')  

   i = 1  

   while i <= len(clf.labels_):  

kmresult.write("%d,%d\n" % (i, clf.labels_[i-1]))   

i = i + 1  





   kmresult.close()

 

   #用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数  

   print(clf.inertia_) 

============================Kmeans.py end=================================================== 

计算结果https://pan.baidu.com/s/1skR9P7J (K-means标题行与分类簇号共5000行【文本文件】)





    5、标题归类如下:

        代码如下


============================btgl.py begin===================================================

# coding=utf-8

"""  

#标题归类 

"""





import time

import re

import os

import sys

import codecs





if __name__ == "__main__":

   ywName = "D:/pyfenlei/5000/p1.yw"

   kmName = "D:/pyfenlei/5000/p1.km"

   ywList = [line.strip() for line in open(

ywName, encoding='utf-8').readlines()]

   kmList = [line.strip().split(',')[1].strip()

     for line in open(kmName, encoding='utf-8').readlines()]

   for i in range(len(kmList)):

btglName = "D:/pyfenlei/gl/p1_%s.btgl"

btglresult = codecs.open(btglName % (kmList[i]), 'a', 'utf-8')

btglresult.write("%s\n" % (ywList[i]))

btglresult.close()

   print("标题归类完毕!")

============================btgl.py end==================================================

计算结果https://pan.baidu.com/s/1sl2N7Tr (40个聚类对应的标题归并后的40个标题列表文件【文本文件】)





    6、词群归类如下:

        代码如下:


============================cqgl.py begin================================================

# coding=utf-8

"""  

#标题归类 

"""





import time

import re

import os

import sys

import codecs





if __name__ == "__main__":

   fcName = "D:/pyfenlei/5000/p1.txt"

   kmName = "D:/pyfenlei/5000/p1.km"

   fcList = [line.strip() for line in open(

fcName, encoding='utf-8').readlines()]

   kmList = [line.strip().split(',')[1].strip()

     for line in open(kmName, encoding='utf-8').readlines()]

   for i in range(len(kmList)):

cqglName = "D:/pyfenlei/gl/p1_%s.cqgl"

cqglresult = codecs.open(cqglName % (kmList[i]), 'a', 'utf-8')

cqglresult.write("%s " % (fcList[i]))

cqglresult.close()

   print("词群归类完毕!")

============================cqgl.py end===================================================

计算结果https://pan.baidu.com/s/1pL6p0ev (40个聚类对应的分词归并后的40个词群【文本文件】)





代码没有进行整合,也不具备大规模聚类,仅供参考!





参考资料:


https://sourceforge.net/projects/scipy/files/scipy/

https://github.com/scipy/scipy/releases

https://pypi.python.org/pypi/scipy (这里的scipy好像很难安装成功)

http://www.lfd.uci.edu/~gohlke/pythonlibs/ (这里有scipy的各种版本)

本人原创未经许可,可以随意转载!

python聚类算法实战详细笔记 (python3.6+(win10、Linux))的更多相关文章

  1. Python聚类算法之基本K均值实例详解

    Python聚类算法之基本K均值实例详解 本文实例讲述了Python聚类算法之基本K均值运算技巧.分享给大家供大家参考,具体如下: 基本K均值 :选择 K 个初始质心,其中 K 是用户指定的参数,即所 ...

  2. python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...

  3. Linux实战教学笔记08:Linux 文件的属性(上半部分)

    第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...

  4. Linux实战教学笔记

    Linux实战教学笔记01:计算机硬件组成与基本原理 Linux实战教学笔记02:计算机系统硬件核心知识 Linux实战教学笔记03:操作系统发展历程及系统版本选择 Linux实战教学笔记04:Lin ...

  5. python相关性算法解决方案(rest/数据库/json/下载)

    1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的相关性算法,算法原理就不介绍了,只从代码层面进行介绍,包 ...

  6. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  7. 【Python机器学习实战】聚类算法(1)——K-Means聚类

    实战部分主要针对某一具体算法对其原理进行较为详细的介绍,然后进行简单地实现(可能对算法性能考虑欠缺),这一部分主要介绍一些常见的一些聚类算法. K-means聚类算法 0.聚类算法算法简介 聚类算法算 ...

  8. 【Python机器学习实战】聚类算法(2)——层次聚类(HAC)和DBSCAN

    层次聚类和DBSCAN 前面说到K-means聚类算法,K-Means聚类是一种分散性聚类算法,本节主要是基于数据结构的聚类算法--层次聚类和基于密度的聚类算法--DBSCAN两种算法. 1.层次聚类 ...

  9. Python—kmeans算法学习笔记

    一.   什么是聚类 聚类简单的说就是要把一个文档集合根据文档的相似性把文档分成若干类,但是究竟分成多少类,这个要取决于文档集合里文档自身的性质.下面这个图就是一个简单的例子,我们可以把不同的文档聚合 ...

随机推荐

  1. 今天研究了一下手机通信录管理系统(C语言)

    题目:手机通信录管理系统 一.题目要求 二.需求分析 三.设计步骤/编写代码 四.上机/运行结果 五.总结 一.题目要求 模拟手机通信录管理系统,实现对手机中的通信录进行管理操作.功能要求: (1)查 ...

  2. html5获取经纬度

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 20155202 2016-2017-2 《Java程序设计》第6周学习总结

    20155202 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 输入输出 数据从来源取出:输入串流 java.io.InputStream 写入目的的:输出 ...

  4. jvm不打印异常栈

    生产环境抛异常,但却没有将堆栈信息输出到日志,确认打印日志方法正确logger.error("somthing error", ex); JVM启动参数加上-XX:-OmitSta ...

  5. Android AppCompat 需要 API 级别 11

    为了兼容性使用 AppCompat 支持库.现在我试图override AppCompat 中的一些项来建立自己的Theme,在values文件下的style.xml里添加如下内容. <!-- ...

  6. VLC简介及使用说明

    一.简介    VLC的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.vi ...

  7. Jersey构建Restful风格的Webserivces(三)

    一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...

  8. Web app制作细节:web app互动制作技巧

    Google .微软.苹果三大巨头紧锣密鼓地在web app的研发产品领域圈地设岗,并试图建立以自己为中心的”云“服务平台,企图在web app时代到来的时候充当霸主.本文将围绕web app的制作, ...

  9. Web 平台安装程序 5.0(Microsoft Web Platform Installer) 由于修改常用选择不正确导致打开就报错

    如图: 解决方案.第一步先卸载  Web 平台安装程序 5.0 第二步   将你添加配的文件删除 第三步:重新安装就可以了

  10. php不用递归完成无限分类,从表设计入手完整演示过程

    无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, ...