gengyanpeng's csdn blog
sci-kit learn提供了相應的類和API,非常方便簡單。
最簡單的應用就是一句話:
from sklearn.cluster import DBSCAN
clf = DBSCAN(eps=0.3, min_samples=10).fit(X)
其中clf就是最終的分類器,而X是輸入資料。
輸入引數展開說:
class sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, algorithm=’auto’, leaf_size=30, p=None, random_state=None)
eps:點之間的間距,大於這個間距的就不算一個簇了。
min_samples:可以算作核心點的高密度區域的最少點個數。
metric:距離公式,可以用預設的歐式距離,還可以自己定義距離函式。
algorithm:發現近鄰的方法,是暴力brute,二維空間的距離樹kd_tree還是球狀樹形結構ball_tree。這個引數主要是為了降低計算複雜度的,可以從O(N^2)降到O(n*log(n))。換句話說,無論哪種演算法都會達到最後的結果,影響的只是效能。
leaf_size:配合兩種_tree演算法的。
random_state:不用。
結果展開說:
labels_:所有點的分類結果。無論核心點還是邊界點,只要是同一個簇的都被賦予同樣的label,噪聲點為-1.
core_sample_indices_:核心點的索引,因為labels_不能區分核心點還是邊界點,所以需要用這個索引確定核心點。
使用心得:
對於文字分類問題,距離計算一般採用”cosin”餘弦相似度來度量文字的遠近。由於文字分類的權重矩陣樣本大且稀疏,計算方法只能採用algorithm = brute