聚类算法的原理
聚类
聚类指的是没有目标函数情况下对一组数据分类,根据聚类结果确定最后的分类种数。SVM支持向量机分类,决策树分类等学习算法都是根据目标值学习模型。所以这里需要多次迭代学习,可以理解为用历史数据作为模型训练的目标函数
kmeans 算法原理
假定一个划分的簇数n,任选k个样本作为簇中心
根据样本与簇的距离相似度划分样本
重新计算簇中心
不断重复这一过程直到每个簇中心点不再变化
核心代码
from sklearn.cluster import KMeans
kmeans = KMeans(n__clusters)#模型初始化
kmeans.fit(X)#模型学习
模型评估
ARI 系数(有分类标签的数据集)
adjusted rand index
metrics.adjusted_rand_score(y, kmeans.labels_)
取值范围【0,1】越大聚类效果越好
from sklearn import metrics
#将类名转换为整数值
data.loc[ data['class'] == 'Iris-setosa', 'class' ] = 0
data.loc[ data['class'] == 'Iris-versicolor', 'class' ] = 1
data.loc[ data['class'] == 'Iris-virginica', 'class' ] = 2
#y = data['class'].values.astype(int)
metrics.adjusted_rand_score(y, kmeans.labels_)
轮廓系数
考虑聚类结果的簇内凝聚度和簇间分离度
取值范围【-1,1】越大聚类效果越好
metrics.silhouette_score( X, kmeans.labels_, metric='euclidean' )
基础补充
取数
data.iloc[:,0:1]#表示取第一列,第一列不从索引列算起
data[:5]#取前5行
索引设置
set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
data.set_index(keys=['sepal length'],inplace=True)#设置索引列
data.reset_index(inplace=True)#重置索引列 0-n
确定某一列的取值种数
data['class'].unique()