From 590a63b558bd9fc723af08ce2856d498aaf1f8eb Mon Sep 17 00:00:00 2001 From: wzy <675163717@qq.com> Date: Thu, 31 Oct 2024 15:35:48 +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 | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/function.py b/function.py index 0127008..60c49ac 100644 --- a/function.py +++ b/function.py @@ -31,7 +31,6 @@ def sigmoid(z): return 1 / (1 + np.exp(-z)) def train_logreg(X, y, learning_rate=0.001, iterations=500, batch_size=16, initial_weights=None): - X = np.insert(X, 0, 1, axis=1) # 添加偏置项 if initial_weights is None: weights = np.zeros(X.shape[1]) else: @@ -69,7 +68,7 @@ def train_logreg(X, y, learning_rate=0.001, iterations=500, batch_size=16, initi def predict_logreg(inX, weights): - inX = np.insert(inX, 0, 1) # 添加偏置项 + z = np.dot(inX, weights) h = sigmoid(z) return 1 if h >= 0.5 else 0 @@ -117,26 +116,15 @@ def load_data(filepath): data = [line.strip().split() for line in lines] data = [list(map(lambda x: float(x) if x != '?' else np.nan, row)) for row in data] - # 移除类别标签缺失的样本 - data = [row for row in data if row[-1] != np.nan] - - # 使用“0”填充缺失值 - for row in data: - for i in range(len(row)): + # 处理缺失值,这里简单用平均值填充 + for i in range(len(data[0])): + mean_val = np.nanmean([row[i] for row in data if not np.isnan(row[i])]) + for row in data: if np.isnan(row[i]): - row[i] = 0.0 - - # 合并特征23的值2和3为0 - for row in data: - if row[22] == 2 or row == 3: # 假设特征23是第23个元素 - row[22] = 0 - - # 移除不需要的特征 - # 假设特征从0开始编号,那么我们需要移除特征3和特征24~28 - data = [row[:2] + row[3:23] + row[28:] for row in data] + row[i] = mean_val # 分离特征和标签 - X = [row[:-1] for row in data] # 特征现在是从0到21,然后是23到27 + X = [row[:-1] for row in data] y = [row[-1] for row in data] return np.array(X), np.array(y) @@ -152,7 +140,6 @@ def load_data(filepath): """ if __name__ == "__main__": - # 以下代码可用于测试,可自行随意修改 # 加载训练集 X_train, y_train = load_data("./data/horse-colic.data")