zoukankan      html  css  js  c++  java
  • 3 K均值算法

    1. 机器学习的步骤

    数据,模型选择,训练,测试,预测

    2. 安装机器学习库sklearn

    pip list 查看版本

    python -m pip install --upgrade pip

    pip install -U scikit-learn

    pip uninstall sklearn

    pip uninstall numpy

    pip uninstall scipy

    pip install scipy

    pip install numpy

    pip install sklearn

     https://scikit-learn.org/stable/install.html

    3. 导入sklearn的数据集

    from sklearn.datasets import load_iris

    iris = load_iris()

    iris.keys()

    X = iris.data # 获得其特征向量

    y = iris.target # 获得样本标签

    iris.feature_names # 特征名称

    4.K均值算法

    K-means是一个反复迭代的过程,算法分为四个步骤:(x,k,y)

    1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;

      def initcenter(x, k): kc

    2) 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;

      def nearest(kc, x[i]): j

      def xclassify(x, y, kc):y[i]=j

    3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;

      def kcmean(x, y, kc, k):

    4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)。

      while flag:

          y = xclassify(x, y, kc)

          kc, flag = kcmean(x, y, kc, k)

    参考官方文档: 

    http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans

    5. 作业:

    1). 扑克牌手动演练k均值聚类过程:>30张牌,3类

    自制小纸片共有30张,其中数字为1-10,每个数字有3张。

    1)要将数据分为三类,先随机选择了2,3,10作为各类的初始值。

    2)剩下的数据里,每个都与三个初始值计算距离,然后归类到离它最近的初始值所在类别。

    第一次分类:

    类别(中心点)

    第1类(2)

    第2类(3)

    第3类(10)

    总和

    9

    54

    102

    纸片数

    6

    12

    12

    平均值

    1.5

    4.5

    8.5

    新中心点

    2

    5

    9

    (3)按新的中心点进行第二次分类:

    类别

    第1类(2)

    第2类(5)

    第3类(9)

    总和

    18

    45

    102

    纸片数

    9

    9

    12

    平均值

    2

    5

    8.5

    新中心点

    2

    5

    9

    (4)可见第二次分类的新中心点和第一次分类后的中心点是一样的,分组也不再变化,停止分组。

    (5)随机取一张纸片值为6,那么它属于第2类。随机取一张纸片值为1,那么它属于第1类。

    3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.

     1 import matplotlib.pyplot as plt
     2 from sklearn.cluster import KMeans
     3 from sklearn.datasets import load_iris
     4 iris = load_iris()   # 鸢尾花数据
     5 # 特征名称(共有四个):花萼长度、花萼宽度、花瓣长度、花瓣宽度
     6 # iris.feature_names
     7 L0 = iris.data[:, 2]  # 花瓣长度
     8 x = L0.reshape(-1, 1)  # 花瓣长度数据列
     9 model = KMeans(n_clusters=3)  # 构建模型 3类
    10 model.fit(x)     # 训练模型
    11 pre_kmeans = model.predict(x)  # 预测每个样本的聚类索引
    12 print("预测结果:
    ", pre_kmeans)
    13 #  画图
    14 plt.scatter(x[:, 0], x[:, 0], c=pre_kmeans, s=20, cmap='rainbow')
    15 plt.show()

    4). 鸢尾花完整数据做聚类并用散点图显示.

     1 import matplotlib.pyplot as plt
     2 from sklearn.cluster import KMeans
     3 from sklearn.datasets import load_iris
     4 iris = load_iris()   # 鸢尾花数据
     5 x = iris.data
     6 model = KMeans(n_clusters=3)  # 构建模型 3类
     7 model.fit(x)     # 训练模型
     8 pre_kmeans = model.predict(x)  # 预测每个样本的聚类索引
     9 print("预测结果:
    ", pre_kmeans)
    10 # 画图
    11 plt.scatter(x[:, 2], x[:, 3], c=pre_kmeans, s=20, cmap='rainbow')
    12 plt.show()

    5).想想k均值算法可以用来做什么?

    答:它是一种将数据分成具有相似性的、指定数量的类的技术,可以发现数据存在的性质和规律。

    结合生活实际,像我们常在淘宝搜索和浏览商品,对于我们的搜索和浏览等可以进行聚类,平时也可以相对应地进行推荐等,便于用户找到心仪的商品,店家盈利,提高成交率。

  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/linyanli/p/12691211.html
Copyright © 2011-2022 走看看