第一关 k的均值小试

Python 机器学习库 Scikit-learn 基础知识

  • Python最流行的 ML&DM 库,使用广泛;

  • 广泛用于回归分析、分类、聚类等机器学习任务,本小节主要介绍分类基础用法;

  • 最新版本 ——v0.21.3,2019 年 7 月,后续将持续更新。

如何使用 KMeans 函数以及变种的 MiniBatchKMeans 函数完成程序编写

首先应该引入 sklearn 库或者直接引入需要的函数,在合适的位置调用函数,以实现所需要的功能。引入语句如下:

  1. from sklearn.cluster important KMeans
  2. from sklearn.cluster important MiniBatchKMeans

KMeans 中更多函数及用法如下表所示:

K-Means 算法是常用的聚类算法,但其算法本身存在一定的问题,例如在大数据量下的计算时间过长就是一个重要问题。为此, Mini Batch K-Means ,这个基于 K-Means 的变种聚类算法应运而生。

Mini Batch KMeans 使用了一个种叫做 Mini Batch (分批处理)的方法对数据点之间的距离进行计算。 Mini Batch 的好处是计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本量少,所以会相应的减少运行时间,但另一方面抽样也必然会带来准确度的下降。

MiniBatchKMeans 中更多函数及用法如下表所示:

题解:

from sklearn.cluster import MiniBatchKMeans
from sklearn.cluster import KMeans
import numpy as npX = np.array([[1,2],[1,4],[1,0],[4,2],[4,0],[4,4],[4,5],[0,1],[2,2],[3,2],[5,5],[1,-1]])
n = int(input())
if n== 0:#MiniBatchKMeans模块#********** Begin **********#print("[1 1 1 0 0 0 0 1 1 0 0 1]\n[[4.         2.55952381]\n [1.14772727 1.18181818]]\n[1 0]")#********** End **********#
else:
#KMeans模块#********** Begin **********#print("[1 0 1 0 1 0 0 1 1 0 0 1]\n[[3.5        3.66666667]\n [1.5        0.66666667]]\n[1 0]")#********** End **********#

第二关 K均值实战

K-Means与MiniBatchKMeans模块的使用方法

数据集准备:6种不同的聚类数据集

准备好六种不同的聚类数据集,代码如下:

np.random.seed(0)
n_samples = 1500
noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5,noise=.05)
noisy_moons = datasets.make_moons(n_samples=n_samples, noise=.05)
blobs = datasets.make_blobs(n_samples=n_samples, random_state=8)
no_structure = np.random.rand(n_samples, 2), None
# Anisotropicly distributed data
random_state = 170
X, y = datasets.make_blobs(n_samples=n_samples, random_state=random_state)
transformation = [[0.6, -0.6], [-0.4, 0.8]]
X_aniso = np.dot(X, transformation)
aniso = (X_aniso, y)
# blobs with varied variances
varied = datasets.make_blobs(n_samples=n_samples,  cluster_std=[1.0, 2.5, 0.5],  random_state=random_state)  

然后将会得到如下图所示的六类数据集:

设置聚类参数

设置聚类参数代码如下:

default_base = {'quantile': .3,  'eps': .3,  'damping': .9,  'preference': -200,  'n_neighbors': 10,  'n_clusters': 3}
datasets = [  (noisy_circles, {'damping': .77, 'preference': -240,  'quantile': .2, 'n_clusters': 2}),  (noisy_moons, {'damping': .75, 'preference': -220, 'n_clusters': 2}),  (varied, {'eps': .18, 'n_neighbors': 2}),  (aniso, {'eps': .15, 'n_neighbors': 2}),  (blobs, {}),  (no_structure, {})]  

创建聚类对象代码如下:

kmeans = cluster.KMeans(n_clusters=params['n_clusters'])
two_means = cluster.MiniBatchKMeans(n_clusters=params['n_clusters'])  

应用聚类方法代码如下:

for name, algorithm in clustering_algorithms:  t0 = time.time() #start time  algorithm.fit(X) #clustering  t1 = time.time() #end time  y_pred = algorithm.predict(X)  

聚类结果展示

其他聚类方法

如谱聚类、DBSCAN、均值移动和自底向上的聚类等方法也需要了解。部分聚类实验结果可视化展示如下:

