编程与算法实践进阶指南

1、请自行尝试重写单词搜索解决方案,以适应电路板布局问题。

可以复用很多代码,包括网格代码。电路板布局问题与单词搜索问题类似,只是将 1×N 的矩形(单词)换成了 M×N 的矩形,且矩形不能重叠、不能放在对角线上,实际上比单词搜索问题更简单。

2、使用像matplotlib这样的外部库创建一个函数,该函数能对二维数据集上KMeans算法的任何一次运行结果创建一个颜色编码的散点图。

以下是一个使用 matplotlib 库创建颜色编码散点图来展示二维数据集上 KMeans 算法运行结果的示例代码:

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import numpy as np

def plot_kmeans_results(data, k):
    # 运行KMeans算法
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(data)
    labels = kmeans.labels_
    centroids = kmeans.cluster_centers_

    # 创建散点图
    plt.figure(figsize=(8, 6))

    # 绘制数据点
    plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis', s=50)

    # 绘制聚类中心
    plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='X', s=200)

    plt.title('KMeans Clustering Results')
    plt.xlabel('Feature 1')
    plt.ylabel('Feature 2')
    plt.colorbar(label='Cluster Label')
    plt.show()

# 示例二维数据集
data = np.random.rand(100, 2)

# 设定聚类数量
k = 3

# 调用函数进行绘图
plot_kmeans_results(data, k)

这段代码首先导入必要的库,定义了一个 plot_kmeans_results 函数,该函数接受二维数据集和聚类数量作为参数。在函数内部,运行 KMeans 算法得到聚类标签和聚类中心,然后使用 matplotlib scatter 函数绘制颜色编码的散点图,不同的聚类用不同颜色表示,聚类中心用红色的 X 标记,最后显示图形。示例中使用了随机生成的二维数据集和聚类数量 3 来调用该函数。

3、为KMeans创建一个新的初始化方法,该方法接受初始质心位置,而不是随机分配它们。

以下是为 KMeans 类创建的新初始化方法,它接受初始质心位置而不是随机分配它们:

from typing import List
from dataclasses import dataclass
from typing import TypeVar
from random import uniform
from statistics import mean
from functools import partial

Point = TypeVar('Point', bound='DataPoint')

class KMeans(Generic[Point]):
    @dataclass
    class Cluster:
        points: List[Point]
        centroid: 'DataPoint'

    def __init__(self, k: int, points: List[Point], initial_centroids: List['DataPoint']) -> None:
        if k < 1:
            raise ValueError("k must be >= 1")
        if len(initial_centroids) != k:
            raise ValueError("The number of initial centroids must be equal to k")
        self._points: List[Point] = points
        self._zscore_normalize()
        # initialize clusters with provided centroids
        self._clusters: List[KMeans.Cluster] = []
        for centroid in initial_centroids:
            cluster = KMeans.Cluster([], centroid)
            self._clusters.append(cluster)

在这个新的 __init__ 方法中,我们增加了一个参数 initial_centroids ,它是一个包含初始质心位置的列表。在初始化时,我们检查 initial_centroids 的长度是否等于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值