基于鸢尾花数据集,采用KNN、SVM等多个方法对鸢尾花进行分类,通过对比准确率、精确率等指标,选取最佳算法。
时间: 2024-03-11 08:51:34 浏览: 42
好的,下面是一份 Python 代码,使用 KNN 和 SVM 对鸢尾花数据集进行分类,并对比它们的准确率、精确率等指标。代码如下:
```python
# 导入必要的库
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 导入鸢尾花数据集
iris = load_iris()
# 将数据集转换为 DataFrame
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df.iloc[:, :-1], df.iloc[:, -1], test_size=0.3, random_state=42)
# 使用 KNN 进行分类
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
y_pred_knn = knn.predict(X_test)
# 使用 SVM 进行分类
svm = SVC()
svm.fit(X_train, y_train)
y_pred_svm = svm.predict(X_test)
# 计算准确率、精确率、召回率、F1 值等指标
acc_knn = accuracy_score(y_test, y_pred_knn)
pre_knn = precision_score(y_test, y_pred_knn, average='macro')
rec_knn = recall_score(y_test, y_pred_knn, average='macro')
f1_knn = f1_score(y_test, y_pred_knn, average='macro')
acc_svm = accuracy_score(y_test, y_pred_svm)
pre_svm = precision_score(y_test, y_pred_svm, average='macro')
rec_svm = recall_score(y_test, y_pred_svm, average='macro')
f1_svm = f1_score(y_test, y_pred_svm, average='macro')
# 输出评估结果
print("KNN:")
print("Accuracy:", acc_knn)
print("Precision:", pre_knn)
print("Recall:", rec_knn)
print("F1-score:", f1_knn)
print("SVM:")
print("Accuracy:", acc_svm)
print("Precision:", pre_svm)
print("Recall:", rec_svm)
print("F1-score:", f1_svm)
```
该代码中使用 `load_iris()` 函数导入鸢尾花数据集,并将其转换为 DataFrame 格式。然后,使用 `train_test_split()` 函数将数据集分为训练集和测试集。接下来,使用 `KNeighborsClassifier` 和 `SVC` 分别进行分类,并计算准确率、精确率、召回率、F1 值等指标。最后,输出评估结果。
你可以根据需要修改代码,并使用自己的数据集进行分类和评估。希望对你有所帮助!
阅读全文