generated from LufsX/Experiment-LogReg
This commit is contained in:
+38
-14
@@ -128,21 +128,45 @@ def accuracy(X, y, weights):
|
|||||||
predictions = [predict_logreg(sample, weights) for sample in X]
|
predictions = [predict_logreg(sample, weights) for sample in X]
|
||||||
return np.mean(predictions == y) # 计算准确率
|
return np.mean(predictions == y) # 计算准确率
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def grid_search(X_train, y_train, X_test, y_test, param_grid):
|
||||||
# 以下代码可用于测试,可自行随意修改
|
best_accuracy = 0
|
||||||
# 加载训练集
|
best_params = None
|
||||||
X_train, y_train = load_data("./horse-colic.data")
|
|
||||||
|
|
||||||
# 加载测试集
|
for params in product(*param_grid.values()):
|
||||||
|
learning_rate, iterations, batch_size, regularization, lambda_reg = params
|
||||||
|
|
||||||
|
weights = train_logreg(X_train, y_train, learning_rate, iterations, batch_size, regularization, lambda_reg)
|
||||||
|
acc = accuracy(X_test, y_test, weights)
|
||||||
|
|
||||||
|
if acc > best_accuracy:
|
||||||
|
best_accuracy = acc
|
||||||
|
best_params = params
|
||||||
|
|
||||||
|
return best_params, best_accuracy
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
X_train, y_train = load_data("./horse-colic.data")
|
||||||
X_test, y_test = load_data("./horse-colic.test")
|
X_test, y_test = load_data("./horse-colic.test")
|
||||||
|
|
||||||
# 训练对率回归模型
|
# 定义参数网格
|
||||||
weights = train_logreg(X_train, y_train, learning_rate=0.25, iterations=1500, batch_size=16, regularization='L2',
|
param_grid = {
|
||||||
lambda_reg=0.5)
|
'learning_rate': [0.01, 0.05, 0.1, 0.15, 0.2, 0.25],
|
||||||
# 计算并输出准确率
|
'iterations': [200, 500, 1000, 1500],
|
||||||
acc = accuracy(X_test, y_test, weights)
|
'batch_size': [16, 32, 64, 128],
|
||||||
print(f"模型的准确率: {acc:.2f}")
|
'regularization': [None, 'L1', 'L2'],
|
||||||
|
'lambda_reg': [0.1, 0.5, 0.05, 0.15]
|
||||||
|
}
|
||||||
|
|
||||||
# 测试单个数据
|
# 进行网格搜索
|
||||||
y_pred = predict_logreg(X_test[11], weights)
|
best_params, best_accuracy = grid_search(X_train, y_train, X_test, y_test, param_grid)
|
||||||
print(f"预测结果: {y_pred}, 实际结果: {y_test[11]}")
|
|
||||||
|
print(f"最佳参数组合: {best_params}")
|
||||||
|
print(f"最佳准确率: {best_accuracy:.4f}")
|
||||||
|
|
||||||
|
# 使用最佳参数组合进行最终测试
|
||||||
|
best_learning_rate, best_iterations, best_batch_size, best_regularization, best_lambda_reg = best_params
|
||||||
|
final_weights = train_logreg(X_train, y_train, best_learning_rate, best_iterations, best_batch_size, best_regularization, best_lambda_reg)
|
||||||
|
|
||||||
|
# 计算并输出最终测试集的准确率
|
||||||
|
final_accuracy = accuracy(X_test, y_test, final_weights)
|
||||||
|
print(f"最终测试集的准确率: {final_accuracy:.4f}")
|
||||||
Reference in New Issue
Block a user