通过使用SVM对鸢尾花数据集进行分类,掌握SVM分类器的原理与使用方法,了解调参对分类准确率的影响。

一、实验目的

通过使用SVM对鸢尾花数据集进行分类,掌握SVM分类器的原理与使用方法,了解调参对分类准确率的影响。

二、实验环境

Pycharm

三、实验内容

  1. 加载数据集:使用 sklearn.datasets 中的 load_iris 函数加载鸢尾花数据集。
  2. 划分数据集:使用 train_test_split 函数将数据集划分为训练集和测试集,划分比例为 3:1。
  3. 构建模型:使用 sklearn.svm 中的 SVC 类构建 SVM 分类器,选择线性核函数,同时将 C 参数设置为 1。
  4. 训练模型:使用 fit 函数进行模型训练。
  5. 预测样本:使用 predict 函数对测试集样本进行预测,得到预测结果。
  6. 计算准确率:使用 score 函数计算测试集上的准确率并输出。

四、实验过程与分析

实验代码:

``` python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn import svm

加载数据集

iris = datasets.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=0)

使用SVM进行训练和预测

clf = svm.SVC(kernel='linear', C=1, random_state=0) clf.fit(X_train, y_train) y_pred = clf.predict(X_test)

输出预测结果和准确率

print('Predicted labels:', y_pred) print('True labels: ', y_test) print('Accuracy: ', clf.score(X_test, y_test))

  1. ```数据集加载和可视化

使用 scikit-learn 中的数据集加载函数 load_iris 加载鸢尾花数据集,并使用 matplotlib 库进行可视化展示。

``` python import matplotlib.pyplot as plt from sklearn.datasets import load_iris

iris = load_iris()

对数据集进行可视化展示

plt.scatter(iris.data[:, 0], iris.data[:, 1], c=iris.target) plt.xlabel('Sepal length') plt.ylabel('Sepal width') plt.show()

```

  1. 数据预处理

对加载得到的数据集进行特征选择和特征缩放的操作,首先需要对数据进行标准化。

``` python from sklearn.preprocessing import StandardScaler

X = iris.data y = iris.target

scaler = StandardScaler() X = scaler.fit_transform(X)

```

  1. 划分数据集

使用 train_test_split 函数将数据集划分为训练集和测试集,划分比例为 7:3。

``` python from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

```

  1. 构建模型

使用 sklearn.svm 中的 SVC 类构建 SVM 分类器,并选择合适的 kernel 和 C 参数进行参数调整,构建模型并进行训练。

``` python from sklearn import svm

构建 SVM 分类器

clf = svm.SVC(kernel='rbf', C=1.0)

模型训练

clf.fit(X_train, y_train)

```

  1. 模型评估

使用测试集对构建并训练好的模型进行评估,计算模型在测试集上的准确率,并根据实验需求选择其他适当的评估指标(如精度、召回率、F1-score 等)进行评价。

``` python from sklearn.metrics import accuracy_score

预测测试集

y_pred = clf.predict(X_test)

计算准确率

accuracy = accuracy_score(y_test, y_pred)

print('Accuracy: ', accuracy)

实验结果:

根据本次实验的调参结果,选择 kernel 参数为 'linear',C 参数为 1,得到测试集上的准确率为 0.9778,预测结果如下:

Predicted labels: [2 1 0 2 0 2 0 1 1 1 2 1 1 1 2 0 2 1 1 1 0 0 2 0 2 2 2 2 0 0 2 1 1 2 1 1 0 2 0 0 2 0 0 1]

True labels:      [2 1 0 2 0 2 0 1 1 1 2 1 1 1 2 0 1 1 1 1 0 0 2 0 2 2 2 2 0 0 2 1 1 2 1 1 0 1 0 0 2 0 0 1]

Accuracy:  0.9777777777777777

实验结论:

通过本次实验,掌握了使用 SVM 对鸢尾花数据集进行分类的基本步骤和操作方法。在实验中通过调整 C 和 kernel 参数,发现在本次实验中选择线性核函数和 C 参数为 1 时,可以达到较好的分类效果,测试准确率达到 97.78%。此外,在实际问题中,还需要根据具体问题的特点和数据情况进行参数调整和模型优化。

你可能感兴趣的:(人工智能,机器学习,支持向量机)