sklearn实战之kmeans(聚类)
程序员文章站
2022-07-14 11:50:17
...
kmeans聚类算法案例
本篇博客只做个人对kmeans算法代码的案例展示
# 常规的导包
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactive='all'
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('seaborn')
plt.rcParams['axes.unicode_minus']=False #设置显示中文后,负号显示受影响。解决坐标轴上乱码问题
plt.rcParams['font.family'] = ['Arial Unicode MS'] #mac用解决中文显示问题
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
#创造数据
X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=42)
# 观察数据的特点
data=pd.DataFrame(X)
data['2']=y
data.columns=['特征1','特征2','标签']
data
# 画图观察数据特点
fp = plt.figure(figsize=(16, 6))
fp.add_subplot(1, 2, 1)
plt.scatter(data.特征1, data.特征2);
fp.add_subplot(1, 2, 2)
plt.scatter(data.特征1, data.特征2, color=data.标签.map({0:'r', 1:'g', 2:'y', 3:'b'}));
用轮廓系数方法调参
from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples
L=[]
for i in range(2,21):
k=i
kmeans=KMeans(n_clusters=k,random_state=666)
kmeans.fit(X)
a=silhouette_score(X,kmeans.labels_)
L.append((k,a))
L
b=pd.DataFrame(L)
b.columns=['k','s']
plt.figure(figsize=(8,6),dpi=100)
plt.plot(b.k,b.s,color='r')
plt.xticks(b.k)
plt.xlabel('k')
plt.ylabel('轮廓系数')
plt.title('kmeans轮廓系数学习曲线');
观察轮廓学习曲线
得到当k=4时聚类效果最好
最后导包建模:
from sklearn.cluster import KMeans
km=KMeans(n_clusters=4,random_state=666)
km.fit(X)
km.labels_
km.fit_predict(X)
那么, 我们什么时候需要predict呢?当数据量太大的时候!其实我们不必使用所有的数据来寻找质心,少量的数据就 可以帮助我们确定质心了。当我们数据量非常大的时候,我们可以使用部分数据来帮助我们确认质心, 剩下的数据 的聚类结果,使用predict来调用。
上一篇: sklearn聚类之—KMeans