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. Map的常用操作

    public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map. ...

  2. DDR的型号问题

    一.DDR的容量大小 先看下micron公司对DDR3命名的规则: 1.meg的含义: 内存中Meg的含义:Meg就是兆的含义,即1000,000. MT47H64M16 – 8 Meg x 16 x ...

  3. SIGPIPE导致cronttab和shell脚本等工作异常

    cron和sh等可能被某些共享库hook,而这些共享库可能会触发SIGPIPE,导致crontab和shell工作异常,解决办法是程序忽略SIGPIPE或脚本中使用"trap '' SIGP ...

  4. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  5. (转)mmap和shm共享内存的区别和联系

    共享内存的创建 根据理论: 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件 (特殊情况下还可以采用 ...

  6. centos7 源码安装python3

    1.非常重要!必须得先安装py3所依赖的软件包,否则可能会出现py3安装成功,却缺少相应的pip yum groupinstall "Development tools" yum ...

  7. Python学习-33.Python中glob模块的一些参数

    glob模块中有一个叫glob的方法可以获取某个目录下的文件. import glob temp=glob.glob("E:\\Temp\\*.txt") print(temp) ...

  8. TCP协议通讯流程

    刚才网上找到的,觉得挺详细的,转来. tcp连接的三次握手大家肯定都熟了,可是有的人不一定对tcp断开的四次握手也很熟悉. 我在园子里面找到一张图,介绍的很好,现在转来!(该图片原博客地址:http: ...

  9. day 57 Bootstrap 第一天

    一 .bootstrap是什么  http://v3.bootcss.com/css/#grid-options(参考博客) 是一个前端开发的框架. HTML CSS JS 下载地址:https:// ...

  10. Day 9 函数的初识1

    def my_len(): l1 = [1,2,3,5,6] print(111) print(222) return print(333)print(my_len()) 一.函数的定义1.遇到ret ...