1. 程式人生 > >python實現Kmeans文字聚類,通過PCA降維和Matplotlib顯示聚類3d三維影象

python實現Kmeans文字聚類,通過PCA降維和Matplotlib顯示聚類3d三維影象

首先感謝Eastmount寫的內容http://blog.csdn.net/Eastmount/article/details/50545937。點選開啟連結

在此基礎上,主要實現以下改進及結果

1.替換使用sklearn.feature_extraction.text.TfidfVectorizer,將corpus文字轉換為tfidf值的svm向量。

2.通過PCA降維和Matplotlib顯示聚類3d三維影象,更容易區分各類。

3.jieba提取30個關鍵詞,作為特徵值,而非全文件內容,進行SVM。

目前剛到找工作中,希望大家看到後,能夠給些建議到[email protected],感謝!

具體程式碼如下:

#  coding:utf-8
"""
Created on 2016-05-03 @author:[email protected]
"""
import re
import codecs
import jieba.analyse
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import 
Axes3D if __name__ == "__main__": corpus = [] for line in open('01_All_BHSpider_Content_Result.txt','r').readlines(): # 讀取1000行字串的txt文字 line = line.strip() # 運用正則表示式,過濾英文及標點符號,中文標點符號 line = line.decode("utf8") line = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、[email protected]
#¥%……&*()]+|[a-zA-Z]+"
.decode("utf8"),"/".decode("utf8"),line) # 用jieba的textrank演算法,每行字串提取30個特徵詞 line_feature = jieba.analyse.textrank(line , topK=30) line = "/".join(line_feature) corpus.append(line) # 參考官方文件運用sklearn.feature_extraction.text.TfidfVectorizer,將corpus文字轉換為tfidf值的svm向量 tfidfvec = TfidfVectorizer() cop_tfidf = tfidfvec.fit_transform(corpus) weight = cop_tfidf.toarray() # KMeans聚類,確定為4類 clf = KMeans(n_clusters=4) #景區 動物 人物 國家 s = clf.fit(weight) # 輸出lable文件 result = codecs.open("lable.txt",'w','utf-8') i=1 while i<=len(clf.labels_): result.write(str(i)+','+str(clf.labels_[i-1])+'\r\n') i=i+1 result.close() # PCA降維,繪製三維圖 pca = PCA(n_components=3) newData = pca.fit_transform(weight) x1 =[] y1 =[] z1 =[] i=0 while i<400: x1.append(newData[i][0]) y1.append(newData[i][1]) z1.append(newData[i][2]) i +=1 x2 =[] y2 =[] z2=[] i=400 while i<600: x2.append(newData[i][0]) y2.append(newData[i][1]) z2.append(newData[i][2]) i +=1 x3 =[] y3 =[] z3=[] i=600 while i<800: x3.append(newData[i][0]) y3.append(newData[i][1]) z3.append(newData[i][2]) i +=1 x4 =[] y4 =[] z4=[] i=800 while i<1000: x4.append(newData[i][0]) y4.append(newData[i][1]) z4.append(newData[i][2]) i +=1 fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.scatter(x1,y1,z1,c='b') ax.scatter(x2,y2,z2,c='r') ax.scatter(x3,y3,z3,c='k') ax.scatter(x4,y4,z4,c='g') plt.show()


相關推薦

python實現Kmeans文字通過PCA維和Matplotlib顯示3d影象

首先感謝Eastmount寫的內容http://blog.csdn.net/Eastmount/article/details/50545937。點選開啟連結 在此基礎上,主要實現以下改進及結果 1.替換使用sklearn.feature_extraction.text.T

python實現Kmeans

引數設定 Parameters: n_clusters : int, optional, default: 8 The number of clusters to form as well as the number of centroids

[python] Kmeans文字演算法+PAC+Matplotlib顯示影象

0 前言 本文主要講述以下幾點:        1.通過scikit-learn計算文字內容的tfidf並構造N*M矩陣(N個文件 M個特徵詞);        2.呼叫scikit-learn中的K-means進行文字聚類;        3.使用PAC進行降維處理,每

Opencv 實現FCM通過文章可以學習到Opencv 自定義函式返回矩陣的方式以及多引數返回:形參返回方式

