Python Kmeans聚類全流程,aribnb

2021-10-12 04:56:31 字數 1992 閱讀 6889

資料清洗

調整年齡的範圍

airbnb=airbnb[airbnb['age']<=80]

airbnb=airbnb[airbnb['age']>=18]

轉變日期的格式,轉為對分析有用的日期形式

呼叫to_datetime 轉化為日期時間格式

airbnb['date_account_created']=pd.to_datetime(airbnb['date_account_created'])
計算註冊至今的年份

用get_dummies將性別這一類別變數轉變為啞變數

airbnb=pd.get_dummies(airbnb)
用 表.drop(columns=[『1』,『2』]) 刪除處理前無用的列

airbnb.drop(columns=['date_account_created','date_first_booking'])
標準化,k的選擇和聚類

取出要聚類用的列建立乙個新錶

airbnb_new=airbnb[['age','web','moweb','ios','android']]
用sklearn中的預處理preprocessing中的標準化工具scale對資料標準化

from sklearn.preprocessing import scale

x=pd.dataframe(scale(airbnb_new))

引入聚類模組和matplotlib

from sklearn.cluster import kmeans

import matplotlib.pyplot as plt

肘部法找出最佳k

新增list,for迴圈

sse=

for i in range(1,11):

kmeans=kmeans(n_clusters=i,init='k-means++',random_state=42)

kmeans.fit(x)

作圖

plt.plot(range(1,11),sse)

plt.title('elbow')

plt.xlabel('number')

plt.ylabel('sse')

plt.show()

將陣列聚為三類

kmeans=kmeans(n_clusters=3,init='k-means++',random_state=42)

y_kmeans=kmeans.fit_predict(x)

print(y_kmeans)

視覺化

建立聚類後的標籤列,

airbnb_new['cluster']=kmeans.labels_

sns.scatterplot(x='age',y='ios',hue='cluster',data=airbnb_new)

聚類後describe資料的分布情況

airbnb_new.groupby(['cluster'])['age'].describe()
模型結果評價

呼叫metrics庫的輪廓係數silhouette coefficient 評價

【-1,1】 評分越高,結果越好

from sklearn.metrics import silhouette_score

x_cluster=kmeans.fit_predict(x)

score=silhouette_score(x,x_cluster)

print(score)

Python KMeans聚類問題分析

今天用python實現了一下簡單的聚類分析,順便熟悉了numpy陣列操作和繪圖的一些技巧,在這裡做個記錄。from pylab import from sklearn.cluster import kmeans 利用numpy.append 函式實現matlab多維陣列合併的效果,axis 引數值為...

聚類之層次聚類 基於劃分的聚類(

目錄 一層次聚類 層次聚類的原理及分類 層次聚類的流程 層次聚類的優缺點 二劃分聚類法k means kmeans演算法的原理 k均值的優缺點及分類 k means與dbscan的區別 k means注意問題 三基於密度的聚類 dbscan的概念 簇的生成原理及過程 根據資料點的密度分為三類點 db...

k means聚類,密度聚類,層次聚類優缺點

k means 優點 1,簡單,易於理解和實現 2,時間複雜度低 缺點 1,需要對均值給出定義,2,需要指定要聚類的數目 3,一些過大的異常值會帶來很大影響 4,演算法對初始選值敏感 5,適合球形聚類 層次聚類 優點 1,距離和規則的相似度容易定義,限制少 2,不需要預先制定聚類數 3,可以發現類的...