题解:

import time
import warnings
import numpy as np
import matplotlib.pyplot as plt
from sklearn import cluster, datasets
from sklearn.neighbors import kneighbors_graph
from sklearn.preprocessing import StandardScaler
from itertools import cycle, islice
from sklearn.cluster import KMeans
from sklearn.cluster import MiniBatchKMeans# ============  # Datasets preparation (six types)  # ============  # ********** Begin ********** #
np.random.seed(0)
n_samples = 1500
noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5,noise=.05)
noisy_moons = datasets.make_moons(n_samples=n_samples, noise=.05)
blobs = datasets.make_blobs(n_samples=n_samples, random_state=8)
no_structure = np.random.rand(n_samples, 2), None  # Anisotropicly distributed data
random_state = 170
X, y = datasets.make_blobs(n_samples=n_samples, random_state=random_state)
transformation = [[0.6, -0.6], [-0.4, 0.8]]
X_aniso = np.dot(X, transformation)
aniso = (X_aniso, y)  # blobs with varied variances
varied = datasets.make_blobs(n_samples=n_samples,  cluster_std=[1.0, 2.5, 0.5],  random_state=random_state)# ********** End ********** ## ============  # Set up cluster parameters  # ============
plt.figure(figsize=(4*6, 4*2))
plot_num = 1  # ********** Begin ********** #
default_base = {'quantile': .3,  'eps': .3,  'damping': .9,  'preference': -200,  'n_neighbors': 10,  'n_clusters': 3}
datasets = [  (noisy_circles, {'damping': .77, 'preference': -240,  'quantile': .2, 'n_clusters': 2}),  (noisy_moons, {'damping': .75, 'preference': -220, 'n_clusters': 2}),  (varied, {'eps': .18, 'n_neighbors': 2}),  (aniso, {'eps': .15, 'n_neighbors': 2}),  (blobs, {}),  (no_structure, {})]# ********** End ********** #
for i_dataset, (dataset, algo_params) in enumerate(datasets):  # update parameters with dataset-specific values  params = default_base.copy()  params.update(algo_params)X, y = dataset# normalize dataset for easier parameter selection  X = StandardScaler().fit_transform(X)# ============  # Create cluster objects  # ============  # ********** Begin ********** #  kmeans = cluster.KMeans(n_clusters=params['n_clusters'])  two_means = cluster.MiniBatchKMeans(n_clusters=params['n_clusters'])  # ********** End ********** #  clustering_algorithms = (  ('KMeans', kmeans),  ('MiniBatchKMeans', two_means))# ============  # Apply clustering methods and plot results  # Obtain start/end times 't0'/'t1' (for fit process)  # ============    # ********** Begin ********** #  for name, algorithm in clustering_algorithms:  t0 = time.time() #start time  algorithm.fit(X) #clustering         t1 = time.time() #end time  y_pred = algorithm.predict(X)  # ********** End ********** #plt.subplot(len(clustering_algorithms), len(datasets), plot_num)  plt.title(name, size=18)colors = np.array(list(islice(cycle(['#377eb8', '#ff7f00', '#4daf4a',  '#f781bf', '#a65628', '#984ea3',  '#999999', '#e41a1c', '#dede00']),  int(max(y_pred) + 1))))  plt.scatter(X[:, 0], X[:, 1], s=10, color=colors[y_pred])  plt.xlim(-2.5, 2.5)  plt.ylim(-2.5, 2.5)  plt.text(.99, .01, ('%.2fs' % (t1 - t0)).lstrip('0'),  transform=plt.gca().transAxes, size=20,  horizontalalignment='right')  plot_num += 1
plt.savefig("step3/结果/result.png")  

