更新 function.py
Gitea Actions Test / Challenge-Actions (push) Successful in 33s

This commit is contained in:
2024-12-04 11:50:55 +08:00
parent 6fb0dbf8eb
commit 2a3e2bf3e2
+21 -22
View File
@@ -33,7 +33,6 @@ name = "邓龙树"
# 这里写自己的代码实现 # 这里写自己的代码实现
# 数据加载函数保持不变 # 数据加载函数保持不变
def load_data(filepath): def load_data(filepath):
""" """
@@ -76,15 +75,6 @@ def load_data(filepath):
return data, labels return data, labels
# 封装训练和评估模型的函数
def train_and_evaluate_model(X_train_fold, y_train_fold, X_val_fold, y_val_fold, C):
model = SVC(kernel='rbf', C=C, gamma='scale', random_state=42)
model.fit(X_train_fold, y_train_fold)
y_pred_fold = model.predict(X_val_fold)
accuracy_fold = accuracy_score(y_val_fold, y_pred_fold)
return accuracy_fold, model
def train_svm(X, y, other_params=None): def train_svm(X, y, other_params=None):
""" """
支持向量机训练函数。 支持向量机训练函数。
@@ -124,21 +114,30 @@ if __name__ == "__main__":
# 划分数据集(这里划分出一部分作为最终测试集,剩下的用于交叉验证训练) # 划分数据集(这里划分出一部分作为最终测试集,剩下的用于交叉验证训练)
X_full_train, X_final_test, y_full_train, y_final_test = train_test_split(X_train, y_train, test_size=0.2, random_state=42, stratify=y_train) X_full_train, X_final_test, y_full_train, y_final_test = train_test_split(X_train, y_train, test_size=0.2, random_state=42, stratify=y_train)
# 数据标准化 # 数据标准化,使用MinMaxScaler进行归一化
scaler = StandardScaler() scaler = MinMaxScaler()
X_full_train = scaler.fit_transform(X_full_train) X_full_train = scaler.fit_transform(X_full_train)
X_final_test = scaler.transform(X_final_test) X_final_test = scaler.transform(X_final_test)
# 定义要搜索的超参数网格 # 定义要尝试的C值列表
param_grid = { C_values = [0.1, 1, 10]
'C': [0.1, 1, 10], best_accuracy = 0
'gamma': [0.1, 1, 10] best_model = None
} kf = KFold(n_splits=5, shuffle=True, random_state=42)
svc = SVC(kernel='rbf', random_state=42) for C in C_values:
grid_search = GridSearchCV(svc, param_grid, cv=5, scoring='accuracy') total_accuracy = 0
grid_search.fit(X_full_train, y_full_train) for train_index, val_index in kf.split(X_full_train):
X_train_fold, X_val_fold = X_full_train[train_index], X_full_train[val_index]
best_model = grid_search.best_estimator_ y_train_fold, y_val_fold = y_full_train[train_index], y_full_train[val_index]
model = SVC(kernel='rbf', C=C, gamma='scale', random_state=42)
model.fit(X_train_fold, y_train_fold)
y_pred_fold = model.predict(X_val_fold)
accuracy_fold = accuracy_score(y_val_fold, y_pred_fold)
total_accuracy += accuracy_fold
avg_accuracy = total_accuracy / 5
if avg_accuracy > best_accuracy:
best_accuracy = avg_accuracy
best_model = model
# 使用在交叉验证中选出的最佳模型在最终测试集上进行评估 # 使用在交叉验证中选出的最佳模型在最终测试集上进行评估
y_pred = best_model.predict(X_final_test) y_pred = best_model.predict(X_final_test)