机器学习之路:python k均值聚类 KMeans 手写数字

 

python3 学习使用api

使用了网上的数据集,我把他下载到了本地

可以到我的git中下载数据集: https://github.com/linyi0604/MachineLearning

代码:

 1 import numpy as np
 2 import pandas as pd
 3 from sklearn.cluster import KMeans
 4 from sklearn import metrics
 5 
 6 '''
 7 k均值算法:
 8     1 随机选择k个样本作为k个类别的中心
 9     2 从k个样本出发,选取最近的样本归为和自己同一个分类,一直到所有样本都有分类
10     3 对k个分类重新计算中心样本
11     4 从k个新中心样本出发重复23,
12         如果据类结果和上一次一样,则停止
13         否则重复234
14         
15 '''
16 '''
17 该数据集源自网上 https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/
18 我把他下载到了本地
19 训练样本3823条, 测试样本1797条
20 图像通过8*8像素矩阵表示共64个维度,1个目标维度表示数字类别
21 '''
22 
23 # 1 准备数据
24 digits_train = pd.read_csv("./data/optdigits/optdigits.tra", header=None)
25 digits_test = pd.read_csv("./data/optdigits/optdigits.tes", header=None)
26 # 从样本中抽取出64维度像素特征和1维度目标
27 x_train = digits_train[np.arange(64)]
28 y_train = digits_train[64]
29 x_test = digits_test[np.arange(64)]
30 y_test = digits_test[64]
31 
32 # 2 建立模型
33 # 初始化kMeans聚类模型 聚类中心数量为10个
34 kmeans = KMeans(n_clusters=10)
35 # 聚类
36 kmeans.fit(x_train)
37 # 逐条判断每个测试图像所属的聚类中心你
38 y_predict = kmeans.predict(x_test)
39 
40 
41 # 3 模型评估
42 # 使用ARI进行性能评估 当聚类有所属类别的时候利用ARI进行模型评估
43 print("k均值聚类的ARI值:", metrics.adjusted_rand_score(y_test, y_predict))
44 '''
45 k均值聚类的ARI值: 0.6673881543921809
46 '''
47 # 如果没有聚类所属类别,利用轮廓系数进行评估

 

转载于:https://www.cnblogs.com/Lin-Yi/p/8972996.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k均值聚类是一种常用的无监督学习算法,可以用于聚类分析。在手写数字识别中,我们可以将每个数字的像素点看作一个特征向量,然后通过k均值聚类将相似的数字分为一组,从而实现手写数字的识别。 以下是基于Pythonk均值聚类手写数字识别的示例代码: ```python import numpy as np from sklearn.cluster import KMeans from sklearn.datasets import load_digits from sklearn.decomposition import PCA import matplotlib.pyplot as plt # 加载数据 digits = load_digits() data = digits.data target = digits.target # 只选取前两个主成分作为特征 pca = PCA(n_components=2) data = pca.fit_transform(data) # k均值聚类 kmeans = KMeans(n_clusters=10, random_state=0) kmeans.fit(data) # 可视化聚类结果 colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w', 'orange', 'purple'] for i in range(len(data)): plt.scatter(data[i, 0], data[i, 1], c=colors[kmeans.labels_[i]]) plt.show() # 计算聚类准确率 cluster_labels = np.zeros_like(target) for i in range(10): mask = (kmeans.labels_ == i) cluster_labels[mask] = np.bincount(target[mask]).argmax() accuracy = np.mean(cluster_labels == target) print('聚类准确率:%.2f%%' % (accuracy * 100)) ``` 这段代码主要分为以下几个步骤: 1. 加载数据:使用sklearn库中的load_digits函数加载手写数字数据集。 2. 特征提取:使用PCA将每个数字的像素点转换为前两个主成分,作为特征向量。 3. k均值聚类:使用sklearn库中的KMeans函数对特征向量进行聚类。 4. 可视化聚类结果:将聚类结果可视化展示。 5. 计算聚类准确率:将每个聚类簇中的数字标签取众数作为该簇的标签,然后计算聚类准确率。 注意,这里的聚类准确率并不是像监督学习那样的分类准确率,而是通过将每个聚类簇中的数字标签取众数得到的准确率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值