更新 function.py
Gitea Actions Experiment Test / Experiment-Actions (push) Successful in 30s

This commit is contained in:
2024-10-16 22:19:17 +08:00
parent 9ced692643
commit 88fbdfc55c
+24 -26
View File
@@ -41,7 +41,7 @@ name = "唐一鸣"
# 这里写自己的代码实现 # 这里写自己的代码实现
def classify(input_vector, dataSet, labels, k=3): # 设置默认 k 值为 3 def classify(input_vector, dataSet, labels, k=3):
""" """
KNN 分类算法。 KNN 分类算法。
@@ -55,17 +55,15 @@ def classify(input_vector, dataSet, labels, k=3): # 设置默认 k 值为 3
Returns: Returns:
- int: 预测的分类标签。 - int: 预测的分类标签。
""" """
# 计算输入样本与所有训练样本的欧式距离 # 计算欧氏距离
distances = np.linalg.norm(dataSet - input_vector, axis=1) distances = np.sqrt(np.sum((dataSet - input_vector) ** 2, axis=1))
# 获取距离最近的 k 个样本的索引 # 按距离升序排序,并取前 k 个
nearest_indices = distances.argsort()[:k] sorted_indices = np.argsort(distances)
top_k_labels = [labels[i] for i in sorted_indices[:k]]
# 获取这些样本的标签 # 统计前 k 个邻居的类别并选择出现最多的类别作为预测值
nearest_labels = [labels[i] for i in nearest_indices] predicted_label = max(top_k_labels, key=top_k_labels.count)
# 统计每个标签出现的频率,返回频率最高的标签
predicted_label = np.bincount(nearest_labels).argmax()
return predicted_label return predicted_label
@@ -83,21 +81,21 @@ def load_dataset(directory):
- np.array: 标签数据。 - np.array: 标签数据。
""" """
labels = [] labels = []
data_list = [] file_list = os.listdir(directory)
num_files = len(file_list)
# 遍历文件夹中的文件 # 初始化数据矩阵,假设每个图像转化为 28x28=784 的向量
for filename in os.listdir(directory): data_matrix = np.zeros((num_files, 784))
if filename.endswith(".txt"):
# 提取文件名的首字符作为标签 for i, filename in enumerate(file_list):
label = int(filename[0]) # 提取文件名中的数字作为标签
label = int(filename.split('_')[0])
labels.append(label) labels.append(label)
# 将图像文件转换为向量并添加到数据集中 # 将文件转化为 1D 向量
filepath = os.path.join(directory, filename) data_matrix[i, :] = img_to_vector(os.path.join(directory, filename))
vector = img_to_vector(filepath)
data_list.append(vector)
return np.array(data_list), np.array(labels) return data_matrix, np.array(labels)
# 这里还写自己的代码实现 # 这里还写自己的代码实现
def img_to_vector(filename): def img_to_vector(filename):
@@ -114,13 +112,13 @@ def img_to_vector(filename):
- np.array: 二值图像向量。 - np.array: 二值图像向量。
""" """
# 初始化一个784长度的向量 # 初始化一个 1D 向量
vector = np.zeros((1, 784)) vector = np.zeros((1, 784))
# 打开文件读取每一行的数据 with open(filename, 'r') as file:
with open(filename) as f: for i in range(28):
for i, line in enumerate(f.readlines()): line = file.readline()
for j in range(28): # 假设每行有 28 个字符 for j in range(28):
vector[0, 28 * i + j] = int(line[j]) vector[0, 28 * i + j] = int(line[j])
return vector return vector