机器学习作业

news/2024/10/3 0:27:42

Ch3-K均值聚类算法 【9月4日】

学号:102102156 姓名:高涛

1. make_circles方法生成数据

1.1 源代码

from sklearn.cluster import KMeans
from sklearn.datasets import make_circles, make_moons, make_blobs
import matplotlib.pyplot as plt
from utils.clustering_performance import clusteringMetrics
import matplotlibmatplotlib.use('TkAgg')
fig = plt.figure(1)
X1, y1 = make_circles(n_samples=400, factor=0.5, noise=0.1)
plt.subplot(321)
plt.title('original')
plt.scatter(X1[:, 0], X1[:, 1], c=y1)
plt.subplot(322)
plt.title('K-means')
kms = KMeans(n_clusters=2, max_iter=400)   # n_cluster聚类中心数 max_iter迭代次数
y1_sample = kms.fit_predict(X1, y1)   # 计算并预测样本类别
centroids = kms.cluster_centers_
plt.scatter(X1[:, 0], X1[:, 1], c=y1_sample)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', c='b')
print(clusteringMetrics(y1, y1_sample))plt.show()

1.2 绘制结果

2. make_blobs方法生成数据

2.1 源代码

from sklearn.cluster import KMeans
from sklearn.datasets import make_circles, make_moons, make_blobs
import matplotlib.pyplot as plt
from utils.clustering_performance import clusteringMetrics
import matplotlibmatplotlib.use('TkAgg')
fig = plt.figure(1)
X2, y2 = make_moons(n_samples=400, noise=0.1)
plt.subplot(323)
plt.title('original')
plt.scatter(X2[:, 0], X2[:, 1], c=y2)
plt.subplot(324)
plt.title('K-means')
kms = KMeans(n_clusters=2, max_iter=400)
y2_sample = kms.fit_predict(X2, y2)
centroids = kms.cluster_centers_
plt.scatter(X2[:, 0], X2[:, 1], c=y2_sample)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', c='b')
print(clusteringMetrics(y2, y2_sample))plt.show()

2.2绘制结果

3.make_blobs方法生成数据

3.1 源代码

from sklearn.cluster import KMeans
from sklearn.datasets import make_circles, make_moons, make_blobs
import matplotlib.pyplot as plt
from utils.clustering_performance import clusteringMetrics
import matplotlibmatplotlib.use('TkAgg')
fig = plt.figure(1)
X3, y3 = make_blobs(n_samples=1000, random_state=9)   #
plt.subplot(325)
plt.title('original3')
plt.scatter(X3[:, 0], X3[:, 1], c=y3)
plt.subplot(326)
plt.title('K-means3')
kms = KMeans(n_clusters=3, max_iter=1000)
y3_sample = kms.fit_predict(X3, y3)
centroids = kms.cluster_centers_
# label = kms.labels_
plt.scatter(X3[:, 0], X3[:, 1], c=y3_sample)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', c='b')
print(clusteringMetrics(y3, y3_sample))plt.show()

3.2 绘制结果

4.对像素进行聚类并可视化

4.1 源代码

from scipy.cluster.vq import *
from pylab import *
from PIL import Imageimport matplotlibmatplotlib.use('TkAgg')def clusterpixels(infile, k, steps):im = array(Image.open(infile))dx = im.shape[0] / stepsdy = im.shape[1] / stepsfeatures = []for x in range(steps):  # RGB三色通道for y in range(steps):R = mean(im[int(x * dx):int((x + 1) * dx), int(y * dy):int((y + 1) * dy), 0])G = mean(im[int(x * dx):int((x + 1) * dx), int(y * dy):int((y + 1) * dy), 1])B = mean(im[int(x * dx):int((x + 1) * dx), int(y * dy):int((y + 1) * dy), 2])features.append([R, G, B])features = array(features, 'f')  # make into array# 聚类, k是聚类数目centroids, variance = kmeans(features, k)code, distance = vq(features, centroids)codeim = code.reshape(steps, steps)codeim = np.array(Image.fromarray(codeim).resize((im.shape[1], im.shape[0])))return codeim# k = 5
infile_Stones = 'stones.png'
im_Stones = array(Image.open(infile_Stones))
steps = (50, 100)  # image is divided in steps*steps region# 显示原图
figure()
subplot(231)
title('original')
axis('off')
imshow(im_Stones)for k in range(2, 7):codeim = clusterpixels(infile_Stones, k, steps[-1])subplot(2, 3, k)title('K=' + str(k))axis('off')imshow(codeim)show()

4.2 绘制结果

5.将给定数据集可视化并输出聚类性能

5.1 源代码 + 绘制结果

