聚類的概念:一種無監督的學習,事先不知道類別,自動將相似的物件歸到同乙個簇中。
應用場景:文件分類器、客戶分類、保險欺詐檢測、 乘車資料分析
其中p=1為曼哈頓距離
p=2為歐氏距離
使用vdm距離:
其中 mu,a,i表示在第i個樣本簇中屬性u上取值為a的樣本數
mu,a表示屬性u上取值為a的樣本數
k為樣本簇數
使用閔科夫斯基距離和vdm的混合
其中nc為有序屬性個數
根據不同屬性的重要性,可使用「加權」距離
①、kmeans演算法
主要思想:
在給定k值和k個初始類簇中心點的情況下,把每個點(亦即資料記錄)分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之後,根據乙個類簇內的所有點重新計算該類簇的中心點(取平均值),然後再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數。
k值選取原則:評價效果好且結果可解釋
初始點的選取原則: 盡可能遠
優點:1、解決聚類問題的經典演算法,簡單
2、當處理大資料集時,該演算法保持可伸縮性和高效率
3、當簇近似為高斯分布時,它的效果較好
缺點:1、在簇的平均值可被定義的情況下才能使用,可能不適用於某些應用
2、必須實現給出k(要生成簇的數目),而且對初值敏感,即對於不同的初值,可能會導致不同結果
3、不適合非凸形狀的簇或者大小差別很大的簇
4、對雜訊和孤立點敏感
②、學習向量量化(lvq)
③、高斯混合聚類
亞洲足球隊實力聚類
import numpy as np
import pandas as pd
from pandas import series, dataframe
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from sklearn.cluster import kmeans
from mpl_toolkits.mplot3d import axes3d
# 匯入資料集
data = pd.read_csv('asiazoo.txt', header=none)
data.columns = ["國家","2006世界盃","2010世界盃","2007亞洲盃"]
x = data.iloc[:,1:]
km = kmeans(n_clusters=3)
y_ = km.fit_predict(x)
sns.set_style(style='white')
plt.rcparams['font.sans-serif'] = ['simhei']
plt.rcparams['axes.unicode_minus'] = false
# 繪製聚類後的散點圖
plt.figure(figsize=(10,6))
ax = plt.subplot(projection = '3d')
ax.scatter3d(data['2006世界盃'], data['2010世界盃'], data['2007亞洲盃'], s=200, c= y_, alpha=1)
ax.set_xlabel('2006世界盃')
ax.set_ylabel('2010世界盃')
ax.set_zlabel('2007亞洲盃')
plt.show()
# 檢視每個類的球隊
data['類別'] = y_
for _, indexes in data.groupby('類別').groups.items():
countrys = data.loc[indexes, '國家']
for country in countrys:
print(country, end=' ')
print()
資料集:
散點圖:
每個類別球隊:
機器學習筆記12 聚類
在 無監督學習 中,訓練樣本的標記資訊是未知的,目標是通過對無標記訓練樣本的學習來揭示資料的內在性質及規律。此類學習任務中研究最多的是聚類。此外,無監督學習還有密度估計 異常檢測等。常見的聚類包括原型聚類 密度聚類 層次聚類等。原型聚類 此類演算法假設聚類結果能通過一組原型刻畫。通常情形下,演算法先...
機器學習 聚類
聚類的過程是將樣本分類的過程,聚類屬於無監督學習,資料中沒有label,訓練之前並不知道樣本屬於哪乙個類別,需要借鑑經驗值。kmeans聚類 模型假設 資料的分布是k個 sigma 相同的高斯分布的,每個分布裡有 n 1,n 2,n k 個樣本,其均值分別是 mu 1,mu 2,mu k 那麼每個樣...
機器學習聚類
模型調參 from sklearn.cluster import dbscan 構建空列表,用於儲存不同引數組合下的結果 res 迭代不同的eps值 for eps in np.arange 0.001,1 0.05 迭代不同的min samples值 for min samples in rang...