IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> python聚类模型KMeans -> 正文阅读

[数据结构与算法]python聚类模型KMeans

核心思想:
#1.随机生成指定个数质心点,聚类的数量
#2.质心点不变,更新类别,计算每个点与质心点的距离,计算出每个点距离哪个质心点最近,类别设置为哪个质心点类别
#3.类别不变,更新质心点,所有点按质心点类别分组,没类别求出所有点的特征值的均值,质心点更新
#4.新质心点执行第2步,循环调优,直到SSE不在变小
#5.搭建好模型后,质心点个数从1到20根据模型求出每种SSE的值,画图得到最优质心点数量

#机器学习聚类算法实现:
from sklearn.datasets import make_blobs
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans

#创建数据集
x,y = make_blobs(n_samples=800,n_features=2,centers=5,random_state=1)
data = pd.DataFrame(x)
data['label'] = y
plt.scatter(x[:,0],x[:,1])

#看选什么n是最好,你从1到10,看的出的SSE走势
SSE_total_list = []
for i in range(1,11):
    clusters = KMeans(n_clusters= i)
    clusters.fit(x)
    SSE_total_list.append(clusters.inertia_)
plt.figure(figsize=(5,4),dpi=100,facecolor='lightgrey')
pd.Series(SSE_total_list,index=range(1,11)).plot()
#根据曲线最优为质心点为5
"""
fit后出现的重要数值
clusters.inertia_#SSE,总距离
clusters.labels_#y分组,类别,每个点所属哪个质心点
clusters.cluster_centers_ #质心点数据
"""

在这里插入图片描述

#手动聚类算法,手动缺点较多,主要是了解聚类思想
from sklearn.datasets import make_blobs
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def initial_centers(datasets,k):
    """随机生成点"""
    data = datasets.drop('label',axis=1)
    info = data.describe().loc[['min','max'],:]
    l =[np.random.uniform(info[i]['min'],info[i]['max'],k) for i in data.columns]
    centers = pd.DataFrame(l,index=data.columns).T
    return centers
def get_distance(datasets,centers):
    """距离计算"""
    data = datasets.drop('label',axis=1)
    d_list =[(np.power(data-centers.loc[i,:],2).sum(axis=1)) for i in centers.index]
    return pd.concat(d_list,axis=1)
def iterate(datasets,centers):
    """更新质心点,跟新类别"""
    d_centers = get_distance(datasets,centers)
    current_grup = d_centers.idxmin(axis=1)
    SSE=d_centers.min(axis=1).sum()
    data = datasets.drop('label',axis=1)
    #data['current_grup'] = current_grup
    centers = data.groupby(current_grup).mean()
    return current_grup,centers,SSE
def Kmeans_regular(datasets,k):
    """主函数入口"""
    SSE_list = [0]
    centers = initial_centers(datasets,k)
    while True:
        current_grup,centers,SSE=iterate(datasets,centers)
        if SSE == SSE_list[-1]:
            break
        SSE_list.append(SSE)
    return current_grup,SSE_list,centers
-------------------------------------------测试----------------------------------------
#生成一个数据集
x,y = make_blobs(n_samples=500,n_features=2,centers=8,random_state=1)
data = pd.DataFrame(x)
data['label'] = y
#根据手动模型测试,质心点数量为4
current_grup,SSE_list,centers=Kmeans_regular(data,4)
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:04:35  更:2021-07-28 08:05:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 13:12:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码