5.2 源代码

import matplotlib.pyplot as plt
import os
import cv2 as cv
import numpy as np
from sklearn.cluster import KMeans
from PIL import Image
from utils.clustering_performance import clusteringMetrics
import matplotlibmatplotlib.use('TkAgg')
path = 'face_images'
h, w = 200, 180
IMAGE_COLUMN = 20  # 列
IMAGE_ROW = 10  # 行
to_image = Image.new('RGB', (IMAGE_COLUMN * w, IMAGE_ROW * h))def createDatabase(path):# 查看路径下所有文件TrainFiles = os.listdir(path)  # 遍历每个子文件夹# 计算有几个文件(图片命名都是以 序号.jpg方式)Train_Number = len(TrainFiles)  # 子文件夹个数train = []y_sample = []# 把所有图片转为1维并存入T中for k in range(0, Train_Number):Trainneed = os.listdir(path + '/' + TrainFiles[k])  # 遍历每个子文件夹里的每张图片Trainneednumber = len(Trainneed)  # 每个子文件里的图片个数for i in range(0, Trainneednumber):img = Image.open(path + '/' + TrainFiles[k] + '/' + Trainneed[i])to_image.paste(img, (i * w, k * h))  # 把读出来的图贴到figure上image = cv.imread(path + '/' + TrainFiles[k] + '/' + Trainneed[i]).astype(np.float32)  # 数据类型转换image = cv.cvtColor(image, cv.COLOR_RGB2GRAY)  # RGB变成灰度图train.append(image)y_sample.append(k)train = np.array(train)y_sample = np.array(y_sample)return train, y_sample# n_samples, h, w = 200, 200, 180
X, y = createDatabase(path)
# print(X.shape)
X_ = X.reshape(X.shape[0], h*w)kms = KMeans(n_clusters=10)
y_sample = kms.fit_predict(X_, y)
print(clusteringMetrics(y, y_sample))plt.imshow(to_image)
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/58420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

volta 管理多个node版本时,Volta error: Could not download node

设置代理 在终端中执行以下命令,替换为你自己的代理地址: bash $env:HTTP_PROXY="你的代理地址" $env:HTTPS_PROXY="你的代理地址" 然后重启终端: Windows 用户需要以管理员身份重新打开终端。 Mac 用户只需重启终端即可。 这样可以确保你在终端中通过代…

el-upload点击问题

问题描述: 今天在写vue项目时,用到了element plus中的el-upload组件,发现这么一个问题: 组件各个功能都是正常的,也可以上传图片,但是 虚线框里那么大一片区域只有中间那个十字是可以点击的点击查看代码 <el-uploadclass="ImageUpload":action="http:/…

P2424

1.逃课做法 第一眼看到: 感觉有点像内啥分解只因数 然后就不会了那我写这个干什么 这时,聪明的我们就想到了打表 怎么打呢? 如图:我们可以把它分成几个块,提前打好每个块的答案 这样,我们就用普及的算法过了提高的题 2.正解 氧化钙(CaO)的怎么和上题一样 #include<c…

BinLLM论文阅读笔记

Text-like Encoding of Collaborative Information in Large Language Models for Recommendation论文阅读笔记 Abstract 现存的问题: ​ 在调整用于推荐的大型语言模型(LLMRec)时,整合协作信息至关重要。现有的方法通过从头开始学习 LLM 潜在空间中的协作嵌入或通过外部模…

线上问题排查-定时任务状态未复位

项目业务 用户授权登录后,负责把本 app 的运动同步到第三方,分别对接了 A、B、C、D 等第三方,各个平台的推送方式不太一样,有一些是主动查询,有一些是主动推送 场景 周五线上 Redis 报了内存不足,代码排查后发现用户数据占用了很大一部分,并且只存储不查询也不设置过期事…

java基础 -线程(基础)的 笔记

581,多线程机制 因为需要敌人的坦克可以自由移动并发射子弹,我们的坦克可以移动并发射子弹,这些要用到线程的知识。根据JConsole监控线程执行情况,发现,主线程执行完了,子线程还没有执行完,并不能表示当前进程死亡了,只有当所有的子线程执行完了,主进程才会结束。真正…

Leangoo领歌:一站式敏捷缺陷管理平台,助力产品迭代

在敏捷开发环境下,缺陷管理的效率直接影响到项目的质量和交付周期。对于追求高效、透明和灵活的敏捷团队来说,Leangoo领歌无疑是一个不可或缺的工具。​在开发过程中,缺陷(BUG)管理一直是项目管理中的一个关键环节。及时发现并修复BUG,不仅能够提高产品质量,还能有效提升…