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 的长度是否等于

最低0.47元/天 解锁文章
777

被折叠的 条评论
为什么被折叠?



