From c58baa453deff23196c62c7a059f7bc9d2b8c77d Mon Sep 17 00:00:00 2001 From: hao <19382120447@163.com> Date: Thu, 31 Oct 2024 16:58:39 +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 | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/function.py b/function.py index 409b1ac..8a174ec 100644 --- a/function.py +++ b/function.py @@ -1,4 +1,3 @@ -# function.py import numpy as np """ @@ -17,28 +16,34 @@ import numpy as np - numpy: 2.1.1 """ - """ 请在这里填写学号和姓名,不填写即成绩无效。 """ -id = "202210423xxx" -name = "test_name" - +id = "202210423228" +name = "黎世浩" # 这里写自己的代码实现 -def train_logreg(X, y, other_params="你自己设置一些其它参数"): +def train_logreg(X, y, learning_rate=0.01, iterations=1000): """ 对率回归训练函数。 Args: - X (numpy array): 特征数据。 - y (numpy array): 标签数据。 - - other_params (str): 其它参数,可选设置。若需设置其它参数,必须设置其默认值,否则将**无法通过**自动评测,**成绩为零**。 + - learning_rate (float): 学习率,默认为0.01。 + - iterations (int): 迭代次数,默认为1000。 Returns: - numpy array: 训练得到的权重。 """ - + m, n = X.shape + weights = np.zeros(n) + for i in range(iterations): + linear_model = np.dot(X, weights) + y_predicted = 1 / (1 + np.exp(-linear_model)) + gradient = np.dot(X.T, (y_predicted - y)) / m + weights -= learning_rate * gradient + return weights def predict_logreg(inX, weights): """ @@ -51,7 +56,9 @@ def predict_logreg(inX, weights): Returns: - int: 预测的分类标签。 """ - + linear_model = np.dot(inX, weights) + y_predicted = 1 / (1 + np.exp(-linear_model)) + return 1 if y_predicted > 0.5 else 0 # 这里也写自己的代码实现 def load_data(filepath): @@ -59,13 +66,16 @@ def load_data(filepath): 从文件中加载数据,若不自行正确实现,则无法通过评测,**不记录成绩**。 Args: - - directory (str): 数据文件路径。 + - filepath (str): 数据文件路径。 Returns: - np.array: 特征数据。 - np.array: 标签数据。 """ - + data = np.loadtxt(filepath, delimiter=',', dtype=float) + X = data[:, :-1] + y = (data[:, -1] > 0.5).astype(int) # Assuming the last column is the label + return X, y if __name__ == "__main__": # 以下代码可用于测试,可自行随意修改 @@ -80,4 +90,4 @@ if __name__ == "__main__": # 测试单个数据 y_pred = predict_logreg(X_test[11], weights) - print(f"预测结果: {y_pred}, 实际结果: {y_test[11]}") + print(f"预测结果: {y_pred}, 实际结果: {y_test[11]}") \ No newline at end of file