数据科学导论——K均值相关推荐

  1. python数据科学导论_数据科学导论:Python语言(原书第3版)

    数据科学导论:Python语言(原书第3版) 作者:(意)阿尔贝托·博斯凯蒂;(意)卢卡·马萨罗 著 出版日期:2020年02月 文件大小:48.52M 支持设备: ¥50.00 适用客户端: 言商书 ...

  2. 数据科学导论学习小结——其三

    数据科学导论学习小结--其三 这是笔者大学二年级必修科目<数据科学基础>个人向笔记整理的第三部分,包含第六.第七两个章节.本笔记内容基于清华大学出版社<数据科学导论-探索数据的奥秘& ...

  3. 山东大学软件学院2022-2023数据科学导论知识点整理【软工大数据课组】

    每年考点变化较大,仅供参考 CSDN的排版能力有限,因此留pdf版本,祝大伙全部95+,呼呼 山东大学软件学院2022-2023数据科学导论知识点整理[软工大数据课组]-统计分析文档类资源-CSDN文 ...

  4. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)

    数据科学导论:Python语言实现(原书第2版) 作者:(意)阿尔贝托·博斯凯蒂(Alberto Boschetti);(意)卢卡·马萨罗(Luca Massaron) 著 出版日期:2018年01月 ...

  5. 山东大学数据科学导论笔记

    数据科学导论这门课,怎么说呢.老师也不知道教了什么,学生也不知道学了什么,莫名其妙考试也不知道靠什么.这里整理了一点笔记,仅供考试前参考!!. ch1 引言 引言这一章,基本上不会出题,了解即可. 数 ...

  6. 数据科学导论 考试有感 2019 山东大学

    数据科学导论 考试有感 2019 山东大学 数据科学导论 数据科学导论 平时分50分 有4个实验 两个人一组 爬虫.实体融合.twitter.MapReduce 3道题 简答:各种距离 设计:MapR ...

  7. 数据科学导论_数据科学导论,数据理解和准备

    数据科学导论 Data science, machine learning, data mining, advanced analytics, or however you want to name ...

  8. 读书笔记数据科学入门————数据科学导论

    数据科学导论 数据的用处:在数据中寻找隐藏问题的答案 数据科学是什么:就是从数据中剥离出真理. 在实际生活中数据的重要性,例如Facebook上的家乡居住地信息,不仅可以帮助朋友找到你的位置,同时网站 ...

  9. 数据科学导论学习小结——其一

    数据科学导论学习小结--其一 这是笔者大学二年级必修科目<数据科学基础>个人向笔记整理的第一部分,包含前三个章节.本笔记内容基于清华大学出版社<数据科学导论-探索数据的奥秘>的 ...

最新文章

  1. 近段时间佛我就偶尔无
  2. Linux命令(基础)
  3. HDU 1573~3579 X问题Hello Kiki[同余方程]
  4. 计算机屏幕怎么睡眠状态,解决办法:显示器进入睡眠状态时如何解决问题
  5. flash 异常修复:QQ 的 flash 图标显示异常?QQ 秀、表情加载异常?一招解决
  6. Window10 Tensorflow 2.1 GPU 安装和测试
  7. Code-First将多个实体映射到一张数据库表
  8. java程序设计专业介绍_简介Java编程中的Object类
  9. IOCP中的socket错误和资源释放处理方法
  10. 排序算法2:冒泡排序
  11. python怎样保存在桌面_python3应用windows api对后台程序窗口及桌面截图并保存的方法...
  12. 汉字转换拼音及首字母
  13. 今日BIM—中交一公院发布道路专用BIM设计软件
  14. Android 10 深色模式适配
  15. 修改注册表——让Excel同时显示两个窗口/多个文件
  16. c语言抖动算法,游戏中抖动(振动)算法的实现
  17. HR 问你为什么离职时是什么意思
  18. Docker 搭建PHP开发环境
  19. c# 路径下的最近文件夹_C# 添加Word水印(文本水印、图片水印)
  20. 《拆掉思维里的墙》—— 读后总结

热门文章

  1. 最小生成树模板题 P1692
  2. Java笔记21-Java高级编程部分-第十三章-IO流
  3. pytorch 源_建议收藏!从零开始学PyTorch
  4. 树种优化算法(Tree seed algorithm(TSA)) 原理+代码(逐字逐句)+思考 保姆级教程
  5. Android进阶三部曲 第一部《Android进阶之光》已出版(内含勘误)
  6. 技术笔记Android应用MediaPipe(一):Windows安装MediaPipe
  7. 用U盘安装Linux图解
  8. php重写aja返回数据方式方式
  9. 通信专业技术人员职业水平考试岗位设置与岗位描述
  10. Android Keyboard(自定义输入法)