generated from LufsX/Challenge-SVM
This commit is contained in:
+21
-22
@@ -33,7 +33,6 @@ name = "邓龙树"
|
||||
|
||||
|
||||
# 这里写自己的代码实现
|
||||
|
||||
# 数据加载函数保持不变
|
||||
def load_data(filepath):
|
||||
"""
|
||||
@@ -76,15 +75,6 @@ def load_data(filepath):
|
||||
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):
|
||||
"""
|
||||
支持向量机训练函数。
|
||||
@@ -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)
|
||||
|
||||
# 数据标准化
|
||||
scaler = StandardScaler()
|
||||
# 数据标准化,使用MinMaxScaler进行归一化
|
||||
scaler = MinMaxScaler()
|
||||
X_full_train = scaler.fit_transform(X_full_train)
|
||||
X_final_test = scaler.transform(X_final_test)
|
||||
|
||||
# 定义要搜索的超参数网格
|
||||
param_grid = {
|
||||
'C': [0.1, 1, 10],
|
||||
'gamma': [0.1, 1, 10]
|
||||
}
|
||||
svc = SVC(kernel='rbf', random_state=42)
|
||||
grid_search = GridSearchCV(svc, param_grid, cv=5, scoring='accuracy')
|
||||
grid_search.fit(X_full_train, y_full_train)
|
||||
|
||||
best_model = grid_search.best_estimator_
|
||||
# 定义要尝试的C值列表
|
||||
C_values = [0.1, 1, 10]
|
||||
best_accuracy = 0
|
||||
best_model = None
|
||||
kf = KFold(n_splits=5, shuffle=True, random_state=42)
|
||||
for C in C_values:
|
||||
total_accuracy = 0
|
||||
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]
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user