【机器学习】4.1.DBSCAN聚类

包含全部示例的代码仓库见GIthub

1 导入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
from sklearn.cluster import DBSCAN

2 K-means 算法

2.1 数据准备

data_list = []
for i in range(1,8):
    try:
        data = pd.read_csv('./dataset/lianjia{}.csv'.format(i), encoding='gbk')
    except:
        data = pd.read_csv('./dataset/lianjia{}.csv'.format(i))
    finally:
        data_list.append(data)
data = pd.concat(data_list)
data = data.dropna()
data.cjdanjia = np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x:x/10000),2)
data1 = data[data.cjxiaoqu.str.contains('龙锦苑东一区 3室2厅 124平')]
data1
# output
	cjtaoshu	mendian	cjzongjia	zhiwei	haoping	cjdanjia	cjxiaoqu	xingming	cjzhouqi	biaoqian	cjlouceng	cjshijian	congyenianxian	bankuai
384	31	龙跃店	240.0	店经理	94% 226	1.93	龙锦苑东一区 32124平	孙阿伟	41	房东信赖;销售达人;带看活跃	南 北/高楼层/6层	签约时间:2015-12-16	3-4年	回龙观
3778	23	流星花园店	204.0	经纪人	97% 104	1.64	龙锦苑东一区 32124平	唐生	45	房东信赖;销售达人	南 北/高楼层/6层	签约时间:2012-12-22	5年以上	回龙观
6805	34	上北社区一店	260.8	店经理	95% 392	2.10	龙锦苑东一区 32124平	盛起云	41	房东信赖;销售达人;带看活跃	南 北/中楼层/6层	签约时间:2014-02-22	3-4年	回龙观
10369	43	龙泽城铁店	290.0	店经理	99% 245	2.34	龙锦苑东一区 32124平	苑文超	30	房东信赖;销售达人	南 北/高楼层/6层	签约时间:2016-03-21	5年以上	回龙观
12006	45	和谐家园社区店	226.0	店经理	97% 183	1.82	龙锦苑东一区 32124平	张晓维	65	房东信赖;销售达人;带看活跃	南 北/高楼层/6层	签约时间:2013-03-15	5年以上	回龙观
...	...	...	...	...	...	...	...	...	...	...	...	...	...	...
33919	16	龙锦东一店	243.5	店经理	96% 121	1.96	龙锦苑东一区 32124平	李志杨	23	房东信赖	南 北/低楼层/6层	签约时间:2014-08-24	3-4年	回龙观
33921	16	龙锦东一店	170.0	店经理	96% 121	1.37	龙锦苑东一区 32124平	李志杨	23	房东信赖	南 北/低楼层/6层	签约时间:2014-07-30	3-4年	回龙观
36048	4	龙腾东店	318.0	高级经纪人	98% 107	2.56	龙锦苑东一区 32124平	刘亚茹	29	带看活跃	南 北/中楼层/6层	签约时间:2016-04-16	<1年	回龙观
36144	22	龙泽苑西区店	218.0	高级经纪人	98% 112	1.76	龙锦苑东一区 32124平	王洪洋	68	房东信赖	南 北/低楼层/6层	签约时间:2012-12-03	5年以上	回龙观
37784	13	云趣园小区店	234.0	高级经纪人	94% 92	1.89	龙锦苑东一区 32124平	李飞玲	32	带看活跃	南 北/低楼层/6层	签约时间:2013-06-17	4-5年	回龙观
plt.scatter(range(1,len(data1)+1), data1.cjdanjia)

在这里插入图片描述

2.2 模型构建

y_pred = KMeans(n_clusters=2).fit_predict(data1[['cjdanjia']])
y_pred
# output
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

结果绘图

plt.scatter(range(1,len(data1)+1), data1.cjdanjia, c = y_pred)

在这里插入图片描述

2.3 数据准备二

data2 = data[data.cjxiaoqu.str.contains('龙锦苑东五区 3室2厅 124平')]
plt.scatter(range(1,len(data2)+1), data2.cjdanjia)

在这里插入图片描述

2.4 模型构建二

y_pred = KMeans(n_clusters=2).fit_predict(data2[['cjdanjia']])

从结果可以看出 K-means 对于这种数据的分类效果并不好

plt.scatter(range(1,len(data2)+1), data2.cjdanjia, c = y_pred)

在这里插入图片描述

3 DBSCAN 算法

y_pred = DBSCAN().fit_predict(pd.DataFrame(data2.cjdanjia))
plt.scatter(range(1,len(data2)+1), data2.cjdanjia, c = y_pred)

在这里插入图片描述
epslion 密度阈值,min_samples 最小个数

y_pred = DBSCAN(eps=0.4).fit_predict(data2[['cjdanjia']])
plt.scatter(range(1,len(data2)+1), data2.cjdanjia, c = y_pred)

在这里插入图片描述

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LouHerGetUp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值