資料聚類的簡單應用
資料聚類data
1.聚類時常被用於資料量很大(data-intensive)的應用中。
2. 聚類是無監督學習(unsupervised
learning)的乙個例子。無監督學習演算法並不利用帶有正確答案的樣本資料
進行「訓練」,它們的目的是要在一組資料中找尋某種結構,而這些資料本身並不是我們要找的答案。
3.聚類的結果不會告訴零售商每位顧客可能會買什麼,也不會**新來的顧客適合哪種時尚,聚類演算法的目標是採集資料,然後從中找出不同的陣列。
例如:可以通過聚類來對部落格使用者進行分類
這個說法的假設前提是:我們有眾多的部落格使用者,但這些使用者並沒有顯著的特徵標籤,在這種情況下,如何有效的對這些使用者進行分類。這時候聚類就派上用場了。
基本過程:
1. 構建乙個部落格訂閱源列表
2.利用訂閱源列表建立乙個單詞列表,將其實際用於針對每個部落格的單詞計數。
3.我們利用上述單詞列表和部落格列表來建立乙個文字檔案,其中包含乙個大的矩陣,記錄者針對每個部落格的所有單詞的統計情況。(例如:可以用列對應單詞,用行對應部落格),乙個可用的**如下:
[python] view plain copy
import
feedparser
import re
# returns
title and dictionary of word counts for an rss feed
defgetwordcounts(url):
# parse the feed
d=feedparser.parse(url)
wc={}
# loop over all the entries
for e in d.entries:
if 'summary' in e: summary=e.summary
else: summary=e.description
# extract a list of words
words=getwords(e.title ' ' summary)
for word in words:
wc.setdefault(word,0)
wc[word] =1
return d.feed.title,wc
defgetwords(html):
# remove all the html tags
txt=re.compile(r']
>').sub('',html)
# split words by all non-alpha characters
words=re.compile(r'[^a-z^a-z] ').split(txt)
# convert to lowercase
return [word.lower() for word in words if word!=''] 4.
當然這裡有很多可以減少需要統計的單詞量的技巧,有些常用的習慣性用於可以從這些列表中刪除掉。具體的構建過程這裡省略不談,感興趣的可以參考相關書籍。
5. 進行聚類:這裡有兩種可用的方法
分級聚類:
分級聚類通過連續不斷地將最為相似的群組兩兩合併,直到只剩乙個群組為止,來構造出乙個群組的層級結構。其過程可以參考下圖:
圖:分級聚類的過程
分級聚類基本演算法如下:(這裡省略了一些細節函式,如載入檔案,計算皮爾遜相似度等)
[python] view plain copy
defhcluster(rows,distance=pearson):
distances={}
currentclustid=-1
# clusters are initially just the rows
clust=[bicluster(rows[i],id=i) for i in range(len(rows))]
while len(clust)>1:
lowestpair=(0,1)
closest=distance(clust[0].vec,clust[1].vec)
聚類應用 crap
一。資料準備 1 資料抽取 2 資料淨化 清除資料來源中不正確 空值 不完整等不能達到資料探勘質量要求的資料 3 衍生變數 將變數的取值對映成適合聚類演算法的變數型別 基本來說,聚類演算法都是基於距離的,對於一些不是數值型別的變數,需要轉換一下表達方式 4 異常值處理 異常值指遠遠偏離一般值的資料,...
Spark 聚類應用
spark 機器學習庫提供了包括聚類,分類,回歸,協同過濾,維度約簡等。使用 spark 機器學習庫來做機器學習工作,可 以說是非常的簡單,通常只需要在對原始資料進行處理後,然後直接呼叫相應的 api 就可以實現。spark ml 提供了乙個基於 dataframe 的機器學習工作流式 api 套件...
簡單聚類實驗
今天又試驗了 鄰誤差 4進行聚類。以前覺得比較相鄰兩個畫素的誤差就可以聚類,實測輸出結果卻是那麼差勁。原來相鄰畫素基本都是相似的,對漸變過度的邊緣難以消化。37萬畫素聚類用了0.3秒,統計並生成9張面積最大的聚類則用了約0.2秒 將來有空再改善一下。假如不比相鄰畫素,比較相近的一小片區域效果肯定更好...