机器学习聚类

机器学习聚类

DBSCAN

模型调参

from sklearn.cluster import DBSCAN
# 构建空列表,用于保存不同参数组合下的结果
res = []
# 迭代不同的eps值
for eps in np.arange(0.001,1,0.05):
    # 迭代不同的min_samples值
    for min_samples in range(2,10):
        dbscan = DBSCAN(eps = eps, min_samples = min_samples)
        # 模型拟合
        dbscan.fit(train2)
        # 统计各参数组合下的聚类个数(-1表示异常点)
        n_clusters = len([i for i in set(dbscan.labels_) if i != -1])
        # 异常点的个数
        outliners = np.sum(np.where(dbscan.labels_ == -1, 1,0))
        # 统计每个簇的样本个数
        stats = str(pd.Series([i for i in dbscan.labels_ if i != -1]).value_counts().values)
        res.append({'eps':eps,'min_samples':min_samples,'n_clusters':n_clusters,'outliners':outliners,'stats':stats})
# 将迭代后的结果存储到数据框中        
df = pd.DataFrame(res)

在这里插入图片描述

训练模型

from sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.preprocessing import StandardScaler

sop1=sop_1[[1,2,3,4]]
db=DBSCAN(eps=20,min_samples=3).fit(sop1)
labels=db.labels_
a['cluster_db']=labels
a=a.sort_values('cluster_db')
a.to_csv('../sop1_desc.csv')

print(pd.plotting.scatter_matrix(sop_1, c=a.cluster_db,figsize=(10,10), s=100))

在这里插入图片描述

模型评估:

from sklearn import metrics
score = metrics.silhouette_score(sop1,a.cluster_db)
print(score)

KMeans

寻找最优k值

from sklearn.cluster import KMeans
from sklearn import metrics
# 构造自定义函数,用于绘制不同k值和对应轮廓系数的折线图
def k_silhouette(X, clusters):
    K = range(2,clusters+1)
    # 构建空列表,用于存储个中簇数下的轮廓系数
    S = []
    for k in K:
        kmeans = KMeans(n_clusters=k)
        kmeans.fit(X)
        labels = kmeans.labels_
        
        # 调用字模块metrics中的silhouette_score函数,计算轮廓系数
        S.append(metrics.silhouette_score(X, labels, metric='euclidean'))

    # 中文和负号的正常显示
    plt.rcParams['font.sans-serif'] = [u'SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    # 设置绘图风格
    plt.style.use('ggplot')    
    # 绘制K的个数与轮廓系数的关系
    plt.plot(K, S, 'b*-')
    plt.xlabel('簇的个数')
    plt.ylabel('轮廓系数')
    # 显示图形
    plt.show()
    
# 自定义函数的调用(指定原始数据和选取范围)
k_silhouette(frequency_matrix, 15)

在这里插入图片描述

抽取部分数据查看聚类效果

from sklearn.cluster import KMeans
estimator = KMeans(n_clusters=3)#构造聚类器,构造一个聚类数为3的聚类器
estimator.fit(train2)#聚类
label_pred = estimator.labels_ #获取聚类标签
centroids = estimator.cluster_centers_ #获取聚类中心
inertia = estimator.inertia_ # 获取聚类准则的总和
mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']
#这里'or'代表中的'o'代表画圈,'r'代表颜色为红色,后面的依次类推
color = 0
j = 0 
for i in label_pred:
    plt.plot([train2.values[j:j+1,0]], [train2.values[j:j+1,1]], mark[i], markersize = 5)
    j +=1
plt.show()

在这里插入图片描述

模型评估

from sklearn.cluster import KMeans
from sklearn import metrics
estimator = KMeans(n_clusters=3)#构造聚类器,构造一个聚类数为3的聚类器
w=estimator.fit(train2)#聚类
label_pred = w.labels_ #获取聚类标签
centroids = w.cluster_centers_ #获取聚类中心
inertia = w.inertia_ # 获取聚类准则的总和
train2['cluster_db']=w.labels_
a=train2.sort_values('cluster_db')
score = metrics.silhouette_score(train2,train2.cluster_db)
print(score)
机器学习中的聚类算法是一种无监督学习方法,用于将数据集中的样本分成不同的组,使得同一组内的样本具有相似的特征,而不同组之间的样本具有较大的差异。 聚类算法的目标是通过分析数据的相似性和差异性,将数据集划分成不同的类别或簇,以便更好地理解和分析数据。聚类算法通常包括以下几个步骤: 1. 选择距离度量方法:聚类算法通常基于样本之间的距离或相似性来进行聚类。常见的距离度量方法有欧氏距离、曼哈顿距离等。 2. 选择聚类算法:根据数据的性质和需求选择适当的聚类算法。常见的聚类算法有K均值算法、层次聚类算法等。 3. 初始化聚类中心:对于K均值算法等需要选择聚类中心的算法,需要初始化聚类中心。常见的初始化方法有随机选择、采样选择等。 4. 迭代聚类:根据数据样本的距离或相似性进行迭代计算,直到满足停止准则或达到最大迭代次数为止。迭代的过程中,不断更新聚类中心以获得更合理的聚类结果。 5. 聚类评估和结果解释:对于聚类结果,需要进行评估和解释。常见的评估指标有聚类精度、互信息等。 机器学习聚类算法的应用非常广泛,例如在数据挖掘、图像处理、社交网络分析等领域中都有大量的应用。聚类算法可以帮助我们发现数据的隐藏结构、分析数据的特征以及归纳数据集的规律,从而实现更好的数据管理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值