利用sklearn中的SVM处理鸢尾花分类问题,将iris数据集随机划分成训练集、验证集和测试集并利用验证集选择核函数及其参数。 在测试集上计算分类准确率和混淆矩阵
时间: 2024-02-16 08:59:39 浏览: 91
好的,这是一个机器学习问题,需要使用 Python 和 sklearn 库来解决。以下是解决该问题的步骤:
首先,需要导入所需的库和数据集:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
iris = load_iris()
X, y = iris.data, iris.target
```
接着,将数据集划分为训练集、验证集和测试集:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
```
然后,使用验证集选择最佳的核函数和参数:
```python
best_kernel = ''
best_c = 0
best_score = 0
for kernel in ['linear', 'poly', 'rbf', 'sigmoid']:
for c in [0.1, 1, 10]:
svm = SVC(kernel=kernel, C=c)
svm.fit(X_train, y_train)
score = accuracy_score(y_val, svm.predict(X_val))
if score > best_score:
best_score = score
best_kernel = kernel
best_c = c
print("Best kernel:", best_kernel)
print("Best C:", best_c)
```
最后,在测试集上计算分类准确率和混淆矩阵:
```python
svm = SVC(kernel=best_kernel, C=best_c)
svm.fit(X_train, y_train)
y_pred = svm.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Confusion matrix:\n", confusion_matrix(y_test, y_pred))
```
通过以上步骤,我们可以得到在 iris 数据集上使用 SVM 的分类准确率和混淆矩阵。
阅读全文