聚类算法 sklearn k_means (返回一维数据的最优聚类)

from sklearn.cluster import KMeans
import numpy
import collections
import pandas
from sklearn import metrics

def k_means(pp1,clus):
    
    
    pv=list(pp1)
    if len(set(pv))>clus:
        gf=numpy.array([pv]).T
        estimator = KMeans(n_clusters=clus)#构造聚类器
        
        estimator.fit(gf)#聚类
        label_pred = estimator.labels_ #获取聚类标签
        
        #print(label_pred)
        aa=collections.Counter(label_pred)
        
        print('aa=',aa)
        v=pandas.Series(aa)
        gg=list(v)
        index_max=gg.index(max(gg))
        
        print('index_max=',index_max)
        
        centroids = estimator.cluster_centers_ #获取聚类中心
        
        print('centroids=',centroids)
        #inertia = estimator.inertia_ # 获取聚类准则的总和
        center=centroids[index_max][0]
        return ((center))
    else:
        return (pp1.mean())
    
    
def k_means_label(a):
    
    
    def km_index(k):
  
        pv=list(a)
        
        gf=numpy.array([pv]).T
            
        #from sklearn.cluster import KMeans
        y_pred = KMeans(n_clusters=k, random_state=9).fit_predict(gf)
        
        index=metrics.silhouette_score(gf, y_pred, metric='euclidean')
        
        print('index',index)
        
        return index
    cs=list(range(2,6))
    
    df=list(map(km_index,cs))
    
    df1=pandas.Series(df,index=cs)
    df2=df1.sort_values(ascending=False)
    
    df3=list(df2.index)[0]
    
    return df3


a=numpy.random.randint(0,1000,10)

cc=k_means_label(a)

b=k_means(a,cc)

print('b=',b)

index 0.804055967401
index 0.805649685362
index 0.65899543985
index 0.517110170591
aa= Counter({0: 5, 1: 3, 2: 2})
index_max= 0
centroids= [[ 160.8]
 [ 610. ]
 [ 824.5]]
b= 160.8
K-Means 聚类算法是一种常用的无监督学习算法,它可以将一组数据自动分为不同的簇。在这个算法中,我们需要指定簇的个数,然后算法将数据分为指定个数的簇,使得每个簇内的数据点相似度尽可能高,不同簇之间的相似度尽可能低。 下面我们使用 K-Means 聚类算法实现鸢尾花数据聚类。首先,我们加载鸢尾花数据集: ```python from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target ``` 然后我们使用 Scikit-learn 中的 KMeans 类进行聚类,代码如下: ```python from sklearn.cluster import KMeans k = 3 # 簇的个数 kmeans = KMeans(n_clusters=k) kmeans.fit(X) ``` 这里我们指定了簇的个数为 3,然后使用 KMeans 类进行拟合。拟合完成后,我们可以用 predict 方法来预测每个数据点所属的簇: ```python y_pred = kmeans.predict(X) ``` 最后,我们可以将聚类结果可视化出来,代码如下: ```python import matplotlib.pyplot as plt plt.scatter(X[:, 0], X[:, 1], c=y_pred) plt.xlabel('Sepal Length') plt.ylabel('Sepal Width') plt.show() ``` 这里我们将数据集的前两个特征绘制在二维坐标系中,用不同的颜色表示不同的簇。运行上述代码,可以得到如下的聚类结果: ![k-means-iris](https://img-blog.csdnimg.cn/20210513190238234.png) 从图中可以看出,经过 K-Means 聚类算法处理后,数据被分为了三个簇,每个簇内的数据点比较相似。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值