kmeans聚类分析——Python实现

注意点:一定要处理异常值和去量纲

导入库

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

一、数据概况

异常值
缺失值

二、单变量分析

  • 创建新变量
airbnb['year_since_account_created']=airbnb['date_account_created'].apply(lambda x:2019-x.year)
  • 类别型变量处理
store=pd.get_dummies(store)
  • 日期型变量处理
airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created']) # 将注册日期转变为日期时间格式
  • 删除对业务分析没有实际作用的变量
drop(['变量名'],axis=1,inplace=True)

三、数据准备

1.相关分析

mb1.columns
mobike.corr() # 相关分析
sns.heatmap(df.corr()) # 使用热力图进行可视化呈现

2.选择变量

airbnb_5=airbnb[['age','web','moweb','ios','android']]
X = dataset.iloc[:, [3, 4]].values#选择最后两栏作为分群依据

3.数据标准化:(收入-收入均值)/收入标准差

from sklearn.preprocessing import scale
airbnb_5=airbnb[['age','web','moweb','ios','android']]
x=pd.DataFrame(scale(airbnb_5)) # 全部变量
tired['speed_scaled']=preprocessing.scale(tired.vehicle_speed) # 单个变量

四、评估聚类个数——肘部法则

快速下降趋于平缓下降的转折点,为聚类最好的情况

from sklearn.cluster import KMeans
sse = []
for i in range(1,11): # 循环使用不同k测试结果
	kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
	kmeans.fit(df[[,,,]])
	sse.append(kmeans.inertia_)  # kmeans.inertia_是每类数据到其中心点的距离之和。值越小,聚类越好。类别越多,k越大,值越小。
	
plt.plot(range(1,11), sse)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.show()

五、建模

from sklearn import cluster
model=cluster.KMeans(n_clusters=3,random_state=10)# 先尝试分为三类
model.fit(x)
df['cluster']=model.labels_ # 提取分群标签,存入dataframe

六、模型评估,评估变量选择和群数对分群效果的影响

(一)使用silhouette score轮廓系数,评估模型效果

from sklearn import metrics
x_cluster=model.predict(x) # 个体与群的距离
metrics.silhouette_score(x,x_cluster) # 评分越高,个体与群越近;评分越低,个体与群越远

(二)使用groupby函数,评估单个变量维度的分群效果

df1=df[['x1','x2','x3','x4','x5']]
df1.groupby(['cluster'])['x1'].describe()

(三)散点图,评估两个变量维度的分群效果

sns.scatterplot(x='x1',y='x2',hue='cluster',data=df1,palette='Set2') # palette调色板,hue分组

(四)评估每个群最有区分度的变量

centers=pd.DataFrame(model.cluster_centers_)
centers.head()

理解行和列:
行:每一行是系统认为的群组,即0群、1群、2群;
列:重点关注每一列的数据,标注出绝对值较大的数字,如果人群在某个特征变量上数据的绝对值较大,就说明这个人群在这个特征上有较明显的区分度
结合业务,解读各个群组的特征
例如,下图中0群大多通过H5页面下单,不使用app;2群可能是果粉,是ios重度用户,不怎么使用web。

六、模型优化

改变分类数量,重复建模步骤,并比较轮廓系数,不断优化模型

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python实现Kmeans聚类算法的代码如下: ```python from sklearn.cluster import KMeans import numpy as np # 假设你的图像数据存储在一个名为X的数组中,每个样本是一个表示像素值的向量 # X的形状为(样本数量,像素数量) # 初始化KMeans模型 kmeans = KMeans(n_clusters=k) # 训练模型 kmeans.fit(X) # 获取每个样本的聚类标签 labels = kmeans.labels_ # 获取聚类中心 centroids = kmeans.cluster_centers_ ``` 你可以使用`sklearn.cluster.KMeans`类来实现Kmeans聚类算法。首先,你需要导入相关的库,并根据你的数据初始化一个KMeans模型。然后,使用`fit`方法对模型进行训练,并使用`labels_`属性获取每个样本的聚类标签。最后,使用`cluster_centers_`属性获取聚类中心。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python实现Kmeans聚类算法](https://download.csdn.net/download/weixin_38750829/12870422)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [机器学习实战之路 —— 6 聚类算法](https://blog.csdn.net/weixin_38135620/article/details/113888367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值