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

This commit is contained in:
2024-10-16 18:31:17 +08:00
parent 85aebc958e
commit 4af5198163
+28 -75
View File
@@ -54,20 +54,14 @@ def classify(input_vector, dataSet, labels, k=0):
Returns:
- int: 预测的分类标签。
"""
# 计算输入向量与每个训练样本之间的欧氏距离
distances = [np.linalg.norm(input_vector - x) for x in dataSet]
# 获取距离最近的 k 个训练样本的索引
k_indices = np.argsort(distances)[:k]
# 获取这 k 个训练样本的标签
k_nearest_labels = [labels[i] for i in k_indices]
# 找到出现次数最多的标签
most_common = Counter(k_nearest_labels).most_common(1)
# 返回出现次数最多的标签
return most_common[0][0]
"""
使用欧式距离的 kNN 分类算法。
"""
distances = [np.linalg.norm(input_vector - x) for x in dataSet]
k_indices = np.argsort(distances)[:k]
k_nearest_labels = [labels[i] for i in k_indices]
most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
# 这里也写自己的代码实现
@@ -82,40 +76,24 @@ def load_dataset(directory):
- np.array: 特征数据。
- np.array: 标签数据。
"""
features = []
labels = []
# 遍历文件夹中的所有文件
for filename in os.listdir(directory):
# 构建文件的完整路径
filepath = os.path.join(directory, filename)
# 检查文件是否为所需类型(例如图像文件)
# 此处应根据实际情况修改文件类型检查逻辑
if filename.endswith(".png") or filename.endswith(".jpg"): # 示例:处理图像文件
# 提取文件名中的标签(假设标签信息包含在文件名中)
# 此处应根据实际情况修改标签提取逻辑
# 示例:假设文件名格式为"label_xxx.png",则提取"label"部分作为标签
label_parts = filename.split("_")
if len(label_parts) > 1:
label = int(label_parts[0]) # 将标签转换为整数类型
else:
# 若文件名不符合预期格式,则跳过该文件或进行错误处理
continue # 此处选择跳过不符合格式的文件
# 加载文件内容并提取特征
# 此处应根据实际情况修改特征提取逻辑
# 示例:若处理图像文件,则使用PIL库加载图像并提取特征(如像素值、纹理特征等)
image = Image.open(filepath)
# 示例:将图像转换为灰度图并展平为一维数组作为特征
# 注意:此特征提取方法非常简单,实际应用中可能需要更复杂的特征提取方法
feature = np.array(image.convert("L")).flatten()
# 将特征和标签添加到列表中
features.append(feature)
labels.append(label)
# 将特征和标签列表转换为NumPy数组并返回
features = []
labels = []
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
# 检查文件是否为图片类型(如 png 或 jpg)
if filename.endswith(".png") or filename.endswith(".jpg"):
# 从文件名提取标签
label = int(filename.split('_')[0])
# 加载图片并转换为灰度图
image = Image.open(filepath).convert('L')
# 展平为一维向量并添加到特征列表中
feature = np.array(image).flatten()
features.append(feature)
labels.append(label)
return np.array(features), np.array(labels)
@@ -131,33 +109,8 @@ def img_to_vector(filename):
Returns:
- np.array: 二值图像向量。
"""
with Image.open(filename) as img:
# 将图像转换为灰度图(如果是彩色图像的话)
# 注意:如果图像已经是灰度图或二值图,这一步可能不是必需的
# 但为了确保兼容性,我们还是加上这一步
gray_img = img.convert('L')
# 将灰度图转换为二值图
# 这里我们假设一个阈值,将灰度值大于该阈值的像素设为255,小于或等于该阈值的像素设为0
# 您可以根据实际情况调整这个阈值,或者使用其他二值化方法
threshold = 128 # 示例阈值
binary_img = gray_img.point(lambda p: p > threshold and 255)
# 或者,如果图像已经是二值图(0和255),则可以直接使用
# binary_img = gray_img # 仅在图像已经是二值图时使用
# 将二值图转换为NumPy数组,并展平为一维数组
img_array = np.array(binary_img)
img_vector = img_array.flatten()
# 由于二值图像只包含0和255,我们可以选择将255替换为1(可选步骤)
# 这取决于您的应用场景是否需要这种归一化
img_vector = (img_vector / 255).astype(int) # 将255转换为1,0保持不变
# 注意:上面的归一化步骤将255转换为1,但如果您希望保留原始的0和255值,
# 则可以省略这一步,并直接返回img_vector在展平后的状态。
return img_vector
image = Image.open(filename).convert('L')
return np.array(image).flatten()
if __name__ == "__main__":