遗传算法优化SVM的python代码
时间: 2023-09-04 09:16:30 浏览: 52
下面是一个使用遗传算法优化支持向量机(SVM)的简单示例代码:
```python
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 载入数据集
X, y = load_dataset()
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 定义适应度函数(准确率)
def fitness_function(solution):
C = solution[0]
gamma = solution[1]
# 创建一个 SVM 分类器
clf = SVC(C=C, gamma=gamma)
# 在训练集上训练模型
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = clf.predict(X_test)
# 计算准确率作为适应度值
accuracy = accuracy_score(y_test, y_pred)
return accuracy
# 定义遗传算法参数
population_size = 50 # 种群大小
num_generations = 100 # 迭代次数
num_features = 2 # 解决方案中的特征数量
bounds = [(0.1, 10), (0.001, 1)] # 特征取值范围
# 初始化种群
population = np.random.uniform(low=bounds[0][0], high=bounds[0][1], size=(population_size, num_features))
# 迭代优化过程
for generation in range(num_generations):
# 计算适应度函数值
fitness_scores = np.array([fitness_function(solution) for solution in population])
# 选择操作
parents = population[np.argsort(fitness_scores)][-2:] # 选择最优的两个个体作为父母
# 交叉操作
offspring = np.empty((population_size, num_features))
for i in range(population_size):
parent1, parent2 = np.random.choice(parents, size=2, replace=False)
offspring[i] = (parent1 + parent2) / 2 # 交叉产生新个体
# 变异操作
for i in range(population_size):
for j in range(num_features):
if np.random.rand() < mutation_rate:
offspring[i, j] = np.random.uniform(low=bounds[j][0], high=bounds[j][1])
# 更新种群
population = offspring
# 获取最优解
best_solution = population[np.argmax(fitness_scores)]
best_fitness = np.max(fitness_scores)
print("Best Solution:", best_solution)
print("Best Fitness:", best_fitness)
```
在上述代码中,我们首先载入数据集并划分为训练集和测试集。然后,定义了适应度函数 `fitness_function`,用于评估每个解决方案(SVM 参数)的性能。
接下来,我们设置了遗传算法的参数,包括种群大小、迭代次数、解决方案中的特征数量和特征取值范围。
然后,我们初始化了种群,并开始进行迭代优化过程。在每一代中,通过计算适应度函数值,选择出最优的两个个体作为父母进行交叉操作,产生新个体。然后,进行变异操作,以增加种群的多样性。最后,更新种群。
在迭代完成后,我们得到了最优解和最优适应度值,并将其输出到控制台。
请注意,上述代码只是一个简单示例,实际应用中可能需要根据具体问题进行更多的调整和改进。