python(svm算法)

本文介绍了一个使用支持向量机(SVM)对鸢尾花数据集进行二特征分类的实验。通过划分训练集和测试集,并采用不同的核函数进行训练和预测,最终展示分类效果并绘制了分类结果图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


鸢尾花SVM二特征分类实验:

程序:

from sklearn import svm
from sklearn import datasets
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import colors
import numpy as np
#处理数据集
def datadeal():
    iris=datasets.load_iris()
    sourcedata = iris['data']  # 得到属性向量
    labledata = iris['target']  # 得到类别标记
    # 划分训练集和测试集
    train_x = sourcedata[0:89, :]
    train_y = labledata[0:89]
    test_x = sourcedata[90:100, :]
    test_y = labledata[90:100]
    return train_x,train_y,test_x,test_y
#读取测试集的精度
def cal_accuracy(test_y,predict_data):
    m=np.shape(predict_data)[0]
    count=0
    for i in range(m):
        if test_y[i]==predict_data[i]:
            count=count+1
    accuracy=count/m*100
    return accuracy
#绘制一个二维的图像。所以将数据变成一个二维的数据
def plot_show(train_x,train_y,test_x,test_y):
    plot_train_x=train_x[:,0:2]
    plot_test_x=test_x[:,0:2]
    clf = svm.SVC(C=0.91, kernel='linear', gamma=20, decision_function_shape='ovr')
    clf.fit(train_x, train_y)

    #指定默认字体,不然汉字显示不出来
    mpl.rcParams['font.sans-serif'] = [u'SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    #
    predict_data = clf.predict(test_x)
    plt.scatter(plot_train_x[:, 0], plot_train_x[:, 1], c=train_y, cmap=plt.cm.Paired)
    plt.scatter(plot_test_x[:, 0], plot_test_x[:, 1],c=predict_data,marker='o',cmap=None)
    plt.title(u'鸢尾花SVM二特征分类', fontsize=15)
    plt.ylabel(u'花萼宽度', fontsize=13)
    plt.show()
def main():
    train_x, train_y, test_x, test_y=datadeal()
    clf = svm.SVC(C=0.91, kernel='rbf', gamma=20, decision_function_shape='ovr')
    clf.fit(train_x, train_y.ravel())
    predict_data= clf.predict(test_x)
    accuracy=cal_accuracy(test_y,predict_data)
    print(accuracy)
    plot_show(train_x, train_y, test_x,test_y)

if __name__=='__main__':
    main()


主要原理可以详看: 支持向量机通俗导论(理解SVM的三层境界) - 结构之法 算法之道 - 优快云博客  http://blog.youkuaiyun.com/v_july_v/article/details/7624837

绘图不懂请看:http://blog.youkuaiyun.com/crossky_jing/article/details/49466127

### PythonSVM算法的实现与应用 支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类和回归问题。以下是关于如何在Python中使用和支持向量机的具体说明。 #### 使用Scikit-Learn库中的SVM模块 `scikit-learn` 是一个流行的机器学习库,提供了丰富的工具用于构建和评估模型。其中 `SVC` 类专门用于处理分类任务,而 `SVR` 则适用于回归分析。 安装所需库可以通过以下命令完成: ```bash pip install scikit-learn numpy pandas matplotlib ``` #### 数据预处理 为了提高模型性能,在实际操作前需对数据进行标准化或归一化处理。这一步骤尤其重要,因为SVM对特征尺度敏感。 ```python from sklearn.preprocessing import StandardScaler # 假设 X_train 和 y_train 已经定义好 scaler = StandardScaler() X_train_std = scaler.fit_transform(X_train) X_test_std = scaler.transform(X_test) ``` #### 构建并训练SVM模型 通过调整参数如核函数类型 (`kernel`) 及正则项系数 (`C`) 来优化模型表现。 ```python from sklearn.svm import SVC model = SVC(kernel='linear', C=1.0, random_state=42) # 这里选择了线性核作为例子 model.fit(X_train_std, y_train) ``` 这里指定了线性核[^1],当然也可以尝试其他类型的核函数比如多项式核(`poly`) 或径向基函数(RBF)(`rbf`)等以适应不同的场景需求[^2]。 #### 预测新样本标签 一旦完成了模型训练过程,则可以利用该模型预测未知实例所属类别。 ```python y_pred = model.predict(X_test_std) print(y_pred[:10]) # 输出前十个预测结果 ``` 上述代码片段展示了如何调用 `.predict()` 方法来进行预测工作[^3]。 #### 性能评估 最后要衡量我们的模型效果好坏程度,常用指标包括准确率(Accuracy),混淆矩阵(Confusion Matrix)以及F1分数等等。 ```python from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay accuracy = accuracy_score(y_test, y_pred) cm = confusion_matrix(y_test, y_pred) disp = ConfusionMatrixDisplay(confusion_matrix=cm) disp.plot(cmap=plt.cm.Blues) plt.show() print(f'Accuracy: {accuracy * 100:.2f}%') ``` 以上就是基于Python环境下运用SVM执行二元或者多元分类任务的一个基本流程概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值