From 331080580651ab876dd874db3e347aabd5e92b3a Mon Sep 17 00:00:00 2001 From: zhangchenghong <1598349064@qq.com> Date: Fri, 1 Nov 2024 20:59:51 +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 | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/function.py b/function.py index 2b3b073..5573371 100644 --- a/function.py +++ b/function.py @@ -32,15 +32,17 @@ from sklearn.preprocessing import StandardScaler def sigmoid(z): return 1.0 / (1 + np.exp(-z)) - -def train_logreg(X, y, learning_rate=0.05, iterations=1500, batch_size=64): +def train_logreg(X, y, learning_rate=0.05, iterations=1500, batch_size=64, regularization_strength=0.1): """ 对率回归训练函数。 Args: - X (numpy array): 特征数据。 - y (numpy array): 标签数据。 - - other_params (str): 其它参数,可选设置。若需设置其它参数,必须设置其默认值,否则将**无法通过**自动评测,**成绩为零**。 + - learning_rate (float): 学习率。 + - iterations (int): 迭代次数。 + - batch_size (int): 批量大小。 + - regularization_strength (float): L2正则化强度。 Returns: - numpy array: 训练得到的权重。 @@ -61,8 +63,7 @@ def train_logreg(X, y, learning_rate=0.05, iterations=1500, batch_size=64): y_batch = y_shuffled[j:j + batch_size] z = np.dot(X_batch, weights) h = sigmoid(z) - gradient = np.dot(X_batch.T, (h - y_batch)) / len(y_batch) - + gradient = np.dot(X_batch.T, (h - y_batch)) / len(y_batch) + regularization_strength * weights weights -= learning_rate * gradient # 计算训练集准确率 @@ -75,34 +76,34 @@ def train_logreg(X, y, learning_rate=0.05, iterations=1500, batch_size=64): wait += 1 return best_weights + def predict_logreg(X, weights): """ 对率回归预测函数。 Args: - - inX (numpy array): 输入待分类的样本。 + - X (numpy array): 输入待分类的样本。 - weights (numpy array): 训练得到的权重。 Returns: - - int: 预测的分类标签。 + - numpy array: 预测的分类标签。 """ z = np.dot(X, weights) h = sigmoid(z) return np.where(h > 0.5, 1, 0) -# 这里也写自己的代码实现 + def load_data(filepath): """ 从文件中加载数据,若不自行正确实现,则无法通过评测,**不记录成绩**。 Args: - - directory (str): 数据文件路径。 + - filepath (str): 数据文件路径。 Returns: - np.array: 特征数据。 - np.array: 标签数据。 """ data = [] - data = [] labels = [] with open(filepath, 'r') as f: for line in f: @@ -114,7 +115,6 @@ def load_data(filepath): data = np.array(data) labels = np.array(labels) - target_variable = np.where((labels == 2) | (labels == 3), 0, labels) return data, target_variable @@ -132,7 +132,7 @@ if __name__ == "__main__": X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) - final_weights = train_logreg(X_train, y_train, learning_rate=0.001, iterations=1500, batch_size=64) + final_weights = train_logreg(X_train, y_train, learning_rate=0.001, iterations=5000, batch_size=64) final_accuracy = accuracy(X_test, y_test, final_weights) - print(f"最终测试集的准确率: {final_accuracy:.4f}") \ No newline at end of file + print(f"最终测试集的准确率: {final_accuracy:.4f}")