python 文字聚類演算法
三體下載
將下載的檔案重新命名為santi.txt,放在檔案的目錄下
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 1 18:31:11 2018
@author: luogan
"""
import jieba
import re
from gensim.models import word2vec
import multiprocessing
import gensim
import numpy as np
import pandas as pd
import collections
import pandas
def segment_text(source_corpus, train_corpus, coding, punctuation):
'''
切詞,去除標點符號
:param source_corpus: 原始語料
:param train_corpus: 切詞語料
:param coding: 檔案編碼
:param punctuation: 去除的標點符號
:return:
'''
with open(source_corpus, 'r', encoding=coding) as f, open(train_corpus, 'w' , encoding=coding) as w:
for line in f:
# 去除標點符號
line = re.sub('[{0}]+'.format(punctuation), '', line.strip())
# 切詞
words = jieba.cut(line)
w.write(' '.join(words))
#if __name__ == '__main__':
# 嚴格限制標點符號
strict_punctuation = '。,、':∶;?‘’“”〝〞ˆˇ﹕︰﹔﹖﹑·¨….¸;!´?!~—ˉ|‖"〃`@﹫¡¿﹏﹋﹌︴々﹟#﹩$﹠&﹪%*﹡﹢﹦﹤‐ ̄¯―﹨ˆ˜﹍﹎+=<__-\ˇ~﹉﹊()〈〉‹›﹛﹜『』〖〗[]《》〔〕{}「」【】︵︷︿︹︽_﹁﹃︻︶︸﹀︺︾ˉ﹂﹄︼'
# 簡單限制標點符號
simple_punctuation = '’!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~'
# 去除標點符號
punctuation = simple_punctuation + strict_punctuation
# 檔案編碼
coding = 'utf-8'
#coding ="gb18030"
# 原始語料
source_corpus_text = 'santi.txt'
# 是每個詞的向量維度
size = 10
# 是詞向量訓練時的上下文掃描視窗大小,視窗為5就是考慮前5個詞和後5個詞
window = 5
# 設定最低頻率,預設是5,如果一個詞語在文件中出現的次數小於5,那麼就會丟棄
min_count = 1
# 是訓練的程序數,預設是當前執行機器的處理器核數。
workers = multiprocessing.cpu_count()
# 切詞語料
train_corpus_text = 'words.txt'
# w2v模型檔案
model_text = 'w2v_size_{0}.model'.format(size)
# 切詞 @TODO 切詞後註釋
segment_text(source_corpus_text, train_corpus_text, coding, punctuation)
# w2v訓練模型 @TODO 訓練後註釋
sentences = word2vec.Text8Corpus(train_corpus_text)
model = word2vec.Word2Vec(sentences=sentences, size=size, window=window, min_count=min_count, workers=workers)
model.save(model_text)
# 載入模型
model = gensim.models.Word2Vec.load(model_text)
g= open("words.txt","r") #設定檔案物件
std= g.read() #將txt檔案的所有內容讀入到字串str中
g.close() #將檔案關閉
cc=std.split(' ')
dd=[]
kkl=dict()
'''
將每個詞語向量化,並且append 在dd中,形成一個二維陣列
並形成一個字典,index是序號,值是漢字
'''
for p in range(len(cc)):
hk=cc[p]
if hk in model:
vec=list(model.wv[hk])
dd.append(vec)
kkl[p]=hk
#將二維陣列轉化成numpy
dd1=np.array(dd)
from sklearn.cluster import KMeans
estimator = KMeans(n_clusters=100) # 構造聚類器
estimator.fit(dd1) # 聚類
label_pred = estimator.labels_ # 獲取聚類標籤
#index 是某條向量的序號,值是分類號
index1=list(range(len(dd1)))
vc=pd.Series(label_pred,index=index1)
aa = collections.Counter(label_pred)
v = pandas.Series(aa)
v1=v.sort_values(ascending=False)
for n in range(10):
vc1=vc[vc==v1.index[n]]
vindex=list(vc1.index)
kkp=pd.Series(kkl)
print('第',n,'類的前10個數據')
ffg=kkp[vindex][:10]
ffg1=list(set(ffg))
print(ffg1)
第 0 類的前10個數據
['商討', '合集\u200b', '連載', '劉慈欣簡介', '無奈', '編輯', '事先', '題材', '一二三', '今年']
第 1 類的前10個數據
['的']
第 2 類的前10個數據
['本書', '活', '舉', '作者', '看做', '沒想到', '朋友', '見面', '主人公', '十分之一']
第 3 類的前10個數據
['延續', '雖', '球狀', '更是', '佔', '文革', '部', '冷酷']
第 4 類的前10個數據
[nan, '物理學家', '閃電', '怎樣', '一年', '一時', '往事', '關於', '卻是']
第 5 類的前10個數據
['人類文明', '一段', '試圖', '光年', '重新', '星空', '死亡', '內容']
第 6 類的前10個數據
['不了', '大家', '寫', '仔細', '有時', '空靈', '許多', '如何', '966', '心中']
第 7 類的前10個數據
['精神', '故事', '科幻', '方式', '永遠', '之前']
第 8 類的前10個數據
['裡面', '冷兵器', '了', '自己', '立刻', '中', '已', '頂上']
第 9 類的前10個數據
['在', '的']
相關推薦
python 文字聚類演算法
三體下載 將下載的檔案重新命名為santi.txt,放在檔案的目錄下 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed Aug 1 18:31:11 2018 @autho
[python] Kmeans文字聚類演算法+PAC降維+Matplotlib顯示聚類影象
0 前言 本文主要講述以下幾點: 1.通過scikit-learn計算文字內容的tfidf並構造N*M矩陣(N個文件 M個特徵詞); 2.呼叫scikit-learn中的K-means進行文字聚類; 3.使用PAC進行降維處理,每
文字聚類演算法之一趟聚類(One-pass Cluster)演算法的python實現
一、演算法簡介 一趟聚類演算法是由蔣盛益教授提出的無監督聚類演算法,該演算法具有高效、簡單的特點。資料集只需要遍歷一遍即可完成聚類。演算法對超球狀分佈的資料有良好的識別,對凸型資料分佈識別較差。一趟聚類可以在大規模資料,或者二次聚類中,或者聚類與其他演算法結合的情況下,發
看完這篇文章,包你懂得如何用Python實現聚類演算法的層次演算法!
什麼是聚類 將物理或抽象物件的集合分成由類似的物件組成的多個類的過程被稱為聚類。由聚類所生成的簇是一組資料物件的集合,這些物件與同一個簇中的物件彼此相似,與其他簇中的物件相異。聚類分析又稱群分析,它是研究(樣品或指標)分類問題的一種統計分析方法。 聚類分析起源於分類學,但是聚
文字聚類演算法介紹
個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~ -------------------------------------------------------------------------------------------------
python-層次聚類演算法例項-僅針對連續性變數
根據機器學習中“層次聚類演算法”的原理,我用python程式碼實現了一個具體的例子。層次聚類演算法只能單獨處理“連續變數”或者“離散變數”,這個例項中實現了僅針對“連續變數”的例子。 需要在聚類前進行最大最小歸一化、正態歸一化。 資料、下載程式碼可以訪問我的github
【Python】聚類演算法應用 -- 廣告投放效果的離線評估
簡要說明 同樣是在實習期間做的,由於公司去年在廣告的投放上高達10億!!(黑臉=_=!),其中SEM的投放佔比不小,投了四個:baidu、360、搜狗和神馬,其中前三個是WAP和PC端都有投,神馬只投了WAP端。所以我想對歷史投放效果資料進行一下挖掘分析,看是
Python基於Kmeans演算法實現文字聚類的簡單練習
接觸機器學習時間不長,也一直有興趣研究這方面的演算法。最近在學習Kmeans演算法,但由於工作的原因無法接觸到相關的專案實戰。為了理清思路、熟悉程式碼,在參照了幾篇機器學習大神的博文後,做了一個簡單的Kmeans演算法的簡單練習。作為一枚機器學習的門外漢,對於文中的一些錯誤和
【Python例項第18講】affinity propagation聚類演算法
機器學習訓練營——機器學習愛好者的自由交流空間(qq 群號:696721295) 在統計和資料探勘裡,affinity propagation(AP)是一種基於資料點之間的“資訊傳遞”的聚類演算法。與k-means等其它聚類演算法不同的是,AP不需要在聚類前確定或估計類的個
【Python例項第17講】均值偏移聚類演算法
機器學習訓練營——機器學習愛好者的自由交流空間(qq 群號:696721295) 均值偏移(mean shift)是一個非引數特徵空間分析技術,用來尋找密度函式的最大值點。它的應用領域包括聚類分析和影象處理等。 均值偏移演算法 均值偏移是一個迭代地求密度函式極值點的
python實現mean-shift聚類演算法
新建MeanShift.py檔案 import numpy as np # 定義 預先設定 的閾值 STOP_THRESHOLD = 1e-4 CLUSTER_THRESHOLD = 1e-1 # 定義度量函式 def distance(a, b):
k-medoid(k中心點)聚類演算法Python實現
k-means演算法有個很大的缺點,就是對孤立點敏感性太高,孤立點即是脫離群眾的點,與眾不同的點,即在顯示中與其他點不是抱在一團的點。 為了體現兩者的不同,我特意溫習了一下知識,在構造初始點的時候,自己定義加入了幾個孤立點,使用k-means演算法跑的效果如下: 一開始的所有點:(可以看出其
Python實現K-Means聚類演算法
宣告:程式碼的執行環境為Python3。Python3與Python2在一些細節上會有所不同,希望廣大讀者注意。本部落格以程式碼為主,程式碼中會有詳細的註釋。相關文章將會發布在我的個人部落格專欄《Python從入門到深度學習》,歡迎大家關注~
【SciKit-Learn學習筆記】8:k-均值演算法做文字聚類,聚類演算法效能評估
學習《scikit-learn機器學習》時的一些實踐。 原理見K-means和K-means++的演算法原理及sklearn庫中引數解釋、選擇。 sklearn中的KMeans from sklearn.datasets import make_blobs from m
層次聚類演算法的原理及python實現
層次聚類(Hierarchical Clustering)是一種聚類演算法,通過計算不同類別資料點間的相似度來建立一棵有層次的巢狀聚類樹。在聚類樹中,不同類別的原始資料點是樹的最低層,樹的頂層是一個聚類的根節點。 聚類樹的建立方法:自下而上的合併,自上而下的分裂。(這裡介紹第一種) 1.2 層次聚類的合
聚類演算法——python實現SOM演算法
演算法簡介 SOM網路是一種競爭學習型的無監督神經網路,將高維空間中相似的樣本點對映到網路輸出層中的鄰近神經元。 訓練過程簡述:在接收到訓練樣本後,每個輸出層神經元會計算該樣本與自身攜帶的權向量之間的距離,距離最近的神經元成為競爭獲勝者,稱為最佳匹配單元。然
python機器學習:K-means聚類演算法
為了更好構建關於機器學習的整體架構,多快好省的學好機器學習,計劃提綱挈領的總結一遍,從演算法的執行流程、虛擬碼流程構建、python程式碼實現、呼叫sklearn機器學習庫相關函式實現功能等方面論述,以便以後自己複習和備查,下面先從k-means演算法開始。 一
用Python開始機器學習(10:聚類演算法之K均值)
我們之前接觸的所有機器學習演算法都有一個共同特點,那就是分類器會接受2個向量:一個是訓練樣本的特徵向量X,一個是樣本實際所屬的型別向量Y。由於訓練資料必須指定其真實分類結果,因此這種機器學習統稱為有監督學習。然而有時候,我們只有訓練樣本的特徵,而對其型別一無所知。這種情況,我
python機器學習案例系列教程——聚類演算法總結
全棧工程師開發手冊 (作者:欒鵬) 一、什麼是聚類? 聚類(Clustering):聚類是一個人們日常生活的常見行為,即所謂“物以類聚,人以群分”,核心的思想也就是聚類。人們總是不斷地改進下意識中的聚類模式來學習如何區分各個事物和人。
K-means和PAM聚類演算法Python實現及對比
K-means(K均值劃分)聚類:簡單的說,一般流程如下:先隨機選取k個點,將每個點分配給它們,得到最初的k個分類;在每個分類中計算均值,將點重新分配,劃歸到最近的中心點;重複上述步驟直到點的劃歸不再改變。下圖是K-means方法的示意。 PAM