diff --git a/function.py b/function.py index f189af5..c570041 100644 --- a/function.py +++ b/function.py @@ -1,4 +1,5 @@ import numpy as np +from sklearn.preprocessing import StandardScaler """ 请在这里填写学号和姓名,不填写即成绩无效。 @@ -6,14 +7,12 @@ import numpy as np id = "202210423224" name = "吴杨洋" - def sigmoid(z): """ Sigmoid 激活函数。 """ return 1 / (1 + np.exp(-z)) - def train_logreg(X, y, numIter=1000, learning_rate=0.01, lambda_reg=0.01): m, n = X.shape weights = np.zeros(n) @@ -28,7 +27,6 @@ def train_logreg(X, y, numIter=1000, learning_rate=0.01, lambda_reg=0.01): weights += learning_rate * gradient return weights - def predict_logreg(inX, weights): """ 对率回归预测函数。 @@ -44,7 +42,6 @@ def predict_logreg(inX, weights): prob = sigmoid(z) return 1 if prob >= 0.5 else 0 - def load_data(filepath): """ 从文件中加载数据,若不自行正确实现,则无法通过评测,不记录成绩。 @@ -78,15 +75,7 @@ def load_data(filepath): data_number = len(y) y_train = np.array([1 if y[j] == '2' or y[j] == '3' else 0 for j in range(data_number)]) X = np.array(data_list) - X_train = np.insert(X, 0, 1, axis=1) # 添加偏置项 - return X_train, y_train - - -def standardize(X): - mean = X.mean(axis=0) - std = X.std(axis=0) - return (X - mean) / std, mean, std - + return X, y_train # 不在这里添加偏置项 def main(): # 加载训练集 @@ -94,9 +83,16 @@ def main(): # 加载测试集 X_test, y_test = load_data("./data/horse-colic.test") + # 创建标准化器实例 + scaler = StandardScaler() + # 标准化特征数据 - X_train, mean, std = standardize(X_train) - X_test = (X_test - mean) / std + X_train = scaler.fit_transform(X_train) + X_test = scaler.transform(X_test) + + # 添加偏置项 + X_train = np.insert(X_train, 0, 1, axis=1) # 训练集 + X_test = np.insert(X_test, 0, 1, axis=1) # 测试集 # 训练对率回归模型 weights = train_logreg(X_train, y_train, numIter=1000, learning_rate=0.01, lambda_reg=0.1) @@ -106,6 +102,5 @@ def main(): accuracy_test = np.mean(y_pred_test == y_test) print(f"Test Accuracy: {accuracy_test:.2f}") - if __name__ == "__main__": main() \ No newline at end of file