# function.py import numpy as np import pandas as pd """ 实验说明: - 自行编写实现数据加载与预测病马死亡的对率回归算法。 注意事项: - 在 function.py 中实现对率回归算法。 - 可以自行导入其他库,需要在 requirements.txt 添加依赖,若未在 requirements.txt 中添加使用到的依赖,则无法自动评测,成绩为零。 - 自动评测脚本仅会加载 train_logreg、predict_logreg 和 load_data 函数,请勿修改函数名。 测评环境: - CPU: Intel Xeon(R) CPU E3-1231 v3 @ 3.40GHz - OS: Ubuntu 22.04.4 LTS - Python: 3.10.12 - numpy: 2.1.1 """ """ 请在这里填写学号和姓名,不填写即成绩无效。 姓名请直接**填写中文** 例如: name = "张三" """ id = "202210423223" name = "李顺潮" def sigmoid(z): """Sigmoid函数,用于对率回归的预测。""" return 1 / (1 + np.exp(-z)) # 这里写自己的代码实现 def train_logreg(X, y, other_params="你自己设置一些其它参数"): """ 对率回归训练函数。 Args: - X (numpy array): 特征数据。 - y (numpy array): 标签数据。 - other_params (str): 其它参数,可选设置。若需设置其它参数,必须设置其默认值,否则将**无法通过**自动评测,**成绩为零**。 Returns: - numpy array: 训练得到的权重。 """ # 初始化权重 weights = np.zeros(X.shape[1]) learning_rate = 0.01 iterations = 1000 for _ in range(iterations): z = np.dot(X, weights) predictions = sigmoid(z) error = y - predictions gradient = np.dot(X.T, error) weights += learning_rate * gradient return weights def predict_logreg(inX, weights): """ 对率回归预测函数。 Args: - inX (numpy array): 输入待分类的样本。 - weights (numpy array): 训练得到的权重。 Returns: - int: 预测的分类标签。 """ # 计算预测值 z = np.dot(inX, weights) probability = sigmoid(z) return 1 if probability >= 0.5 else 0 # 这里也写自己的代码实现 def load_data(filepath): """ 从文件中加载数据,若不自行正确实现,则无法通过评测,**不记录成绩**。 Args: - directory (str): 数据文件路径。 Returns: - np.array: 特征数据。 - np.array: 标签数据。 """ # 使用pandas加载数据 df = pd.read_csv(filepath, header=None) # 替换缺失值和非数值数据,这里假设我们用0来填补缺失数据 df.replace('?', np.nan, inplace=True) df.fillna(0, inplace=True) # 将数据拆分为特征和标签 X = df.iloc[:, :-1].values # 特征 y = df.iloc[:, -1].values # 标签 return X, y if __name__ == "__main__": # 以下代码可用于测试,可自行随意修改 # 加载训练集 X_train, y_train = load_data("./data/horse-colic.data") # 训练模型 weights = train_logreg(X_train, y_train) # 测试单个样本的预测 sample = X_train[0].reshape(1, -1) # 取出第一行作为样本 prediction = predict_logreg(sample, weights) print(f"样本预测: {prediction}")