帮我写一个基于鸢尾花数据集,采用KNN、SVM等多个方法对鸢尾花进行分类,通过对比准确率、精确率等指标,选取最佳算法。
时间: 2024-03-11 18:50:30 浏览: 70
基于SVM鸢尾花分类数据集
好的,下面是一个基于鸢尾花数据集的分类代码,采用KNN、SVM等多个方法,并通过交叉验证等方法来对比准确率、精确率等指标,选取最佳算法:
```python
# 导入相关库
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义KNN模型
knn = KNeighborsClassifier()
# 定义SVM模型
svm = SVC()
# 定义参数空间
params_knn = {'n_neighbors': np.arange(1, 10)}
params_svm = {'C': [0.1, 1, 10], 'kernel': ['linear', 'poly', 'rbf', 'sigmoid']}
# 使用GridSearchCV进行参数调优
grid_knn = GridSearchCV(knn, params_knn, cv=5)
grid_svm = GridSearchCV(svm, params_svm, cv=5)
# 模型训练和评估
models = {'KNN': grid_knn, 'SVM': grid_svm}
for name, model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
pre = precision_score(y_test, y_pred, average='weighted')
print('%s - Accuracy: %f, Precision: %f' % (name, acc, pre))
# 选取最佳模型
best_model = max(models, key=lambda x: models[x].best_score_)
print('Best Model:', best_model)
```
这段代码使用了sklearn库中的KNeighborsClassifier和SVC类来定义KNN和SVM模型,并使用GridSearchCV函数进行参数调优。在模型训练和预测时,我们分别调用fit和predict方法。最后,我们使用accuracy_score和precision_score函数来评估模型性能,并使用max函数选取表现最好的模型。
阅读全文