聚类尝试-kmeans-step2聚类模型训练及结果可视化

2023-10-29

step1:

https://blog.csdn.net/nikita_zj/article/details/122342746https://blog.csdn.net/nikita_zj/article/details/122342746

1. 数据导入

import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
import pickle
import time
import multiprocessing
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

df_shanghai = pd.read_csv('sh_ershou_clean_v2.csv', index_col = 0)

df_shanghai['year'] = df_shanghai['info'].str.extract('([\d]+)年').astype('float')
df_shanghai['age'] = 2022-df_shanghai.year

df_shanghai.drop(columns = ['longitude', 'dimension', 'year', 'latitude'], inplace = True)

2. 简单查看

cor = df_shanghai[['total_price','unit_price', 'area', 'distance_rg', 'age']].corr()
sns.heatmap(cor, annot = True)

总体上来讲,建房时间越长,每平米价格越大(这块应该是因为建房时间长的总体上在比较市中心的地方),房屋面积越小,距离市中心越近。

3. 聚类模型训练

from sklearn.cluster import KMeans

def TrainCluster(df, model_name=None, start_k=2, end_k=10):
    print('training cluster')
    K = []
    SSE = []
    silhouette_all=[]
    models = [] #保存每次的模型
    for i in range(start_k, end_k):
        start = time.perf_counter ()
        kmeans_model = KMeans(n_clusters=i, random_state=42)
        kmeans_model.fit(df_shanghai_processed)
        SSE.append(kmeans_model.inertia_)  # 保存每一个k值的SSE值
        K.append(i)
        print('{}-prototypes SSE loss = {}'.format(i, kmeans_model.inertia_))
        models.append(kmeans_model) #保存每个k值对应的模型
        end = time.perf_counter ()
        print('Running time: %s Seconds'%(end-start))

    return(K,SSE,models)

K, SSE, models = TrainCluster(df = df_shanghai_processed)

4. 类别k值选择

# 决定选择5
plt.plot(K, SSE)
plt.xlabel('聚类类别数k')
plt.ylabel('SSE')
plt.xticks(K)
plt.title('用肘部法则来确定最佳的k值')
plt.show()

5. 聚类结果可视化

#确定了最佳的k值后:5
best_model = models[K.index(5)]

df_shanghai['labels_'] = best_model.labels_

center = pd.DataFrame(best_model.cluster_centers_ )
center.columns = df_shanghai_processed.columns

# 添加原始值
for col in center.columns:
    col_new = col+'_raw'
    mean = df_shanghai[col].mean()
    std = df_shanghai[col].std()
    center[col_new] = center[col]*std+mean
    print(col_new)

center

 每一簇的中心:

0 4466 地理位置也不太远、4-6万/平方、户型不太大、大多离人广10-25公里
1 2660 市中心大户型
2 2279 郊区大户型, 单价不是太高
3 159 面积有点太大了吧,简单看了下好多5室6室的房子
4 5216 市中心老破小

# 聚类后按类别对各个column绘制分布图
col = ['total_price',  'unit_price', 'area', 'distance_rg', 'age']
fig = plt.figure(figsize = (20,20))
n_col = len(col)
n_labels = 5
for i in range(n_col): #特征个数
    for j in range(n_labels): # 类别个数
        ax = fig.add_subplot(n_col, n_labels, n_labels*i+j+1)
        df_shanghai.loc[df_shanghai.labels_ == j, col[i]].plot(kind = 'hist', bins = 50)
        ax.set_title('label:{},col:{}'.format(j, col[i]))
#         if col[i] == 'unit_price':
#             ax.set_xlim(0, max(df_shanghai.unit_price))
#         if col[i] == 'area':
#             ax.set_xlim(0, max(df_shanghai.area))
#         if col[i] == 'distance_rg':
#             ax.set_xlim(0, max(df_shanghai.distance_rg))
#         if col[i] == 'age':
#             ax.set_xlim(0, max(df_shanghai.age))
plt.show()

# 绘制散点图
colors1 = '#00CED1' #点的颜色
colors2 = '#DC143C'

col1 = 'unit_price'
col2 = 'area'

for label in df_shanghai.labels_.unique():
#     if label != 3:
    if True:
        x = df_shanghai.loc[df_shanghai.labels_ == label, col1]
        y = df_shanghai.loc[df_shanghai.labels_ == label, col2]
        plt.scatter(x, y, label = str(label), alpha = 0.3)

plt.legend()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚类尝试-kmeans-step2聚类模型训练及结果可视化 的相关文章

  • 某网站无法访问原因

    问题 arduino cc 网站以前一直都可以正常访问 但不知是什么原因 后面就不能访问了 但有时偶尔可访问 大部分时间都不能打开完整页面 一直以为该网站是不是挂了或被墙了 但是通过外网的云服务器 使用wget访问该网站 是可以获取页面内容

