均值漂移

本文详细介绍并展示了如何使用Python的sklearn库实现MeanShift聚类算法。从数据准备、带宽估算到模型训练,最后通过可视化展示聚类效果,为读者提供了完整的实践流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import pandas as pd
import matplotlib.pylab as plt
import matplotlib
from sklearn import datasets
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
data=pd.read_csv('010-data_multivar.csv',header=None)
# print(data)

#拆分数据
dataset_X,dataset_y=data.iloc[:,:-1],data.iloc[:,-1]
dataset_X=dataset_X.values
dataset_y=dataset_y.values

 

#估算带宽
from sklearn.cluster import estimate_bandwidth,MeanShift
# 数据集,quantile:分位数,n_samples:使用的样本大小
bandwidth = estimate_bandwidth(dataset_X,quantile=0.05,n_samples=len(dataset_X))
print('带宽:{}'.format(bandwidth))

 

# 初始化聚类模型,带宽,网络化数据点(加速模型速度)
meanshift = MeanShift(bandwidth=bandwidth,bin_seeding=True)
meanshift.fit(dataset_X)

print(meanshift.cluster_centers_) # 获取所有质心坐标
print(meanshift.labels_) # 获取所有标签

 

# 数据可视化
def visual_meanshift_effect(meanshift,dataset):
assert dataset.shape[1]==2,'only support dataset with 2 features'
X=dataset[:,0]
Y=dataset[:,1]
X_min,X_max=np.min(X)-1,np.max(X)+1
Y_min,Y_max=np.min(Y)-1,np.max(Y)+1
X_values,Y_values=np.meshgrid(np.arange(X_min,X_max,0.01),
np.arange(Y_min,Y_max,0.01))
# 预测网格点的标记
predict_labels=meanshift.predict(np.c_[X_values.ravel(),Y_values.ravel()])
predict_labels=predict_labels.reshape(X_values.shape)
plt.figure()
plt.imshow(predict_labels,interpolation='nearest',
extent=(X_values.min(),X_values.max(),
Y_values.min(),Y_values.max()),
cmap=plt.cm.Paired,
aspect='auto',
origin='lower')

# 将数据集绘制到图表中
plt.scatter(X,Y,marker='v',facecolors=None',edgecolors='k',s=30)

# 将中心点绘制到图中
centroids=meanshift.cluster_centers_
plt.scatter(centroids[:,0],centroids[:,1],marker='o',
s=100,linewidths=2,color='k',zorder=5,facecolors='b')
plt.title('MeanShift effect graph')
plt.xlim(X_min,X_max)
plt.ylim(Y_min,Y_max)
plt.xlabel('feature_0')
plt.ylabel('feature_1')
plt.show()

visual_meanshift_effect(meanshift,dataset_X)

 

 

转载于:https://www.cnblogs.com/txb1999/p/10738495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值