From 3677b2ab8666b402cd105bf5b21d166c09524599 Mon Sep 17 00:00:00 2001 From: DREMN2112 Date: Thu, 7 Nov 2024 16:52:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/function.py b/function.py index d0c9b22..7aa8180 100644 --- a/function.py +++ b/function.py @@ -56,9 +56,11 @@ def predict_logreg(inX, weights): # 将概率转为标签 return 1 if prob >= 0.5 else 0 +import numpy as np + def load_data(filepath): """ - 从文件中加载数据。 + 从文件中加载数据,处理缺失数据,并将 '?' 替换为列的均值。 Args: - filepath (str): 数据文件路径。 @@ -69,19 +71,38 @@ def load_data(filepath): """ data = [] labels = [] - + + # 读取数据 with open(filepath, 'r') as file: for line in file: line = line.strip().split() if not line: continue - # 将特征转换为浮点型 - features = list(map(float, line[:-1])) + + # 将标签提取出来 label = int(line[-1]) + + # 将特征转换为浮动数组 + features = line[:-1] # 去除标签部分 + # 用特征中的均值替换 '?',并转换为 float + features = [float(f) if f != '?' else None for f in features] + + # 将数据和标签分别加入到列表 data.append(features) labels.append(label) - - return np.array(data), np.array(labels) + + # 将列表转换为numpy数组 + data = np.array(data) + labels = np.array(labels) + + # 计算每列的均值,并用均值替换 None + col_means = np.nanmean(data, axis=0) # 计算每列的均值,忽略 NaN + # 将 None 替换为对应的列均值 + for i in range(data.shape[1]): + data[:, i] = np.where(np.isnan(data[:, i]), col_means[i], data[:, i]) + + return data, labels + if __name__ == "__main__": # 加载训练集