本文是作者隨筆,附帶學習的註釋:主要函式:輸入是矩陣影象(例如512*512的單通道影象),返回方式是形參返回void ClustFCM(cv::InputArray image, cv::OutputArray U,cv::OutputArray obj_fcn, cv::

通用匯入工具通過poi和反射實現

將檔案從前端上傳到後端,就不說了,我的文章裡面有上傳的,剛開始寫,如果有問題歡迎批評指正首先,先說一下用法,因為之前每增加一個匯入模板就要單獨開發,比較浪費時間,所以單獨搞了個通用類,引數有待解析檔案,輸出的類,欄位陣列,開始行數,然後返回一個List1.我們已經獲取到這個檔

Fuzzy C Means 算法及其 Python 實現——寫得很清楚見原文

少包 均值 平均值 劃分 gin 及其 end 5% 指數 Fuzzy C Means 算法及其 Python 實現 轉自:http://note4code.com/2015/04/14/fuzzy-c-means-%E7%AE%97%E6%B3%95%E5%8F%8A%E

js已知一個文字輸入框通過按鈕點選用if 判斷輸入框裡的數字是否能被3整除

<!DOCTYPE html> <html> <head>     <title>第一題</title>     <meta charset="utf-8"> </head> <!--

微信好友大揭祕使用Python抓取朋友圈資料通過人臉識別全面分析好友一起看透你的“朋友圈”

微信:一個提供即時通訊服務的應用程式,更是一種生活方式,超過數十億的使用者,越來越多的人選擇使用它來溝通交流。 不知從何時起,我們的生活離不開微信,每天睜開眼的第一件事就是開啟微信,關注著朋友圈裡好友的動態,而朋友圈中或虛或實的狀態更新,似乎都在證明自己的“有趣

Python抓取朋友圈資料通過人臉識別全面分析好友!看透朋友圈

微信:一個提供即時通訊服務的應用程式,更是一種生活方式,超過數十億的使用者,越來越多的人選擇使用它來溝通交流。 不知從何時起,我們的生活離不開微信,每天睜開眼的第一件事就是開啟微信,關注著朋友圈裡好友的動態,而朋友圈中或虛或實的狀態更新,似乎都在證明自己的“有趣”,尋找那份

python實現對caffe的訓練初始權重訓練和繼續訓練

1、直接訓練 直接訓練比較簡單,幾行程式碼就可以搞定 import caffe caffe.set_device(0) caffe.set_mode_gpu() #solver root caffe_root = 'D:/caffe-ssd-micros

python實現字典按value排序以及按照key排序的實現方法

字典按照value大小進行排序的實現方法: 可以通過用lambda以及sorted()函式結合的方式來實現排序,如下: 升序: sorted(dict.items(),lambda x,y: cmp(x[1],y[1])

python實現並繪製 sigmoid函式tanh函式ReLU函式PReLU函式

python實現並繪製 sigmoid函式,tanh函式,ReLU函式,PReLU函式 # -*- coding:utf-8 -*- from matplotlib import pyplot as plt import numpy as np import mpl_toolkits.axisartist

python實現列表排序sort函式要求支援任意型別元素的排序也支援

def list_sort(lt, key=None, reverse=True): a = len(lt) for i in range(a-1): for j in range(a-1-i): if key:

python 實現計算器功能 輸入字串輸出相應結果

1 import re 2 formul='2*(1+2*6/3-2)+5+2*(1+6/2/3-2)' 3 4 def addjian(func): 5 digital = re.split('(\D)',func) 6 for index in rang

jquery wysiwyg.js實現文字編輯框可複製圖片及文字

wysiwyg.js是一款十分強大的、所見即所得的jQuery富文字編輯器外掛。wysiwyg.js富文字編輯器體積小,支援選擇、鍵盤、佔位等眾多事件。而且該富文字編輯器的相容性十分好,甚至相容IE

樸素貝葉斯分類原理及Python實現簡單文字分類

貝葉斯定理: 這個定理解決了現實生活裡經常遇到的問題:已知某條件概率,如何得到兩個事件交換後的概率,也就是在已知P(A|B)的情況下如何求得P(B|A)。這裡先解釋什麼是條件概率:表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。

15python實現----鍵盤錄入一個整數求1到該數的所有素數的和

''' 鍵盤錄入一個整數,求1到該數的所有素數的和 ''' # 判斷素數函式 def is_num(num): for i in range(2, num): if num % i == 0: return 0

ffmpeg+nginx+video實現rtsp流轉hls流通過H5檢視監控視訊

一、FFmpeg下載:http://ffmpeg.zeranoe.com/builds/  下載並解壓FFmpeg資料夾,配置環境變數:在“Path”變數原有變數值內容上加上d:\ffmpeg\bin,驗證:ffmpeg -version 出現版本號則成功。二、官網下載w

Java定義一個通過連線mysql,演示訪問資料庫的一般步驟

1、載入驅動程式2、建立資料庫連線3、建立statement物件4、執行sql語句5、處理返回結果6、關閉建立的物件import java.sql.Connection; import java.sql

css佈局實現單行文字水平居中多行文字靠左

單行文字居中,多行文字靠左,需要css佈局來實現,那麼就需要用到兩層元素,外面一層設定text-align:center;裡面一層為行元素,需要設定text-align:left;這樣有一行的時候因為裡面是行內元素,有多少內容就多寬,而外面一層設定了text-align:ce