随机推荐

  • linux 内核poll/select/epoll实现剖析(原理经典)

    转自 https blog csdn net lishenglong666 article details 45536611 poll select epoll的实现都是基于文件提供的poll方法 f op gt poll 该方法利用pol
  • 【OpenGL编程指南】之视图和模型变换

    OpenGL编程指南 之视图和模型变换 照相机比喻 视图变换 确定照相机位置 模型变换 安排场景 确定物体位置 投影变换 选择照相机镜头 调整放大倍数 视口变换 确定照片的大小 通用变换函数 void glMatrixMode GLenum
  • 区块链技术应用学习

    学习导入 今天 以云计算 大数据 人工智能 区块链等为代表的的新一轮科技革命 对金融业 产生着前所未有的影响 新技术正义其独有的渗透性 冲击性 倍增性和创新性推动金融行 业发展到一个全新节点 金融科技人才 是复合型创新人才 需要金融方面掌握
  • Wrong Ramdisk Image Format Ramdisk image is corrupt or invalid

    在学习正点原子的阿尔法开发板时启动内核出错 出现 Wrong Ramdisk Image Format Ramdisk image is corrupt or invalid 报错 原因 因为我是直接复制的 因此中间 那个 格式不对 自己手
  • JavaScript和了解一切的压力,克里斯蒂安·海尔曼

    In this episode of the Versioning Show Tim and David are joined by Christian Heilmann well known developer speaker autho
  • Spring Framework---IOC/DI

    目录 1 Spring框架的主要内容 1 1Spring的发展版本 1 2Spring系统架构 1 核心层 2 AOP层 3 数据层 4 Web层 5 Test层 1 3Spring核心概念 1 3 1IOC Inversion of co
  • XSS-Labs通关(1-18)

    目录 Level1 Level2 Level3 Level4 Level5 Level6 Level7 Level8 Level9 Level10 Level11 Level12 Level13 Level15 Level16 Level1
  • Java获取文件名、文件前缀名、文件类型(文件后缀名)

    获取文件名 方法一 split分割 String fileName E file docx String temp fileName split String fileNameNow temp temp length 1 System ou
  • STM32——SPI通信

    文章目录 SPI Serial Peripheral Interface 概述 SPI的硬件连接 SPI的特点和优势 SPI的常见应用 SPI的工作方式和时序图分析 工作模式 传输模式与时序分析 工作流程 SPI设备的寄存器结构和寄存器设置
  • c++自定义类对象的初始化_类装载器

    一 类的生命周期 类从被加载到虚拟机内存中开始 直到从内存中卸载为止 它的整个生命周期包括了 加载 验证 准备 解析 初始化 使用和卸载这7个阶段 其中 验证 准备和解析这三个部分统称为链接 linking graph LR A 加载 gt
  • RedHat linux 9.1/CentOS linux YUM在线安装用不了? 不会配置Linux的网络安装源?一分钟教你解决!!!

    一 配置本地源 1 新建cdrom目录 root kongd mkdir media cdrom 2 将本地光盘挂载至本地目录 media cdrom下 root kongd mount dev cdrom media cdrom 3 新建
  • Unable to find instance for XXXX

    当你的控制台报了这样的错误 这就是请求的后端服务没启动 联系后端启动后端就行
  • dubbo之RpcContext

    dubbo之RpcContext RpcContext 是一个 ThreadLocal 的临时状态记录器 当接收到 RPC 请求 或发起 RPC 请求时 RpcContext 的状态都会变化 比如 A 调 B B 再调 C 则 B 机器上
  • matlab 判断数组中的元素是否存在,C语言判断数组中是否包含某个元素

    在实际开发中 经常需要查询数组中的元素 例如 学校为每位同学分配了一个唯一的编号 现在有一个数组 保存了实验班所有同学的编号信息 如果有家长想知道他的孩子是否进入了实验班 只要提供孩子的编号就可以 如果编号和数组中的某个元素相等 就进入了实
  • ODTK:来自NVIDIA的旋转框物体检测工具箱

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Jonathan Howe James Skinner 编译 ronghuaiyang 导读 旋转框相比矩形框可以更好的拟合物体 同时标注起来比分割要方便的多 使用来自NVIDI
  • k8s的初始及搭建

    kubernetes k8s 1 初识k8s 1 1 k8s是什么 kubernetes 简称K8s 是用8代替8个字符 ubernete 而成的缩写 是一个开源的 由go语言开发 用于管理云平台中多个主机上的容器化的应用 Kubernet
  • ElasticSearch 搜索引擎

    简称es 是类似于mysql但是专注于搜索的一种数据库 在elastic stack中占据重要地位 倒排索引 我们的数据库都是正向索引 比如根据id查询数据 那么倒排索引是将关键字进行分词 然后将词条和id保存在一张表中 不同数据分词后有相
  • retval释疑

    为了让方法返回一个与 方法的物理HRESULT 不相关的逻辑结果 COM IDL支持retval参数属性 retval属性的含义是 相关联的物理方法参数实际上是操作的逻辑结果 在支持retval的环境中 该参数应该被映射为操作的结果 例如
  • MyCAT 通过Native for MySQL 连接TESTDB 提示:1184 (HY000): Invalid DataSource:0

    问题描述 Windows 安装MyCAT服务 启动MyCAT服务 通过Native for MySQL 连接TESTDB 提示如下错误信息 1184 HY000 Invalid DataSource 0 造成问题原因 没有给root用户授予
  • 聚类尝试-kmeans-step2聚类模型训练及结果可视化

    step1 https blog csdn net nikita zj article details 122342746https blog csdn net nikita zj article details 122342746 1 数