一、实验目的 |
通过使用SVM对鸢尾花数据集进行分类,掌握SVM分类器的原理与使用方法,了解调参对分类准确率的影响。 |
二、实验环境 |
Pycharm |
三、实验内容 |
|
四、实验过程与分析 实验代码: ``` 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))
使用 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() ```
对加载得到的数据集进行特征选择和特征缩放的操作,首先需要对数据进行标准化。 ``` python from sklearn.preprocessing import StandardScaler X = iris.data y = iris.target scaler = StandardScaler() X = scaler.fit_transform(X) ```
使用 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) ```
使用 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) ```
使用测试集对构建并训练好的模型进行评估,计算模型在测试集上的准确率,并根据实验需求选择其他适当的评估指标(如精度、召回率、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%。此外,在实际问题中,还需要根据具体问题的特点和数据情况进行参数调整和模型优化。 |