From 4470d0c92542fdda7aba42b0b925d6552db7e50c Mon Sep 17 00:00:00 2001 From: ywq157 <271203576@qq.com> Date: Thu, 21 Nov 2024 15:29:57 +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 | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/function.py b/function.py index 06aaed6..af11423 100644 --- a/function.py +++ b/function.py @@ -31,6 +31,7 @@ name = "杨文强" def load_data(filepath): """ 从文件中加载数据,并返回特征和标签。 + 如果数据中包含 '?' 字符,将其处理为 NaN。 Args: - filepath (str): 数据文件路径。 @@ -39,19 +40,34 @@ def load_data(filepath): - np.array: 特征数据。 - np.array: 标签数据。 """ - data = np.loadtxt(filepath, delimiter=" ", dtype=str) + # 读取数据,指定将 '?' 转换为 np.nan + data = np.genfromtxt(filepath, delimiter=" ", dtype=str, missing_values='?', filling_values=np.nan) + X = [] y = [] for row in data: - features = row[:-1].astype(float) # 特征数据 - label = int(row[-1]) # 标签数据 (0 或 1) - - # 转换标签为 +1 或 -1 - y.append(1 if label == 1 else -1) + features = row[:-1] # 特征数据 + label = row[-1] # 标签数据 + + # 将特征中的 '?' 替换为 NaN,后续可以选择删除这些行或填充NaN值 + features = [float(x) if x != '?' else np.nan for x in features] + + # 标签的处理:确保标签是 1 或 -1 + label = int(label) # 标签需要转换为整数 1 或 0 + y.append(1 if label == 1 else -1) # 将标签转换为 +1 或 -1 X.append(features) - return np.array(X), np.array(y) + X = np.array(X) + y = np.array(y) + + # 处理缺失值:可以选择删除含有NaN的样本 + # 这里是删除含有NaN的行 + valid_indices = ~np.isnan(X).any(axis=1) + X = X[valid_indices] + y = y[valid_indices] + + return X, y def train_svm(X, y, learning_rate=0.01, iterations=1000, regularization_param=0.01): """