亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不使用閾值對值數組進行聚類

不使用閾值對值數組進行聚類

小怪獸愛吃肉 2023-07-11 10:39:58
我想將每個值代表一個錯誤的一維數據集分成 2 段:具有最小值的簇所有其他人例子:X = np.array([1, 1.5, 0.4, 1.1, 23, 24, 22.5, 21, 20, 25, 40, 50, 50, 51, 52, 53]).reshape(-1, 1)在這個小示例中,我想將集群中的前 4 個值重新分組,而忽略其他值。我不想要基于閾值的解決方案。關鍵是興趣簇質心并不總是具有相同的值??赡苁?e-6,也可能是1e-3,也可能是1。我的想法是使用 k 均值聚類算法,如果我確實知道數據中存在多少個聚類,該算法就會很好地工作。在上面的例子中,數字是 3,一個大約 1(感興趣的簇),一個大約 22,一個大約 51。但遺憾的是,我不知道簇的數量......簡單地搜索 2 個簇是不會的導致數據集按預期分割。kmeans = KMeans(n_clusters=2, random_state=0).fit(X) kmeans.labels_返回一個太大的簇 1,其中還包括以 22 為中心的簇的數據。array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0])我確實找到了一些關于選擇 k 的方法的有趣答案,但它使算法變得復雜,我覺得必須有更好的方法來解決這個問題。我愿意接受任何可以在X所提供的數組上工作的建議和示例。
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

您可能會發現AffinityPropagation這里很有用,因為它不需要指定要生成的簇的數量。然而,您可能需要調整 和damping factor,preference以便它產生預期的結果。

在提供的示例中,默認參數似乎可以完成這項工作:

from sklearn.cluster import AffinityPropagation


X = np.array([1, 1.5, 0.4, 1.1, 23, 24, 22.5,?

? ? ? ? ? ? ? 21, 20, 25, 40, 50, 50, 51, 52, 53]).reshape(-1, 1)

ap = AffinityPropagation(random_state=12).fit(X)

y = ap.predict(X)

print(y)

# array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], dtype=int64)

要從 獲取各個簇X,您可以使用以下方法建立索引y:


first_cluster = X[y==0].ravel()

first_cluster

# array([1. , 1.5, 0.4, 1.1])

second_cluster = X[y==1].ravel()

second_cluster

# array([23. , 24. , 22.5, 21. , 20. , 25. ])


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號